mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 03:19:24 +02:00
don't cache value of getControllerJointIndex at startup, because the script may run before the data is available. Instead, refresh the data every few seconds
This commit is contained in:
parent
ea26512793
commit
898dec29cb
7 changed files with 44 additions and 41 deletions
|
@ -6,11 +6,11 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
|
||||||
|
|
||||||
/* global Script, Entities, MyAvatar, Controller, RIGHT_HAND, LEFT_HAND,
|
/* global Script, Entities, MyAvatar, Controller, RIGHT_HAND, LEFT_HAND, Camera,
|
||||||
getControllerJointIndex, enableDispatcherModule, disableDispatcherModule,
|
getControllerJointIndex, enableDispatcherModule, disableDispatcherModule, entityIsFarGrabbedByOther,
|
||||||
Messages, makeDispatcherModuleParameters, makeRunningValues, Settings, entityHasActions,
|
Messages, makeDispatcherModuleParameters, makeRunningValues, Settings, entityHasActions,
|
||||||
Vec3, Overlays, flatten, Xform, getControllerWorldLocation, ensureDynamic, entityIsCloneable,
|
Vec3, Overlays, flatten, Xform, getControllerWorldLocation, ensureDynamic, entityIsCloneable,
|
||||||
cloneEntity, DISPATCHER_PROPERTIES, TEAR_AWAY_DISTANCE, Uuid, unhighlightTargetEntity
|
cloneEntity, DISPATCHER_PROPERTIES, Uuid, unhighlightTargetEntity, isInEditMode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Script.include("/~/system/libraries/Xform.js");
|
Script.include("/~/system/libraries/Xform.js");
|
||||||
|
@ -781,7 +781,7 @@ EquipHotspotBuddy.prototype.update = function(deltaTime, timestamp, controllerDa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var clearGrabActions = function(entityID) {
|
var clearGrabActions = function(entityID) {
|
||||||
var actionIDs = Entities.getActionIDs(entityID);
|
var actionIDs = Entities.getActionIDs(entityID);
|
||||||
var myGrabTag = "grab-" + MyAvatar.sessionUUID;
|
var myGrabTag = "grab-" + MyAvatar.sessionUUID;
|
||||||
|
@ -794,7 +794,7 @@ EquipHotspotBuddy.prototype.update = function(deltaTime, timestamp, controllerDa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var onMousePress = function(event) {
|
var onMousePress = function(event) {
|
||||||
if (isInEditMode() || !event.isLeftButton) { // don't consider any left clicks on the entity while in edit
|
if (isInEditMode() || !event.isLeftButton) { // don't consider any left clicks on the entity while in edit
|
||||||
return;
|
return;
|
||||||
|
@ -808,7 +808,7 @@ EquipHotspotBuddy.prototype.update = function(deltaTime, timestamp, controllerDa
|
||||||
if (hasEquipData && entityProperties.parentID === EMPTY_PARENT_ID && !entityIsFarGrabbedByOther(entityID)) {
|
if (hasEquipData && entityProperties.parentID === EMPTY_PARENT_ID && !entityIsFarGrabbedByOther(entityID)) {
|
||||||
entityProperties.id = entityID;
|
entityProperties.id = entityID;
|
||||||
var rightHandPosition = MyAvatar.getJointPosition("RightHand");
|
var rightHandPosition = MyAvatar.getJointPosition("RightHand");
|
||||||
var leftHandPosition = MyAvatar.getJointPosition("LeftHand");
|
var leftHandPosition = MyAvatar.getJointPosition("LeftHand");
|
||||||
var distanceToRightHand = Vec3.distance(entityProperties.position, rightHandPosition);
|
var distanceToRightHand = Vec3.distance(entityProperties.position, rightHandPosition);
|
||||||
var distanceToLeftHand = Vec3.distance(entityProperties.position, leftHandPosition);
|
var distanceToLeftHand = Vec3.distance(entityProperties.position, leftHandPosition);
|
||||||
var leftHandAvailable = leftEquipEntity.targetEntityID === null;
|
var leftHandAvailable = leftEquipEntity.targetEntityID === null;
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
propsArePhysical, Messages, HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION, entityIsGrabbable,
|
propsArePhysical, Messages, HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION, entityIsGrabbable,
|
||||||
Quat, Vec3, MSECS_PER_SEC, getControllerWorldLocation, makeDispatcherModuleParameters, makeRunningValues,
|
Quat, Vec3, MSECS_PER_SEC, getControllerWorldLocation, makeDispatcherModuleParameters, makeRunningValues,
|
||||||
TRIGGER_OFF_VALUE, NEAR_GRAB_RADIUS, findGroupParent, entityIsCloneable, propsAreCloneDynamic, cloneEntity,
|
TRIGGER_OFF_VALUE, NEAR_GRAB_RADIUS, findGroupParent, entityIsCloneable, propsAreCloneDynamic, cloneEntity,
|
||||||
HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION, BUMPER_ON_VALUE, unhighlightTargetEntity
|
HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION, BUMPER_ON_VALUE, unhighlightTargetEntity, Uuid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
||||||
|
|
|
@ -7,12 +7,8 @@
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
|
||||||
/* global Script, Entities, MyAvatar, Controller, RIGHT_HAND, LEFT_HAND,
|
/* global Script, MyAvatar, RIGHT_HAND, LEFT_HAND, enableDispatcherModule, disableDispatcherModule,
|
||||||
getControllerJointIndex, getGrabbableData, enableDispatcherModule, disableDispatcherModule,
|
makeDispatcherModuleParameters, makeRunningValues, TRIGGER_OFF_VALUE, NEAR_GRAB_RADIUS, BUMPER_ON_VALUE, AddressManager
|
||||||
propsArePhysical, Messages, HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION, entityIsGrabbable,
|
|
||||||
Quat, Vec3, MSECS_PER_SEC, getControllerWorldLocation, makeDispatcherModuleParameters, makeRunningValues,
|
|
||||||
TRIGGER_OFF_VALUE, NEAR_GRAB_RADIUS, findGroupParent, entityIsCloneable, propsAreCloneDynamic, cloneEntity,
|
|
||||||
HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION, BUMPER_ON_VALUE, AddressManager
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
|
@ -11,8 +11,7 @@
|
||||||
TRIGGER_OFF_VALUE, makeDispatcherModuleParameters, entityIsGrabbable, makeRunningValues, NEAR_GRAB_RADIUS,
|
TRIGGER_OFF_VALUE, makeDispatcherModuleParameters, entityIsGrabbable, makeRunningValues, NEAR_GRAB_RADIUS,
|
||||||
findGroupParent, Vec3, cloneEntity, entityIsCloneable, propsAreCloneDynamic, HAPTIC_PULSE_STRENGTH,
|
findGroupParent, Vec3, cloneEntity, entityIsCloneable, propsAreCloneDynamic, HAPTIC_PULSE_STRENGTH,
|
||||||
HAPTIC_PULSE_DURATION, BUMPER_ON_VALUE, findHandChildEntities, TEAR_AWAY_DISTANCE, MSECS_PER_SEC, TEAR_AWAY_CHECK_TIME,
|
HAPTIC_PULSE_DURATION, BUMPER_ON_VALUE, findHandChildEntities, TEAR_AWAY_DISTANCE, MSECS_PER_SEC, TEAR_AWAY_CHECK_TIME,
|
||||||
TEAR_AWAY_COUNT, distanceBetweenPointAndEntityBoundingBox, print, Selection, DISPATCHER_HOVERING_LIST, Uuid,
|
TEAR_AWAY_COUNT, distanceBetweenPointAndEntityBoundingBox, print, Uuid, highlightTargetEntity, unhighlightTargetEntity
|
||||||
highlightTargetEntity, unhighlightTargetEntity
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
||||||
|
@ -43,11 +42,6 @@ Script.include("/~/system/libraries/cloneEntityUtils.js");
|
||||||
[],
|
[],
|
||||||
100);
|
100);
|
||||||
|
|
||||||
|
|
||||||
// XXX does handJointIndex change if the avatar changes?
|
|
||||||
this.handJointIndex = MyAvatar.getJointIndex(this.hand === RIGHT_HAND ? "RightHand" : "LeftHand");
|
|
||||||
this.controllerJointIndex = getControllerJointIndex(this.hand);
|
|
||||||
|
|
||||||
this.thisHandIsParent = function(props) {
|
this.thisHandIsParent = function(props) {
|
||||||
if (!props) {
|
if (!props) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -62,8 +56,7 @@ Script.include("/~/system/libraries/cloneEntityUtils.js");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var controllerJointIndex = this.controllerJointIndex;
|
if (props.parentJointIndex === getControllerJointIndex(this.hand)) {
|
||||||
if (props.parentJointIndex === controllerJointIndex) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +95,7 @@ Script.include("/~/system/libraries/cloneEntityUtils.js");
|
||||||
// } else {
|
// } else {
|
||||||
// handJointIndex = MyAvatar.getJointIndex(this.hand === RIGHT_HAND ? "RightHand" : "LeftHand");
|
// handJointIndex = MyAvatar.getJointIndex(this.hand === RIGHT_HAND ? "RightHand" : "LeftHand");
|
||||||
// }
|
// }
|
||||||
handJointIndex = this.controllerJointIndex;
|
handJointIndex = getControllerJointIndex(this.hand);
|
||||||
|
|
||||||
var args = [this.hand === RIGHT_HAND ? "right" : "left", MyAvatar.sessionUUID];
|
var args = [this.hand === RIGHT_HAND ? "right" : "left", MyAvatar.sessionUUID];
|
||||||
Entities.callEntityMethod(targetProps.id, "startNearGrab", args);
|
Entities.callEntityMethod(targetProps.id, "startNearGrab", args);
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
/* global Script, MyAvatar, Controller, RIGHT_HAND, LEFT_HAND, getControllerJointIndex,
|
/* global Script, MyAvatar, Controller, RIGHT_HAND, LEFT_HAND, getControllerJointIndex,
|
||||||
enableDispatcherModule, disableDispatcherModule, Messages, HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION,
|
enableDispatcherModule, disableDispatcherModule, Messages, HAPTIC_PULSE_STRENGTH, HAPTIC_PULSE_DURATION,
|
||||||
makeDispatcherModuleParameters, Overlays, makeRunningValues, Vec3, resizeTablet, getTabletWidthFromSettings,
|
makeDispatcherModuleParameters, Overlays, makeRunningValues, Vec3, resizeTablet, getTabletWidthFromSettings,
|
||||||
NEAR_GRAB_RADIUS
|
NEAR_GRAB_RADIUS, HMD, Uuid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
||||||
|
@ -37,7 +37,6 @@ Script.include("/~/system/libraries/utils.js");
|
||||||
|
|
||||||
// XXX does handJointIndex change if the avatar changes?
|
// XXX does handJointIndex change if the avatar changes?
|
||||||
this.handJointIndex = MyAvatar.getJointIndex(this.hand === RIGHT_HAND ? "RightHand" : "LeftHand");
|
this.handJointIndex = MyAvatar.getJointIndex(this.hand === RIGHT_HAND ? "RightHand" : "LeftHand");
|
||||||
this.controllerJointIndex = getControllerJointIndex(this.hand);
|
|
||||||
|
|
||||||
this.getOtherModule = function() {
|
this.getOtherModule = function() {
|
||||||
return (this.hand === RIGHT_HAND) ? leftNearParentingGrabOverlay : rightNearParentingGrabOverlay;
|
return (this.hand === RIGHT_HAND) ? leftNearParentingGrabOverlay : rightNearParentingGrabOverlay;
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
/* jslint bitwise: true */
|
/* jslint bitwise: true */
|
||||||
|
|
||||||
/* global Script, Entities, MyAvatar, Controller, RIGHT_HAND, LEFT_HAND, getControllerJointIndex,
|
/* global Script, Entities, MyAvatar, Controller, RIGHT_HAND, LEFT_HAND,
|
||||||
enableDispatcherModule, disableDispatcherModule, Messages, makeDispatcherModuleParameters, makeRunningValues, Vec3,
|
enableDispatcherModule, disableDispatcherModule, Messages, makeDispatcherModuleParameters, makeRunningValues, Vec3,
|
||||||
HMD, Uuid, AvatarList, Picks, Pointers, PickType
|
HMD, Uuid, AvatarList, Picks, Pointers, PickType
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
|
|
||||||
/* global module, Camera, HMD, MyAvatar, controllerDispatcherPlugins:true, Quat, Vec3, Overlays, Xform,
|
/* global module, Camera, HMD, MyAvatar, controllerDispatcherPlugins:true, Quat, Vec3, Overlays, Xform,
|
||||||
Selection,
|
Selection, Uuid,
|
||||||
MSECS_PER_SEC:true , LEFT_HAND:true, RIGHT_HAND:true, FORBIDDEN_GRAB_TYPES:true,
|
MSECS_PER_SEC:true , LEFT_HAND:true, RIGHT_HAND:true, FORBIDDEN_GRAB_TYPES:true,
|
||||||
HAPTIC_PULSE_STRENGTH:true, HAPTIC_PULSE_DURATION:true, ZERO_VEC:true, ONE_VEC:true,
|
HAPTIC_PULSE_STRENGTH:true, HAPTIC_PULSE_DURATION:true, ZERO_VEC:true, ONE_VEC:true,
|
||||||
DEFAULT_REGISTRATION_POINT:true, INCHES_TO_METERS:true,
|
DEFAULT_REGISTRATION_POINT:true, INCHES_TO_METERS:true,
|
||||||
|
@ -34,11 +34,12 @@
|
||||||
getGrabbableData:true,
|
getGrabbableData:true,
|
||||||
entityIsGrabbable:true,
|
entityIsGrabbable:true,
|
||||||
entityIsDistanceGrabbable:true,
|
entityIsDistanceGrabbable:true,
|
||||||
|
getControllerJointIndexCacheTime:true,
|
||||||
|
getControllerJointIndexCache:true,
|
||||||
getControllerJointIndex:true,
|
getControllerJointIndex:true,
|
||||||
propsArePhysical:true,
|
propsArePhysical:true,
|
||||||
controllerDispatcherPluginsNeedSort:true,
|
controllerDispatcherPluginsNeedSort:true,
|
||||||
projectOntoXYPlane:true,
|
projectOntoXYPlane:true,
|
||||||
getChildrenProps:true,
|
|
||||||
projectOntoEntityXYPlane:true,
|
projectOntoEntityXYPlane:true,
|
||||||
projectOntoOverlayXYPlane:true,
|
projectOntoOverlayXYPlane:true,
|
||||||
makeLaserLockInfo:true,
|
makeLaserLockInfo:true,
|
||||||
|
@ -53,6 +54,8 @@
|
||||||
TEAR_AWAY_COUNT:true,
|
TEAR_AWAY_COUNT:true,
|
||||||
TEAR_AWAY_CHECK_TIME:true,
|
TEAR_AWAY_CHECK_TIME:true,
|
||||||
distanceBetweenPointAndEntityBoundingBox:true,
|
distanceBetweenPointAndEntityBoundingBox:true,
|
||||||
|
entityIsEquipped:true,
|
||||||
|
entityIsFarGrabbedByOther:true,
|
||||||
highlightTargetEntity:true,
|
highlightTargetEntity:true,
|
||||||
clearHighlightedEntities:true,
|
clearHighlightedEntities:true,
|
||||||
unhighlightTargetEntity:true
|
unhighlightTargetEntity:true
|
||||||
|
@ -265,20 +268,32 @@ entityIsDistanceGrabbable = function(props) {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
getControllerJointIndex = function (hand) {
|
getControllerJointIndexCacheTime = [0, 0];
|
||||||
if (HMD.isHandControllerAvailable()) {
|
getControllerJointIndexCache = [-1, -1];
|
||||||
var controllerJointIndex = -1;
|
|
||||||
if (Camera.mode === "first person") {
|
|
||||||
controllerJointIndex = MyAvatar.getJointIndex(hand === RIGHT_HAND ?
|
|
||||||
"_CONTROLLER_RIGHTHAND" :
|
|
||||||
"_CONTROLLER_LEFTHAND");
|
|
||||||
} else if (Camera.mode === "third person") {
|
|
||||||
controllerJointIndex = MyAvatar.getJointIndex(hand === RIGHT_HAND ?
|
|
||||||
"_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND" :
|
|
||||||
"_CAMERA_RELATIVE_CONTROLLER_LEFTHAND");
|
|
||||||
}
|
|
||||||
|
|
||||||
return controllerJointIndex;
|
getControllerJointIndex = function (hand) {
|
||||||
|
var GET_CONTROLLERJOINTINDEX_CACHE_REFRESH_TIME = 3000; // msecs
|
||||||
|
|
||||||
|
var now = Date.now();
|
||||||
|
if (now - getControllerJointIndexCacheTime[hand] > GET_CONTROLLERJOINTINDEX_CACHE_REFRESH_TIME) {
|
||||||
|
if (HMD.isHandControllerAvailable()) {
|
||||||
|
var controllerJointIndex = -1;
|
||||||
|
if (Camera.mode === "first person") {
|
||||||
|
controllerJointIndex = MyAvatar.getJointIndex(hand === RIGHT_HAND ?
|
||||||
|
"_CONTROLLER_RIGHTHAND" :
|
||||||
|
"_CONTROLLER_LEFTHAND");
|
||||||
|
} else if (Camera.mode === "third person") {
|
||||||
|
controllerJointIndex = MyAvatar.getJointIndex(hand === RIGHT_HAND ?
|
||||||
|
"_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND" :
|
||||||
|
"_CAMERA_RELATIVE_CONTROLLER_LEFTHAND");
|
||||||
|
}
|
||||||
|
|
||||||
|
getControllerJointIndexCacheTime[hand] = now;
|
||||||
|
getControllerJointIndexCache[hand] = controllerJointIndex;
|
||||||
|
return controllerJointIndex;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return getControllerJointIndexCache[hand];
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in a new issue