(function () { var CONTROLLER_MAPPING_LEFT = "com.highfidelity.scaleAvatarLeft", CONTROLLER_MAPPING_RIGHT = "com.highfidelity.scaleAvatarRight"; var isRightPressed = false; var isLeftPressed = false; var PRESSED_MIN_VALUE = 0.8; var DEBUG = true; function rightOnGripPress(value) { if (!isRightPressed && value >= PRESSED_MIN_VALUE) { // not already pressed and value > 0.8 isRightPressed = true; if (DEBUG) { print("right pressed!"); } } else if (isRightPressed && value < PRESSED_MIN_VALUE) { isRightPressed = false; } handleBothGripPressed(); } function leftOnGripPress(value) { if (!isLeftPressed && value >= PRESSED_MIN_VALUE) { // not already pressed and value > 0.8 isLeftPressed = true; if (DEBUG) { print("left pressed!"); } } else if (isLeftPressed && value < PRESSED_MIN_VALUE) { isLeftPressed = false; } handleBothGripPressed(); } var SCALE_BUFFER = 1.5; // increase/decrease the sensitivity of scaling var PRESSED_INTERVAL_MS = 50; var isPressed = false; var initialDistance = null; var initialScale = null; var pressedInterval = null; function handleBothGripPressed() { if (isRightPressed && isLeftPressed && isPressed) { // setup done, do not need to continue // or either left or right is not pressed return; } if (isRightPressed && isLeftPressed) { if (!isPressed) { // Both pressed initially initialDistance = distanceBetweenHands(); isPressed = true; initialScale = MyAvatar.scale; // Setup pressed interval pressedInterval = Script.setInterval(function() { if (isPressed) { if (DEBUG) { print("init" + JSON.stringify(initialDistance)); print("distance" + JSON.stringify(distanceBetweenHands())); } var currentDistance = distanceBetweenHands(); var deltaDistance = currentDistance - initialDistance; MyAvatar.scale = initialScale + deltaDistance * SCALE_BUFFER; } }, PRESSED_INTERVAL_MS); } } else { // remove pressed interval if (pressedInterval) { if (DEBUG) { print("CLEAR INTERVAL"); } Script.clearInterval(pressedInterval); pressedInterval = null; isPressed = false; initialDistance = null; } } } // Get the distance between the avatar's hands function distanceBetweenHands() { // var leftPosition = Controller.getPoseValue(Controller.Standard.leftGrip); // var rightPosition = Controller.getPoseValue(Controller.Standard.RightGrip).translation; // print(JSON.stringify(leftPosition)); // var distance = Vec3.distance(leftPosition, rightPosition); var leftHandPosition = MyAvatar.getJointPosition("LeftHandMiddle2"); if (!leftHandPosition) { leftHandPosition = MyAvatar.getJointPosition("LeftHand"); } var rightHandPosition = MyAvatar.getJointPosition("RightHandMiddle2"); if (!rightHandPosition) { rightHandPosition = MyAvatar.getJointPosition("RightHand"); } var distance = Vec3.distance(leftHandPosition, rightHandPosition); return distance; } function setupBothControllerMappings() { var controllerMapping = Controller.newMapping(CONTROLLER_MAPPING_LEFT); controllerMapping.from(Controller.Standard.LeftGrip).to(leftOnGripPress); Controller.enableMapping(CONTROLLER_MAPPING_LEFT); controllerMapping = Controller.newMapping(CONTROLLER_MAPPING_RIGHT); controllerMapping.from(Controller.Standard.RightGrip).to(rightOnGripPress); Controller.enableMapping(CONTROLLER_MAPPING_RIGHT); } function unload() { Controller.disableMapping(CONTROLLER_MAPPING_LEFT); Controller.disableMapping(CONTROLLER_MAPPING_RIGHT); if (pressedInterval) { Script.clearInterval(pressedInterval); } } setupBothControllerMappings(); Script.scriptEnding.connect(unload); })();