// // controllers/overrideHandAnimation.js // // Created by Angus Antley // Copyright 2019 High Fidelity, Inc. // // Default script to override the animation of the hands with user animations // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // /* global Script, MyAvatar, Messages, Controller */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { var animStateHandlerID; var leftHandOverlayAlpha = 0; var rightHandOverlayAlpha = 0; var isLeftIndexPointing = false; var isLeftThumbRaised = false; var isLeftTrigger = false; var isRightIndexPointing = false; var isRightThumbRaised = false; var isRightTrigger = false; function init() { Script.update.connect(update); animStateHandlerID = MyAvatar.addAnimationStateHandler( animStateHandler, [ "leftHandOverlayAlpha", "rightHandOverlayAlpha" ] ); } function animStateHandler(props) { return { leftHandOverlayAlpha: leftHandOverlayAlpha, rightHandOverlayAlpha: rightHandOverlayAlpha }; } function update(dt) { var rightHandPose = Controller.getPoseValue(Controller.Standard.RightHand); var leftHandPose = Controller.getPoseValue(Controller.Standard.LeftHand); var previousRightIndexPointing = isRightIndexPointing; var previousRightThumbRaised = isRightThumbRaised; var previousRightTrigger = isRightTrigger; var previousLeftIndexPointing = isLeftIndexPointing; var previousLeftThumbRaised = isLeftThumbRaised; var previousLeftTrigger = isLeftTrigger; // Pointing index fingers and raising thumbs isRightIndexPointing = (rightHandPose.valid && Controller.getValue(Controller.Standard.RightIndexPoint) === 1); isRightThumbRaised = (rightHandPose.valid && Controller.getValue(Controller.Standard.RightThumbUp) === 1); isRightTrigger = (Controller.getValue(Controller.Standard.RightGrip) === 1); isLeftIndexPointing = (leftHandPose.valid && Controller.getValue(Controller.Standard.LeftIndexPoint) === 1); isLeftThumbRaised = (leftHandPose.valid && Controller.getValue(Controller.Standard.LeftThumbUp) === 1); isLeftTrigger = (Controller.getValue(Controller.Standard.LeftGrip) === 1); if (previousRightIndexPointing !== isRightIndexPointing){ if ((isRightIndexPointing === true) && (isRightTrigger === false)){ rightHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(false, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_horns_right.fbx",30.0,true,0,99); } else if ((isRightIndexPointing === true) && (isRightTrigger === true)) { rightHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(false, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_shaka_right.fbx",30.0,true,0,99); } else { MyAvatar.restoreHandAnimation(false); rightHandOverlayAlpha = 0.0; } } if (previousRightThumbRaised !== isRightThumbRaised){ if ((isRightThumbRaised === false) && (isRightTrigger === false)){ rightHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(false, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_peace_right.fbx",30.0,true,0,99); } else if ((isRightThumbRaised === false) && (isRightTrigger === true)){ rightHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(false, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_okay_right.fbx",30.0,true,0,99); } else { MyAvatar.restoreHandAnimation(false); rightHandOverlayAlpha = 0.0; } } if (previousRightTrigger !== isRightTrigger){ if ((isRightTrigger === true) && (isRightThumbRaised === true) && (isRightIndexPointing === false)){ rightHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(false, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_heart_right.fbx",30.0,true,0,99); } else { MyAvatar.restoreHandAnimation(false); rightHandOverlayAlpha = 0.0; } } if (previousLeftIndexPointing !== isLeftIndexPointing){ if ((isLeftIndexPointing === true) && (isLeftTrigger === false)){ leftHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(true, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_horns_left.fbx",30.0,true,0,99); } else if ((isLeftIndexPointing === true) && (isLeftTrigger === true)) { leftHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(true, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_shaka_left.fbx",30.0,true,0,99); } else { MyAvatar.restoreHandAnimation(true); leftHandOverlayAlpha = 0.0; } } if (previousLeftThumbRaised !== isLeftThumbRaised){ if ((isLeftThumbRaised === false) && (isLeftTrigger === false)){ leftHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(true, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_peace_left.fbx",30.0,true,0,99); } else if ((isLeftThumbRaised === false) && (isLeftTrigger === true)){ leftHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(true, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_okay_left.fbx",30.0,true,0,99); } else { MyAvatar.restoreHandAnimation(true); leftHandOverlayAlpha = 0.0; } } if (previousLeftTrigger !== isLeftTrigger){ if ((isLeftTrigger === true) && (isLeftThumbRaised === true) && (isLeftIndexPointing === false)){ leftHandOverlayAlpha = 1.0; MyAvatar.overrideHandAnimation(true, "https://hifi-content.s3.amazonaws.com/angus/handAnim/emote_heart_left.fbx",30.0,true,0,99); } else { MyAvatar.restoreHandAnimation(true); leftHandOverlayAlpha = 0.0; } } } function shutdown() { Script.update.disconnect(update); MyAvatar.removeAnimationStateHandler(animStateHandlerID); } Script.scriptEnding.connect(shutdown); init(); }()); // end local scope