diff --git a/interface/resources/avatar/animations/touch_point_closed_left.fbx b/interface/resources/avatar/animations/touch_point_closed_left.fbx new file mode 100644 index 0000000000..8835de4f7f Binary files /dev/null and b/interface/resources/avatar/animations/touch_point_closed_left.fbx differ diff --git a/interface/resources/avatar/animations/touch_point_closed_right.fbx b/interface/resources/avatar/animations/touch_point_closed_right.fbx new file mode 100644 index 0000000000..c4efe4ff90 Binary files /dev/null and b/interface/resources/avatar/animations/touch_point_closed_right.fbx differ diff --git a/interface/resources/avatar/animations/touch_point_open_left.fbx b/interface/resources/avatar/animations/touch_point_open_left.fbx new file mode 100644 index 0000000000..cbab6cd55d Binary files /dev/null and b/interface/resources/avatar/animations/touch_point_open_left.fbx differ diff --git a/interface/resources/avatar/animations/touch_point_open_right.fbx b/interface/resources/avatar/animations/touch_point_open_right.fbx new file mode 100644 index 0000000000..b54abe2b2e Binary files /dev/null and b/interface/resources/avatar/animations/touch_point_open_right.fbx differ diff --git a/interface/resources/avatar/avatar-animation.json b/interface/resources/avatar/avatar-animation.json index 834a3fc277..ddcb7ff20a 100644 --- a/interface/resources/avatar/avatar-animation.json +++ b/interface/resources/avatar/avatar-animation.json @@ -128,7 +128,17 @@ "id": "rightHandGrasp", "interpTarget": 3, "interpDuration": 3, - "transitions": [] + "transitions": [ + { "var": "isRightIndexPoint", "state": "rightIndexPoint" } + ] + }, + { + "id": "rightIndexPoint", + "interpTarget": 15, + "interpDuration": 3, + "transitions": [ + { "var": "isRightHandGrasp", "state": "rightHandGrasp" } + ] } ] }, @@ -166,6 +176,40 @@ "children": [] } ] + }, + { + "id": "rightIndexPoint", + "type": "blendLinear", + "data": { + "alpha": 0.0, + "alphaVar": "rightHandGraspAlpha" + }, + "children": [ + { + "id": "rightIndexPointOpen", + "type": "clip", + "data": { + "url": "animations/touch_point_open_right.fbx", + "startFrame": 15.0, + "endFrame": 15.0, + "timeScale": 1.0, + "loopFlag": true + }, + "children": [] + }, + { + "id": "rightIndexPointClosed", + "type": "clip", + "data": { + "url": "animations/touch_point_closed_right.fbx", + "startFrame": 15.0, + "endFrame": 15.0, + "timeScale": 1.0, + "loopFlag": true + }, + "children": [] + } + ] } ] }, @@ -175,7 +219,7 @@ "data": { "alpha": 0.0, "boneSet": "leftHand", - "alphaVar" : "leftHandOverlayAlpha" + "alphaVar": "leftHandOverlayAlpha" }, "children": [ { @@ -188,7 +232,17 @@ "id": "leftHandGrasp", "interpTarget": 3, "interpDuration": 3, - "transitions": [] + "transitions": [ + { "var": "isLeftIndexPoint", "state": "leftIndexPoint" } + ] + }, + { + "id": "leftIndexPoint", + "interpTarget": 15, + "interpDuration": 3, + "transitions": [ + { "var": "isLeftHandGrasp", "state": "leftHandGrasp" } + ] } ] }, @@ -226,6 +280,40 @@ "children": [] } ] + }, + { + "id": "leftIndexPoint", + "type": "blendLinear", + "data": { + "alpha": 0.0, + "alphaVar": "leftHandGraspAlpha" + }, + "children": [ + { + "id": "leftIndexPointOpen", + "type": "clip", + "data": { + "url": "animations/touch_point_open_left.fbx", + "startFrame": 15.0, + "endFrame": 15.0, + "timeScale": 1.0, + "loopFlag": true + }, + "children": [] + }, + { + "id": "leftIndexPointClosed", + "type": "clip", + "data": { + "url": "animations/touch_point_closed_left.fbx", + "startFrame": 15.0, + "endFrame": 15.0, + "timeScale": 1.0, + "loopFlag": true + }, + "children": [] + } + ] } ] }, diff --git a/scripts/system/controllers/squeezeHands.js b/scripts/system/controllers/squeezeHands.js index 3f1d21b46c..622dc9894b 100644 --- a/scripts/system/controllers/squeezeHands.js +++ b/scripts/system/controllers/squeezeHands.js @@ -28,8 +28,6 @@ var animStateHandlerID; var isPointingIndex = false; var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index"; -var indexfingerJointNames = ["LeftHandIndex1", "LeftHandIndex2", "LeftHandIndex3", "RightHandIndex1", "RightHandIndex2", "RightHandIndex3"]; - function clamp(val, min, max) { return Math.min(Math.max(val, min), max); } @@ -46,17 +44,28 @@ function init() { Script.update.connect(update); animStateHandlerID = MyAvatar.addAnimationStateHandler( animStateHandler, - ["leftHandOverlayAlpha", "rightHandOverlayAlpha", "leftHandGraspAlpha", "rightHandGraspAlpha"] + [ + "leftHandOverlayAlpha", "leftHandGraspAlpha", + "rightHandOverlayAlpha", "rightHandGraspAlpha", + "isLeftHandGrasp", "isLeftIndexPoint", + "isRightHandGrasp", "isRightIndexPoint" + ] ); Messages.subscribe(HIFI_POINT_INDEX_MESSAGE_CHANNEL); Messages.messageReceived.connect(handleMessages); } function animStateHandler(props) { - return { leftHandOverlayAlpha: leftHandOverlayAlpha, - leftHandGraspAlpha: lastLeftTrigger, - rightHandOverlayAlpha: rightHandOverlayAlpha, - rightHandGraspAlpha: lastRightTrigger }; + return { + leftHandOverlayAlpha: leftHandOverlayAlpha, + leftHandGraspAlpha: lastLeftTrigger, + rightHandOverlayAlpha: rightHandOverlayAlpha, + rightHandGraspAlpha: lastRightTrigger, + isLeftHandGrasp: !isPointingIndex, + isLeftIndexPoint: isPointingIndex, + isRightHandGrasp: !isPointingIndex, + isRightIndexPoint: isPointingIndex + }; } function update(dt) { @@ -83,14 +92,6 @@ function update(dt) { } else { rightHandOverlayAlpha = clamp(rightHandOverlayAlpha - OVERLAY_RAMP_RATE * dt, 0, 1); } - - // Point index finger. - if (isPointingIndex) { - var zeroRotation = { x: 0, y: 0, z: 0, w: 1 }; - for (var i = 0; i < indexfingerJointNames.length; i++) { - MyAvatar.setJointRotation(indexfingerJointNames[i], zeroRotation); - } - } } function handleMessages(channel, message, sender) { @@ -99,12 +100,6 @@ function handleMessages(channel, message, sender) { if (data.pointIndex !== undefined) { print("pointIndex: " + data.pointIndex); isPointingIndex = data.pointIndex; - - if (!isPointingIndex) { - for (var i = 0; i < indexfingerJointNames.length; i++) { - MyAvatar.clearJointData(indexfingerJointNames[i]); - } - } } } }