1 |
- {"ast":null,"code":"import { WebXRFeatureName } from \"../../XR/webXRFeaturesManager.js\";\nimport { Quaternion, TmpVectors, Vector3 } from \"../../Maths/math.vector.js\";\nimport { Tools } from \"../../Misc/tools.js\";\n/**\n * Zones around the hand\n */\nexport var HandConstraintZone;\n(function (HandConstraintZone) {\n /**\n * Above finger tips\n */\n HandConstraintZone[HandConstraintZone[\"ABOVE_FINGER_TIPS\"] = 0] = \"ABOVE_FINGER_TIPS\";\n /**\n * Next to the thumb\n */\n HandConstraintZone[HandConstraintZone[\"RADIAL_SIDE\"] = 1] = \"RADIAL_SIDE\";\n /**\n * Next to the pinky finger\n */\n HandConstraintZone[HandConstraintZone[\"ULNAR_SIDE\"] = 2] = \"ULNAR_SIDE\";\n /**\n * Below the wrist\n */\n HandConstraintZone[HandConstraintZone[\"BELOW_WRIST\"] = 3] = \"BELOW_WRIST\";\n})(HandConstraintZone || (HandConstraintZone = {}));\n/**\n * Orientations for the hand zones and for the attached node\n */\nexport var HandConstraintOrientation;\n(function (HandConstraintOrientation) {\n /**\n * Orientation is towards the camera\n */\n HandConstraintOrientation[HandConstraintOrientation[\"LOOK_AT_CAMERA\"] = 0] = \"LOOK_AT_CAMERA\";\n /**\n * Orientation is determined by the rotation of the palm\n */\n HandConstraintOrientation[HandConstraintOrientation[\"HAND_ROTATION\"] = 1] = \"HAND_ROTATION\";\n})(HandConstraintOrientation || (HandConstraintOrientation = {}));\n/**\n * Orientations for the hand zones and for the attached node\n */\nexport var HandConstraintVisibility;\n(function (HandConstraintVisibility) {\n /**\n * Constraint is always visible\n */\n HandConstraintVisibility[HandConstraintVisibility[\"ALWAYS_VISIBLE\"] = 0] = \"ALWAYS_VISIBLE\";\n /**\n * Constraint is only visible when the palm is up\n */\n HandConstraintVisibility[HandConstraintVisibility[\"PALM_UP\"] = 1] = \"PALM_UP\";\n /**\n * Constraint is only visible when the user is looking at the constraint.\n * Uses XR Eye Tracking if enabled/available, otherwise uses camera direction\n */\n HandConstraintVisibility[HandConstraintVisibility[\"GAZE_FOCUS\"] = 2] = \"GAZE_FOCUS\";\n /**\n * Constraint is only visible when the palm is up and the user is looking at it\n */\n HandConstraintVisibility[HandConstraintVisibility[\"PALM_AND_GAZE\"] = 3] = \"PALM_AND_GAZE\";\n})(HandConstraintVisibility || (HandConstraintVisibility = {}));\n/**\n * Hand constraint behavior that makes the attached `TransformNode` follow hands in XR experiences.\n * @since 5.0.0\n */\nexport class HandConstraintBehavior {\n /**\n * Builds a hand constraint behavior\n */\n constructor() {\n this._sceneRenderObserver = null;\n this._zoneAxis = {};\n /**\n * Sets the HandConstraintVisibility level for the hand constraint\n */\n this.handConstraintVisibility = 3 /* HandConstraintVisibility.PALM_AND_GAZE */;\n /**\n * A number from 0.0 to 1.0, marking how restricted the direction the palm faces is for the attached node to be enabled.\n * A 1 means the palm must be directly facing the user before the node is enabled, a 0 means it is always enabled.\n * Used with HandConstraintVisibility.PALM_UP\n */\n this.palmUpStrictness = 0.95;\n /**\n * The radius in meters around the center of the hand that the user must gaze inside for the attached node to be enabled and appear.\n * Used with HandConstraintVisibility.GAZE_FOCUS\n */\n this.gazeProximityRadius = 0.15;\n /**\n * Offset distance from the hand in meters\n */\n this.targetOffset = 0.1;\n /**\n * Where to place the node regarding the center of the hand.\n */\n this.targetZone = 2 /* HandConstraintZone.ULNAR_SIDE */;\n /**\n * Orientation mode of the 4 zones around the hand\n */\n this.zoneOrientationMode = 1 /* HandConstraintOrientation.HAND_ROTATION */;\n /**\n * Orientation mode of the node attached to this behavior\n */\n this.nodeOrientationMode = 1 /* HandConstraintOrientation.HAND_ROTATION */;\n /**\n * Set the hand this behavior should follow. If set to \"none\", it will follow any visible hand (prioritising the left one).\n */\n this.handedness = \"none\";\n /**\n * Rate of interpolation of position and rotation of the attached node.\n * Higher values will give a slower interpolation.\n */\n this.lerpTime = 100;\n // For a right hand\n this._zoneAxis[0 /* HandConstraintZone.ABOVE_FINGER_TIPS */] = new Vector3(0, 1, 0);\n this._zoneAxis[1 /* HandConstraintZone.RADIAL_SIDE */] = new Vector3(-1, 0, 0);\n this._zoneAxis[2 /* HandConstraintZone.ULNAR_SIDE */] = new Vector3(1, 0, 0);\n this._zoneAxis[3 /* HandConstraintZone.BELOW_WRIST */] = new Vector3(0, -1, 0);\n }\n /** gets or sets behavior's name */\n get name() {\n return \"HandConstraint\";\n }\n /** Enable the behavior */\n enable() {\n this._node.setEnabled(true);\n }\n /** Disable the behavior */\n disable() {\n this._node.setEnabled(false);\n }\n _getHandPose() {\n if (!this._handTracking) {\n return null;\n }\n // Retrieve any available hand, starting by the left\n let hand;\n if (this.handedness === \"none\") {\n hand = this._handTracking.getHandByHandedness(\"left\") || this._handTracking.getHandByHandedness(\"right\");\n } else {\n hand = this._handTracking.getHandByHandedness(this.handedness);\n }\n if (hand) {\n const pinkyMetacarpal = hand.getJointMesh(\"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */);\n const middleMetacarpal = hand.getJointMesh(\"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */);\n const wrist = hand.getJointMesh(\"wrist\" /* WebXRHandJoint.WRIST */);\n if (wrist && middleMetacarpal && pinkyMetacarpal) {\n const handPose = {\n position: middleMetacarpal.absolutePosition,\n quaternion: new Quaternion(),\n id: hand.xrController.uniqueId\n };\n // palm forward\n const up = TmpVectors.Vector3[0];\n const forward = TmpVectors.Vector3[1];\n const left = TmpVectors.Vector3[2];\n up.copyFrom(middleMetacarpal.absolutePosition).subtractInPlace(wrist.absolutePosition).normalize();\n forward.copyFrom(pinkyMetacarpal.absolutePosition).subtractInPlace(middleMetacarpal.absolutePosition).normalize();\n // Create vectors for a rotation quaternion, where forward points out from the palm\n Vector3.CrossToRef(up, forward, forward);\n Vector3.CrossToRef(forward, up, left);\n Quaternion.FromLookDirectionLHToRef(forward, up, handPose.quaternion);\n return handPose;\n }\n }\n return null;\n }\n /**\n * Initializes the hand constraint behavior\n */\n init() {}\n /**\n * Attaches the hand constraint to a `TransformNode`\n * @param node defines the node to attach the behavior to\n */\n attach(node) {\n this._node = node;\n this._scene = node.getScene();\n if (!this._node.rotationQuaternion) {\n this._node.rotationQuaternion = Quaternion.RotationYawPitchRoll(this._node.rotation.y, this._node.rotation.x, this._node.rotation.z);\n }\n let lastTick = Date.now();\n this._sceneRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\n const pose = this._getHandPose();\n this._node.reservedDataStore = this._node.reservedDataStore || {};\n this._node.reservedDataStore.nearInteraction = this._node.reservedDataStore.nearInteraction || {};\n this._node.reservedDataStore.nearInteraction.excludedControllerId = null;\n if (pose) {\n const zoneOffset = TmpVectors.Vector3[0];\n const camera = this._scene.activeCamera;\n zoneOffset.copyFrom(this._zoneAxis[this.targetZone]);\n const cameraLookAtQuaternion = TmpVectors.Quaternion[0];\n if (camera && (this.zoneOrientationMode === 0 /* HandConstraintOrientation.LOOK_AT_CAMERA */ || this.nodeOrientationMode === 0 /* HandConstraintOrientation.LOOK_AT_CAMERA */)) {\n const toCamera = TmpVectors.Vector3[1];\n toCamera.copyFrom(camera.position).subtractInPlace(pose.position).normalize();\n if (this._scene.useRightHandedSystem) {\n Quaternion.FromLookDirectionRHToRef(toCamera, Vector3.UpReadOnly, cameraLookAtQuaternion);\n } else {\n Quaternion.FromLookDirectionLHToRef(toCamera, Vector3.UpReadOnly, cameraLookAtQuaternion);\n }\n }\n if (this.zoneOrientationMode === 1 /* HandConstraintOrientation.HAND_ROTATION */) {\n pose.quaternion.toRotationMatrix(TmpVectors.Matrix[0]);\n } else {\n cameraLookAtQuaternion.toRotationMatrix(TmpVectors.Matrix[0]);\n }\n Vector3.TransformNormalToRef(zoneOffset, TmpVectors.Matrix[0], zoneOffset);\n zoneOffset.scaleInPlace(this.targetOffset);\n const targetPosition = TmpVectors.Vector3[2];\n const targetRotation = TmpVectors.Quaternion[1];\n targetPosition.copyFrom(pose.position).addInPlace(zoneOffset);\n if (this.nodeOrientationMode === 1 /* HandConstraintOrientation.HAND_ROTATION */) {\n targetRotation.copyFrom(pose.quaternion);\n } else {\n targetRotation.copyFrom(cameraLookAtQuaternion);\n }\n const elapsed = Date.now() - lastTick;\n Vector3.SmoothToRef(this._node.position, targetPosition, elapsed, this.lerpTime, this._node.position);\n Quaternion.SmoothToRef(this._node.rotationQuaternion, targetRotation, elapsed, this.lerpTime, this._node.rotationQuaternion);\n this._node.reservedDataStore.nearInteraction.excludedControllerId = pose.id;\n }\n this._setVisibility(pose);\n lastTick = Date.now();\n });\n }\n _setVisibility(pose) {\n let palmVisible = true;\n let gazeVisible = true;\n const camera = this._scene.activeCamera;\n if (camera) {\n const cameraForward = camera.getForwardRay();\n if (this.handConstraintVisibility === 2 /* HandConstraintVisibility.GAZE_FOCUS */ || this.handConstraintVisibility === 3 /* HandConstraintVisibility.PALM_AND_GAZE */) {\n gazeVisible = false;\n let gaze;\n if (this._eyeTracking) {\n gaze = this._eyeTracking.getEyeGaze();\n }\n gaze = gaze || cameraForward;\n const gazeToBehavior = TmpVectors.Vector3[0];\n if (pose) {\n pose.position.subtractToRef(gaze.origin, gazeToBehavior);\n } else {\n this._node.getAbsolutePosition().subtractToRef(gaze.origin, gazeToBehavior);\n }\n const projectedDistance = Vector3.Dot(gazeToBehavior, gaze.direction);\n const projectedSquared = projectedDistance * projectedDistance;\n if (projectedDistance > 0) {\n const radiusSquared = gazeToBehavior.lengthSquared() - projectedSquared;\n if (radiusSquared < this.gazeProximityRadius * this.gazeProximityRadius) {\n gazeVisible = true;\n }\n }\n }\n if (this.handConstraintVisibility === 1 /* HandConstraintVisibility.PALM_UP */ || this.handConstraintVisibility === 3 /* HandConstraintVisibility.PALM_AND_GAZE */) {\n palmVisible = false;\n if (pose) {\n const palmDirection = TmpVectors.Vector3[0];\n Vector3.LeftHandedForwardReadOnly.rotateByQuaternionToRef(pose.quaternion, palmDirection);\n if (Vector3.Dot(palmDirection, cameraForward.direction) > this.palmUpStrictness * 2 - 1) {\n palmVisible = true;\n }\n }\n }\n }\n this._node.setEnabled(palmVisible && gazeVisible);\n }\n /**\n * Detaches the behavior from the `TransformNode`\n */\n detach() {\n this._scene.onBeforeRenderObservable.remove(this._sceneRenderObserver);\n }\n /**\n * Links the behavior to the XR experience in which to retrieve hand transform information.\n * @param xr xr experience\n */\n linkToXRExperience(xr) {\n const featuresManager = xr.featuresManager ? xr.featuresManager : xr;\n if (!featuresManager) {\n Tools.Error(\"XR features manager must be available or provided directly for the Hand Menu to work\");\n } else {\n try {\n this._eyeTracking = featuresManager.getEnabledFeature(WebXRFeatureName.EYE_TRACKING);\n } catch {}\n try {\n this._handTracking = featuresManager.getEnabledFeature(WebXRFeatureName.HAND_TRACKING);\n } catch {\n Tools.Error(\"Hand tracking must be enabled for the Hand Menu to work\");\n }\n }\n }\n}","map":{"version":3,"names":["WebXRFeatureName","Quaternion","TmpVectors","Vector3","Tools","HandConstraintZone","HandConstraintOrientation","HandConstraintVisibility","HandConstraintBehavior","constructor","_sceneRenderObserver","_zoneAxis","handConstraintVisibility","palmUpStrictness","gazeProximityRadius","targetOffset","targetZone","zoneOrientationMode","nodeOrientationMode","handedness","lerpTime","name","enable","_node","setEnabled","disable","_getHandPose","_handTracking","hand","getHandByHandedness","pinkyMetacarpal","getJointMesh","middleMetacarpal","wrist","handPose","position","absolutePosition","quaternion","id","xrController","uniqueId","up","forward","left","copyFrom","subtractInPlace","normalize","CrossToRef","FromLookDirectionLHToRef","init","attach","node","_scene","getScene","rotationQuaternion","RotationYawPitchRoll","rotation","y","x","z","lastTick","Date","now","onBeforeRenderObservable","add","pose","reservedDataStore","nearInteraction","excludedControllerId","zoneOffset","camera","activeCamera","cameraLookAtQuaternion","toCamera","useRightHandedSystem","FromLookDirectionRHToRef","UpReadOnly","toRotationMatrix","Matrix","TransformNormalToRef","scaleInPlace","targetPosition","targetRotation","addInPlace","elapsed","SmoothToRef","_setVisibility","palmVisible","gazeVisible","cameraForward","getForwardRay","gaze","_eyeTracking","getEyeGaze","gazeToBehavior","subtractToRef","origin","getAbsolutePosition","projectedDistance","Dot","direction","projectedSquared","radiusSquared","lengthSquared","palmDirection","LeftHandedForwardReadOnly","rotateByQuaternionToRef","detach","remove","linkToXRExperience","xr","featuresManager","Error","getEnabledFeature","EYE_TRACKING","HAND_TRACKING"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Behaviors/Meshes/handConstraintBehavior.js"],"sourcesContent":["import { WebXRFeatureName } from \"../../XR/webXRFeaturesManager.js\";\nimport { Quaternion, TmpVectors, Vector3 } from \"../../Maths/math.vector.js\";\nimport { Tools } from \"../../Misc/tools.js\";\n/**\n * Zones around the hand\n */\nexport var HandConstraintZone;\n(function (HandConstraintZone) {\n /**\n * Above finger tips\n */\n HandConstraintZone[HandConstraintZone[\"ABOVE_FINGER_TIPS\"] = 0] = \"ABOVE_FINGER_TIPS\";\n /**\n * Next to the thumb\n */\n HandConstraintZone[HandConstraintZone[\"RADIAL_SIDE\"] = 1] = \"RADIAL_SIDE\";\n /**\n * Next to the pinky finger\n */\n HandConstraintZone[HandConstraintZone[\"ULNAR_SIDE\"] = 2] = \"ULNAR_SIDE\";\n /**\n * Below the wrist\n */\n HandConstraintZone[HandConstraintZone[\"BELOW_WRIST\"] = 3] = \"BELOW_WRIST\";\n})(HandConstraintZone || (HandConstraintZone = {}));\n/**\n * Orientations for the hand zones and for the attached node\n */\nexport var HandConstraintOrientation;\n(function (HandConstraintOrientation) {\n /**\n * Orientation is towards the camera\n */\n HandConstraintOrientation[HandConstraintOrientation[\"LOOK_AT_CAMERA\"] = 0] = \"LOOK_AT_CAMERA\";\n /**\n * Orientation is determined by the rotation of the palm\n */\n HandConstraintOrientation[HandConstraintOrientation[\"HAND_ROTATION\"] = 1] = \"HAND_ROTATION\";\n})(HandConstraintOrientation || (HandConstraintOrientation = {}));\n/**\n * Orientations for the hand zones and for the attached node\n */\nexport var HandConstraintVisibility;\n(function (HandConstraintVisibility) {\n /**\n * Constraint is always visible\n */\n HandConstraintVisibility[HandConstraintVisibility[\"ALWAYS_VISIBLE\"] = 0] = \"ALWAYS_VISIBLE\";\n /**\n * Constraint is only visible when the palm is up\n */\n HandConstraintVisibility[HandConstraintVisibility[\"PALM_UP\"] = 1] = \"PALM_UP\";\n /**\n * Constraint is only visible when the user is looking at the constraint.\n * Uses XR Eye Tracking if enabled/available, otherwise uses camera direction\n */\n HandConstraintVisibility[HandConstraintVisibility[\"GAZE_FOCUS\"] = 2] = \"GAZE_FOCUS\";\n /**\n * Constraint is only visible when the palm is up and the user is looking at it\n */\n HandConstraintVisibility[HandConstraintVisibility[\"PALM_AND_GAZE\"] = 3] = \"PALM_AND_GAZE\";\n})(HandConstraintVisibility || (HandConstraintVisibility = {}));\n/**\n * Hand constraint behavior that makes the attached `TransformNode` follow hands in XR experiences.\n * @since 5.0.0\n */\nexport class HandConstraintBehavior {\n /**\n * Builds a hand constraint behavior\n */\n constructor() {\n this._sceneRenderObserver = null;\n this._zoneAxis = {};\n /**\n * Sets the HandConstraintVisibility level for the hand constraint\n */\n this.handConstraintVisibility = 3 /* HandConstraintVisibility.PALM_AND_GAZE */;\n /**\n * A number from 0.0 to 1.0, marking how restricted the direction the palm faces is for the attached node to be enabled.\n * A 1 means the palm must be directly facing the user before the node is enabled, a 0 means it is always enabled.\n * Used with HandConstraintVisibility.PALM_UP\n */\n this.palmUpStrictness = 0.95;\n /**\n * The radius in meters around the center of the hand that the user must gaze inside for the attached node to be enabled and appear.\n * Used with HandConstraintVisibility.GAZE_FOCUS\n */\n this.gazeProximityRadius = 0.15;\n /**\n * Offset distance from the hand in meters\n */\n this.targetOffset = 0.1;\n /**\n * Where to place the node regarding the center of the hand.\n */\n this.targetZone = 2 /* HandConstraintZone.ULNAR_SIDE */;\n /**\n * Orientation mode of the 4 zones around the hand\n */\n this.zoneOrientationMode = 1 /* HandConstraintOrientation.HAND_ROTATION */;\n /**\n * Orientation mode of the node attached to this behavior\n */\n this.nodeOrientationMode = 1 /* HandConstraintOrientation.HAND_ROTATION */;\n /**\n * Set the hand this behavior should follow. If set to \"none\", it will follow any visible hand (prioritising the left one).\n */\n this.handedness = \"none\";\n /**\n * Rate of interpolation of position and rotation of the attached node.\n * Higher values will give a slower interpolation.\n */\n this.lerpTime = 100;\n // For a right hand\n this._zoneAxis[0 /* HandConstraintZone.ABOVE_FINGER_TIPS */] = new Vector3(0, 1, 0);\n this._zoneAxis[1 /* HandConstraintZone.RADIAL_SIDE */] = new Vector3(-1, 0, 0);\n this._zoneAxis[2 /* HandConstraintZone.ULNAR_SIDE */] = new Vector3(1, 0, 0);\n this._zoneAxis[3 /* HandConstraintZone.BELOW_WRIST */] = new Vector3(0, -1, 0);\n }\n /** gets or sets behavior's name */\n get name() {\n return \"HandConstraint\";\n }\n /** Enable the behavior */\n enable() {\n this._node.setEnabled(true);\n }\n /** Disable the behavior */\n disable() {\n this._node.setEnabled(false);\n }\n _getHandPose() {\n if (!this._handTracking) {\n return null;\n }\n // Retrieve any available hand, starting by the left\n let hand;\n if (this.handedness === \"none\") {\n hand = this._handTracking.getHandByHandedness(\"left\") || this._handTracking.getHandByHandedness(\"right\");\n }\n else {\n hand = this._handTracking.getHandByHandedness(this.handedness);\n }\n if (hand) {\n const pinkyMetacarpal = hand.getJointMesh(\"pinky-finger-metacarpal\" /* WebXRHandJoint.PINKY_FINGER_METACARPAL */);\n const middleMetacarpal = hand.getJointMesh(\"middle-finger-metacarpal\" /* WebXRHandJoint.MIDDLE_FINGER_METACARPAL */);\n const wrist = hand.getJointMesh(\"wrist\" /* WebXRHandJoint.WRIST */);\n if (wrist && middleMetacarpal && pinkyMetacarpal) {\n const handPose = { position: middleMetacarpal.absolutePosition, quaternion: new Quaternion(), id: hand.xrController.uniqueId };\n // palm forward\n const up = TmpVectors.Vector3[0];\n const forward = TmpVectors.Vector3[1];\n const left = TmpVectors.Vector3[2];\n up.copyFrom(middleMetacarpal.absolutePosition).subtractInPlace(wrist.absolutePosition).normalize();\n forward.copyFrom(pinkyMetacarpal.absolutePosition).subtractInPlace(middleMetacarpal.absolutePosition).normalize();\n // Create vectors for a rotation quaternion, where forward points out from the palm\n Vector3.CrossToRef(up, forward, forward);\n Vector3.CrossToRef(forward, up, left);\n Quaternion.FromLookDirectionLHToRef(forward, up, handPose.quaternion);\n return handPose;\n }\n }\n return null;\n }\n /**\n * Initializes the hand constraint behavior\n */\n init() { }\n /**\n * Attaches the hand constraint to a `TransformNode`\n * @param node defines the node to attach the behavior to\n */\n attach(node) {\n this._node = node;\n this._scene = node.getScene();\n if (!this._node.rotationQuaternion) {\n this._node.rotationQuaternion = Quaternion.RotationYawPitchRoll(this._node.rotation.y, this._node.rotation.x, this._node.rotation.z);\n }\n let lastTick = Date.now();\n this._sceneRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\n const pose = this._getHandPose();\n this._node.reservedDataStore = this._node.reservedDataStore || {};\n this._node.reservedDataStore.nearInteraction = this._node.reservedDataStore.nearInteraction || {};\n this._node.reservedDataStore.nearInteraction.excludedControllerId = null;\n if (pose) {\n const zoneOffset = TmpVectors.Vector3[0];\n const camera = this._scene.activeCamera;\n zoneOffset.copyFrom(this._zoneAxis[this.targetZone]);\n const cameraLookAtQuaternion = TmpVectors.Quaternion[0];\n if (camera && (this.zoneOrientationMode === 0 /* HandConstraintOrientation.LOOK_AT_CAMERA */ || this.nodeOrientationMode === 0 /* HandConstraintOrientation.LOOK_AT_CAMERA */)) {\n const toCamera = TmpVectors.Vector3[1];\n toCamera.copyFrom(camera.position).subtractInPlace(pose.position).normalize();\n if (this._scene.useRightHandedSystem) {\n Quaternion.FromLookDirectionRHToRef(toCamera, Vector3.UpReadOnly, cameraLookAtQuaternion);\n }\n else {\n Quaternion.FromLookDirectionLHToRef(toCamera, Vector3.UpReadOnly, cameraLookAtQuaternion);\n }\n }\n if (this.zoneOrientationMode === 1 /* HandConstraintOrientation.HAND_ROTATION */) {\n pose.quaternion.toRotationMatrix(TmpVectors.Matrix[0]);\n }\n else {\n cameraLookAtQuaternion.toRotationMatrix(TmpVectors.Matrix[0]);\n }\n Vector3.TransformNormalToRef(zoneOffset, TmpVectors.Matrix[0], zoneOffset);\n zoneOffset.scaleInPlace(this.targetOffset);\n const targetPosition = TmpVectors.Vector3[2];\n const targetRotation = TmpVectors.Quaternion[1];\n targetPosition.copyFrom(pose.position).addInPlace(zoneOffset);\n if (this.nodeOrientationMode === 1 /* HandConstraintOrientation.HAND_ROTATION */) {\n targetRotation.copyFrom(pose.quaternion);\n }\n else {\n targetRotation.copyFrom(cameraLookAtQuaternion);\n }\n const elapsed = Date.now() - lastTick;\n Vector3.SmoothToRef(this._node.position, targetPosition, elapsed, this.lerpTime, this._node.position);\n Quaternion.SmoothToRef(this._node.rotationQuaternion, targetRotation, elapsed, this.lerpTime, this._node.rotationQuaternion);\n this._node.reservedDataStore.nearInteraction.excludedControllerId = pose.id;\n }\n this._setVisibility(pose);\n lastTick = Date.now();\n });\n }\n _setVisibility(pose) {\n let palmVisible = true;\n let gazeVisible = true;\n const camera = this._scene.activeCamera;\n if (camera) {\n const cameraForward = camera.getForwardRay();\n if (this.handConstraintVisibility === 2 /* HandConstraintVisibility.GAZE_FOCUS */ || this.handConstraintVisibility === 3 /* HandConstraintVisibility.PALM_AND_GAZE */) {\n gazeVisible = false;\n let gaze;\n if (this._eyeTracking) {\n gaze = this._eyeTracking.getEyeGaze();\n }\n gaze = gaze || cameraForward;\n const gazeToBehavior = TmpVectors.Vector3[0];\n if (pose) {\n pose.position.subtractToRef(gaze.origin, gazeToBehavior);\n }\n else {\n this._node.getAbsolutePosition().subtractToRef(gaze.origin, gazeToBehavior);\n }\n const projectedDistance = Vector3.Dot(gazeToBehavior, gaze.direction);\n const projectedSquared = projectedDistance * projectedDistance;\n if (projectedDistance > 0) {\n const radiusSquared = gazeToBehavior.lengthSquared() - projectedSquared;\n if (radiusSquared < this.gazeProximityRadius * this.gazeProximityRadius) {\n gazeVisible = true;\n }\n }\n }\n if (this.handConstraintVisibility === 1 /* HandConstraintVisibility.PALM_UP */ || this.handConstraintVisibility === 3 /* HandConstraintVisibility.PALM_AND_GAZE */) {\n palmVisible = false;\n if (pose) {\n const palmDirection = TmpVectors.Vector3[0];\n Vector3.LeftHandedForwardReadOnly.rotateByQuaternionToRef(pose.quaternion, palmDirection);\n if (Vector3.Dot(palmDirection, cameraForward.direction) > this.palmUpStrictness * 2 - 1) {\n palmVisible = true;\n }\n }\n }\n }\n this._node.setEnabled(palmVisible && gazeVisible);\n }\n /**\n * Detaches the behavior from the `TransformNode`\n */\n detach() {\n this._scene.onBeforeRenderObservable.remove(this._sceneRenderObserver);\n }\n /**\n * Links the behavior to the XR experience in which to retrieve hand transform information.\n * @param xr xr experience\n */\n linkToXRExperience(xr) {\n const featuresManager = xr.featuresManager ? xr.featuresManager : xr;\n if (!featuresManager) {\n Tools.Error(\"XR features manager must be available or provided directly for the Hand Menu to work\");\n }\n else {\n try {\n this._eyeTracking = featuresManager.getEnabledFeature(WebXRFeatureName.EYE_TRACKING);\n }\n catch { }\n try {\n this._handTracking = featuresManager.getEnabledFeature(WebXRFeatureName.HAND_TRACKING);\n }\n catch {\n Tools.Error(\"Hand tracking must be enabled for the Hand Menu to work\");\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|