From 49fadc563459b588a82c044d70513467aae08e39 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 19 Nov 2023 14:50:20 +0100 Subject: [PATCH 1/2] Disable procedural eye blinking when face tracking is running --- applications/emocam/emocam1.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/applications/emocam/emocam1.js b/applications/emocam/emocam1.js index 1aac0ea..c8f5627 100644 --- a/applications/emocam/emocam1.js +++ b/applications/emocam/emocam1.js @@ -33,7 +33,9 @@ var webWindow; var yaw = 0; var roll = 0; var headTransform = null; - var lastDataArrived = Date.now(); + var lastDataArrived = Date.now() - 3000; + // Caching this value is a good idea because API calls are expensive + var isProceduralblinkingEnabled = true; button = tablet.addButton({ icon: ROOT + "images/face.png", @@ -84,11 +86,19 @@ var webWindow; var propList = ["headRotation", "headType"]; handlerId = MyAvatar.addAnimationStateHandler(function (props) { if (Date.now() - lastDataArrived < 2000) { + if (isProceduralblinkingEnabled) { + MyAvatar.hasProceduralBlinkFaceMovement = false; + isProceduralblinkingEnabled = false; + } return { headRotation: headTransform, headType: 4 }; } else { + if (!isProceduralblinkingEnabled) { + MyAvatar.hasProceduralBlinkFaceMovement = true; + isProceduralblinkingEnabled = true; + } return props; } }, propList); @@ -222,18 +232,6 @@ var webWindow; } } - function setEmotion(currentEmotion) { - if (emotion !== lastEmotionUsed) { - lastEmotionUsed = emotion; - } - if (currentEmotion !== lastEmotionUsed) { - changingEmotionPercentage = 0.0; - emotion = currentEmotion; - isChangingEmotion = true; - MyAvatar.hasScriptedBlendshapes = true; - } - } - function onWindowClosed() { webWindow = null; button.editProperties({isActive: false}); From 488a1dec4219ac5f3c3002a4985c7066af4768bb Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 19 Nov 2023 17:21:37 +0100 Subject: [PATCH 2/2] Restore previous state for procedural eye blinking --- applications/emocam/emocam1.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/applications/emocam/emocam1.js b/applications/emocam/emocam1.js index c8f5627..6da211b 100644 --- a/applications/emocam/emocam1.js +++ b/applications/emocam/emocam1.js @@ -33,9 +33,11 @@ var webWindow; var yaw = 0; var roll = 0; var headTransform = null; - var lastDataArrived = Date.now() - 3000; + var lastDataArrived = 0; + const POSE_TIMEOUT_MS = 2000; + var proceduralBlinkingPreviousState = MyAvatar.hasProceduralBlinkFaceMovement; // Caching this value is a good idea because API calls are expensive - var isProceduralblinkingEnabled = true; + var isProceduralBlinkingAllowed = true; button = tablet.addButton({ icon: ROOT + "images/face.png", @@ -85,19 +87,20 @@ var webWindow; var propList = ["headRotation", "headType"]; handlerId = MyAvatar.addAnimationStateHandler(function (props) { - if (Date.now() - lastDataArrived < 2000) { - if (isProceduralblinkingEnabled) { + // Just pass through the animation state without modifying it when pose times out + if (Date.now() - lastDataArrived < POSE_TIMEOUT_MS) { + if (isProceduralBlinkingAllowed) { MyAvatar.hasProceduralBlinkFaceMovement = false; - isProceduralblinkingEnabled = false; + isProceduralBlinkingAllowed = false; } return { headRotation: headTransform, headType: 4 }; } else { - if (!isProceduralblinkingEnabled) { - MyAvatar.hasProceduralBlinkFaceMovement = true; - isProceduralblinkingEnabled = true; + if (!isProceduralBlinkingAllowed) { + MyAvatar.hasProceduralBlinkFaceMovement = proceduralBlinkingPreviousState; + isProceduralBlinkingAllowed = true; } return props; } @@ -250,6 +253,7 @@ var webWindow; tablet.removeButton(button); } + MyAvatar.hasProceduralBlinkFaceMovement = proceduralBlinkingPreviousState; MyAvatar.restoreAnimation(); mapping.disable(); });