mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 04:18:12 +02:00
Point index fingers and raise thumbs if not touching controls
This commit is contained in:
parent
a205d2a00c
commit
0cc499b08b
10 changed files with 211 additions and 12 deletions
Binary file not shown.
Binary file not shown.
BIN
interface/resources/avatar/animations/touch_thumb_open_left.fbx
Normal file
BIN
interface/resources/avatar/animations/touch_thumb_open_left.fbx
Normal file
Binary file not shown.
BIN
interface/resources/avatar/animations/touch_thumb_open_right.fbx
Normal file
BIN
interface/resources/avatar/animations/touch_thumb_open_right.fbx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -129,7 +129,9 @@
|
||||||
"interpTarget": 3,
|
"interpTarget": 3,
|
||||||
"interpDuration": 3,
|
"interpDuration": 3,
|
||||||
"transitions": [
|
"transitions": [
|
||||||
{ "var": "isRightIndexPoint", "state": "rightIndexPoint" }
|
{ "var": "isRightIndexPoint", "state": "rightIndexPoint" },
|
||||||
|
{ "var": "isRightThumbRaise", "state": "rightThumbRaise" },
|
||||||
|
{ "var": "isRightIndexPointAndThumbRaise", "state": "rightIndexPointAndThumbRaise" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -137,7 +139,29 @@
|
||||||
"interpTarget": 15,
|
"interpTarget": 15,
|
||||||
"interpDuration": 3,
|
"interpDuration": 3,
|
||||||
"transitions": [
|
"transitions": [
|
||||||
{ "var": "isRightHandGrasp", "state": "rightHandGrasp" }
|
{ "var": "isRightHandGrasp", "state": "rightHandGrasp" },
|
||||||
|
{ "var": "isRightThumbRaise", "state": "rightThumbRaise" },
|
||||||
|
{ "var": "isRightIndexPointAndThumbRaise", "state": "rightIndexPointAndThumbRaise" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rightThumbRaise",
|
||||||
|
"interpTarget": 15,
|
||||||
|
"interpDuration": 3,
|
||||||
|
"transitions": [
|
||||||
|
{ "var": "isRightHandGrasp", "state": "rightHandGrasp" },
|
||||||
|
{ "var": "isRightIndexPoint", "state": "rightIndexPoint" },
|
||||||
|
{ "var": "isRightIndexPointAndThumbRaise", "state": "rightIndexPointAndThumbRaise" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rightIndexPointAndThumbRaise",
|
||||||
|
"interpTarget": 15,
|
||||||
|
"interpDuration": 3,
|
||||||
|
"transitions": [
|
||||||
|
{ "var": "isRightHandGrasp", "state": "rightHandGrasp" },
|
||||||
|
{ "var": "isRightIndexPoint", "state": "rightIndexPoint" },
|
||||||
|
{ "var": "isRightThumbRaise", "state": "rightThumbRaise" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -210,6 +234,74 @@
|
||||||
"children": []
|
"children": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rightThumbRaise",
|
||||||
|
"type": "blendLinear",
|
||||||
|
"data": {
|
||||||
|
"alpha": 0.0,
|
||||||
|
"alphaVar": "rightHandGraspAlpha"
|
||||||
|
},
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "rightThumbRaiseOpen",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_open_right.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rightThumbRaiseClosed",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_closed_right.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rightIndexPointAndThumbRaise",
|
||||||
|
"type": "blendLinear",
|
||||||
|
"data": {
|
||||||
|
"alpha": 0.0,
|
||||||
|
"alphaVar": "rightHandGraspAlpha"
|
||||||
|
},
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "rightIndexPointAndThumbRaiseOpen",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_point_open_right.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rightIndexPointAndThumbRaiseClosed",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_point_closed_right.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -233,7 +325,9 @@
|
||||||
"interpTarget": 3,
|
"interpTarget": 3,
|
||||||
"interpDuration": 3,
|
"interpDuration": 3,
|
||||||
"transitions": [
|
"transitions": [
|
||||||
{ "var": "isLeftIndexPoint", "state": "leftIndexPoint" }
|
{ "var": "isLeftIndexPoint", "state": "leftIndexPoint" },
|
||||||
|
{ "var": "isLeftThumbRaise", "state": "leftThumbRaise" },
|
||||||
|
{ "var": "isLeftIndexPointAndThumbRaise", "state": "leftIndexPointAndThumbRaise" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -241,7 +335,29 @@
|
||||||
"interpTarget": 15,
|
"interpTarget": 15,
|
||||||
"interpDuration": 3,
|
"interpDuration": 3,
|
||||||
"transitions": [
|
"transitions": [
|
||||||
{ "var": "isLeftHandGrasp", "state": "leftHandGrasp" }
|
{ "var": "isLeftHandGrasp", "state": "leftHandGrasp" },
|
||||||
|
{ "var": "isLeftThumbRaise", "state": "leftThumbRaise" },
|
||||||
|
{ "var": "isLeftIndexPointAndThumbRaise", "state": "leftIndexPointAndThumbRaise" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leftThumbRaise",
|
||||||
|
"interpTarget": 15,
|
||||||
|
"interpDuration": 3,
|
||||||
|
"transitions": [
|
||||||
|
{ "var": "isLeftHandGrasp", "state": "leftHandGrasp" },
|
||||||
|
{ "var": "isLeftIndexPoint", "state": "leftIndexPoint" },
|
||||||
|
{ "var": "isLeftIndexPointAndThumbRaise", "state": "leftIndexPointAndThumbRaise" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leftIndexPointAndThumbRaise",
|
||||||
|
"interpTarget": 15,
|
||||||
|
"interpDuration": 3,
|
||||||
|
"transitions": [
|
||||||
|
{ "var": "isLeftHandGrasp", "state": "leftHandGrasp" },
|
||||||
|
{ "var": "isLeftIndexPoint", "state": "leftIndexPoint" },
|
||||||
|
{ "var": "isLeftThumbRaise", "state": "leftThumbRaise" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -314,6 +430,74 @@
|
||||||
"children": []
|
"children": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leftThumbRaise",
|
||||||
|
"type": "blendLinear",
|
||||||
|
"data": {
|
||||||
|
"alpha": 0.0,
|
||||||
|
"alphaVar": "leftHandGraspAlpha"
|
||||||
|
},
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "leftThumbRaiseOpen",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_open_left.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leftThumbRaiseClosed",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_closed_left.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leftIndexPointAndThumbRaise",
|
||||||
|
"type": "blendLinear",
|
||||||
|
"data": {
|
||||||
|
"alpha": 0.0,
|
||||||
|
"alphaVar": "leftHandGraspAlpha"
|
||||||
|
},
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "leftIndexPointAndThumbRaiseOpen",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_point_open_left.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leftIndexPointAndThumbRaiseClosed",
|
||||||
|
"type": "clip",
|
||||||
|
"data": {
|
||||||
|
"url": "animations/touch_thumb_point_closed_left.fbx",
|
||||||
|
"startFrame": 15.0,
|
||||||
|
"endFrame": 15.0,
|
||||||
|
"timeScale": 1.0,
|
||||||
|
"loopFlag": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -25,9 +25,14 @@ var OVERLAY_RAMP_RATE = 8.0;
|
||||||
|
|
||||||
var animStateHandlerID;
|
var animStateHandlerID;
|
||||||
|
|
||||||
var isPointingIndex = false;
|
var isBothIndexesPointing = false;
|
||||||
var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index";
|
var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index";
|
||||||
|
|
||||||
|
var isLeftIndexPointing = false;
|
||||||
|
var isRightIndexPointing = false;
|
||||||
|
var isLeftThumbRaised = false;
|
||||||
|
var isRightThumbRaised = false;
|
||||||
|
|
||||||
function clamp(val, min, max) {
|
function clamp(val, min, max) {
|
||||||
return Math.min(Math.max(val, min), max);
|
return Math.min(Math.max(val, min), max);
|
||||||
}
|
}
|
||||||
|
@ -47,8 +52,8 @@ function init() {
|
||||||
[
|
[
|
||||||
"leftHandOverlayAlpha", "leftHandGraspAlpha",
|
"leftHandOverlayAlpha", "leftHandGraspAlpha",
|
||||||
"rightHandOverlayAlpha", "rightHandGraspAlpha",
|
"rightHandOverlayAlpha", "rightHandGraspAlpha",
|
||||||
"isLeftHandGrasp", "isLeftIndexPoint",
|
"isLeftHandGrasp", "isLeftIndexPoint", "isLeftThumbRaise", "isLeftIndexPointAndThumbRaise",
|
||||||
"isRightHandGrasp", "isRightIndexPoint"
|
"isRightHandGrasp", "isRightIndexPoint", "isRightThumbRaise", "isRightIndexPointAndThumbRaise",
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
Messages.subscribe(HIFI_POINT_INDEX_MESSAGE_CHANNEL);
|
Messages.subscribe(HIFI_POINT_INDEX_MESSAGE_CHANNEL);
|
||||||
|
@ -61,10 +66,14 @@ function animStateHandler(props) {
|
||||||
leftHandGraspAlpha: lastLeftTrigger,
|
leftHandGraspAlpha: lastLeftTrigger,
|
||||||
rightHandOverlayAlpha: rightHandOverlayAlpha,
|
rightHandOverlayAlpha: rightHandOverlayAlpha,
|
||||||
rightHandGraspAlpha: lastRightTrigger,
|
rightHandGraspAlpha: lastRightTrigger,
|
||||||
isLeftHandGrasp: !isPointingIndex,
|
isLeftHandGrasp: !isBothIndexesPointing && !isLeftIndexPointing && !isLeftThumbRaised,
|
||||||
isLeftIndexPoint: isPointingIndex,
|
isLeftIndexPoint: (isBothIndexesPointing || isLeftIndexPointing) && !isLeftThumbRaised,
|
||||||
isRightHandGrasp: !isPointingIndex,
|
isLeftThumbRaise: !isBothIndexesPointing && !isLeftIndexPointing && isLeftThumbRaised,
|
||||||
isRightIndexPoint: isPointingIndex
|
isLeftIndexPointAndThumbRaise: (isBothIndexesPointing || isLeftIndexPointing) && isLeftThumbRaised,
|
||||||
|
isRightHandGrasp: !isBothIndexesPointing && !isRightIndexPointing && !isRightThumbRaised,
|
||||||
|
isRightIndexPoint: (isBothIndexesPointing || isRightIndexPointing) && !isRightThumbRaised,
|
||||||
|
isRightThumbRaise: !isBothIndexesPointing && !isRightIndexPointing && isRightThumbRaised,
|
||||||
|
isRightIndexPointAndThumbRaise: (isBothIndexesPointing || isRightIndexPointing) && isRightThumbRaised
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +101,12 @@ function update(dt) {
|
||||||
} else {
|
} else {
|
||||||
rightHandOverlayAlpha = clamp(rightHandOverlayAlpha - OVERLAY_RAMP_RATE * dt, 0, 1);
|
rightHandOverlayAlpha = clamp(rightHandOverlayAlpha - OVERLAY_RAMP_RATE * dt, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pointing index fingers and raising thumbs
|
||||||
|
isLeftIndexPointing = leftHandPose.valid && Controller.getValue(Controller.Standard.LeftIndexPoint) === 1;
|
||||||
|
isRightIndexPointing = rightHandPose.valid && Controller.getValue(Controller.Standard.RightIndexPoint) === 1;
|
||||||
|
isLeftThumbRaised = leftHandPose.valid && Controller.getValue(Controller.Standard.LeftThumbUp) === 1;
|
||||||
|
isRightThumbRaised = rightHandPose.valid && Controller.getValue(Controller.Standard.RightThumbUp) === 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleMessages(channel, message, sender) {
|
function handleMessages(channel, message, sender) {
|
||||||
|
@ -99,7 +114,7 @@ function handleMessages(channel, message, sender) {
|
||||||
var data = JSON.parse(message);
|
var data = JSON.parse(message);
|
||||||
if (data.pointIndex !== undefined) {
|
if (data.pointIndex !== undefined) {
|
||||||
print("pointIndex: " + data.pointIndex);
|
print("pointIndex: " + data.pointIndex);
|
||||||
isPointingIndex = data.pointIndex;
|
isBothIndexesPointing = data.pointIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue