From fd0efd91ff60425b1d0c457c2734dabd5337f764 Mon Sep 17 00:00:00 2001 From: Sam Gondelman Date: Thu, 18 Jun 2015 13:59:37 -0700 Subject: [PATCH] added shift action, added timers and fast mode to hmdControls.js --- examples/hmdControls.js | 82 ++++++++++++++++--- interface/src/devices/Joystick.cpp | 2 + interface/src/devices/KeyboardMouseDevice.cpp | 2 + interface/src/devices/SixenseManager.cpp | 4 + interface/src/ui/UserInputMapper.cpp | 2 + interface/src/ui/UserInputMapper.h | 2 + 6 files changed, 81 insertions(+), 13 deletions(-) diff --git a/examples/hmdControls.js b/examples/hmdControls.js index 3e73decaec..aa3990acf2 100644 --- a/examples/hmdControls.js +++ b/examples/hmdControls.js @@ -9,73 +9,129 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -var MOVE_DISTANCE = 0.5; -var PITCH_INCREMENT = Math.PI / 8; -var YAW_INCREMENT = Math.PI / 8; +var MOVE_DISTANCE = 0.3; +var PITCH_INCREMENT = 0.5; // degrees +var VR_PITCH_INCREMENT = 15.0; // degrees +var YAW_INCREMENT = 0.5; // degrees +var VR_YAW_INCREMENT = 15.0; // degrees var BOOM_SPEED = 0.5; var THRESHOLD = 0.2; +var CAMERA_UPDATE_TIME = 0.5; +var pitchTimer = CAMERA_UPDATE_TIME; +var yawTimer = CAMERA_UPDATE_TIME; + +var shifted = false; +var SHIFT_UPDATE_TIME = 0.5; +var shiftTimer = SHIFT_UPDATE_TIME; +var SHIFT_MAG = 4.0; + var hmdControls = (function () { function onActionEvent(action, state) { if (state < THRESHOLD) { + if (action == 6 || action == 7) { + yawTimer = CAMERA_UPDATE_TIME; + } else if (action == 8 || action == 9) { + pitchTimer = CAMERA_UPDATE_TIME; + } return; } switch (action) { case 0: // backward var direction = Quat.getFront(Camera.getOrientation()); direction = Vec3.multiply(-1, direction); - direction = Vec3.multiply(Vec3.normalize(direction), MOVE_DISTANCE); + direction = Vec3.multiply(Vec3.normalize(direction), shifted ? SHIFT_MAG * MOVE_DISTANCE : MOVE_DISTANCE); MyAvatar.position = Vec3.sum(MyAvatar.position, direction); break; case 1: // forward var direction = Quat.getFront(Camera.getOrientation()); - direction = Vec3.multiply(Vec3.normalize(direction), MOVE_DISTANCE); + direction = Vec3.multiply(Vec3.normalize(direction), shifted ? SHIFT_MAG * MOVE_DISTANCE : MOVE_DISTANCE); MyAvatar.position = Vec3.sum(MyAvatar.position, direction); break; case 2: // left var direction = Quat.getRight(Camera.getOrientation()); direction = Vec3.multiply(-1, direction); - direction = Vec3.multiply(Vec3.normalize(direction), MOVE_DISTANCE); + direction = Vec3.multiply(Vec3.normalize(direction), shifted ? SHIFT_MAG * MOVE_DISTANCE : MOVE_DISTANCE); MyAvatar.position = Vec3.sum(MyAvatar.position, direction); break; case 3: // right var direction = Quat.getRight(Camera.getOrientation()); - direction = Vec3.multiply(Vec3.normalize(direction), MOVE_DISTANCE); + direction = Vec3.multiply(Vec3.normalize(direction), shifted ? SHIFT_MAG * MOVE_DISTANCE : MOVE_DISTANCE); MyAvatar.position = Vec3.sum(MyAvatar.position, direction); break; case 4: // down var direction = Quat.getUp(Camera.getOrientation()); direction = Vec3.multiply(-1, direction); - direction = Vec3.multiply(Vec3.normalize(direction), MOVE_DISTANCE); + direction = Vec3.multiply(Vec3.normalize(direction), shifted ? SHIFT_MAG * MOVE_DISTANCE : MOVE_DISTANCE); MyAvatar.position = Vec3.sum(MyAvatar.position, direction); break; case 5: // up var direction = Quat.getUp(Camera.getOrientation()); - direction = Vec3.multiply(Vec3.normalize(direction), MOVE_DISTANCE); + direction = Vec3.multiply(Vec3.normalize(direction), shifted ? SHIFT_MAG * MOVE_DISTANCE : MOVE_DISTANCE); MyAvatar.position = Vec3.sum(MyAvatar.position, direction); break; case 6: // yaw left - MyAvatar.bodyYaw = MyAvatar.bodyYaw + YAW_INCREMENT; + if (yawTimer < 0.0 && Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.bodyYaw = MyAvatar.bodyYaw + (shifted ? SHIFT_MAG * VR_YAW_INCREMENT : VR_YAW_INCREMENT); + yawTimer = CAMERA_UPDATE_TIME; + } else if (!Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.bodyYaw = MyAvatar.bodyYaw + (shifted ? SHIFT_MAG * YAW_INCREMENT : YAW_INCREMENT); + } break; case 7: // yaw right - MyAvatar.bodyYaw = MyAvatar.bodyYaw - YAW_INCREMENT; + if (yawTimer < 0.0 && Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.bodyYaw = MyAvatar.bodyYaw - (shifted ? SHIFT_MAG * VR_YAW_INCREMENT : VR_YAW_INCREMENT); + yawTimer = CAMERA_UPDATE_TIME; + } else if (!Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.bodyYaw = MyAvatar.bodyYaw - (shifted ? SHIFT_MAG * YAW_INCREMENT : YAW_INCREMENT); + } break; case 8: // pitch down - MyAvatar.headPitch = Math.max(-180, Math.min(180, MyAvatar.headPitch - PITCH_INCREMENT)); + if (pitchTimer < 0.0 && Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.headPitch = Math.max(-180, Math.min(180, MyAvatar.headPitch - (shifted ? SHIFT_MAG * VR_PITCH_INCREMENT : VR_PITCH_INCREMENT))); + pitchTimer = CAMERA_UPDATE_TIME; + } else if (!Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.headPitch = Math.max(-180, Math.min(180, MyAvatar.headPitch - (shifted ? SHIFT_MAG * PITCH_INCREMENT : PITCH_INCREMENT))); + } break; case 9: // pitch up - MyAvatar.headPitch = Math.max(-180, Math.min(180, MyAvatar.headPitch + PITCH_INCREMENT)); + if (pitchTimer < 0.0 && Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.headPitch = Math.max(-180, Math.min(180, MyAvatar.headPitch + (shifted ? SHIFT_MAG * VR_PITCH_INCREMENT : VR_PITCH_INCREMENT))); + pitchTimer = CAMERA_UPDATE_TIME; + } else if (!Menu.isOptionChecked("Enable VR Mode")) { + MyAvatar.headPitch = Math.max(-180, Math.min(180, MyAvatar.headPitch + (shifted ? SHIFT_MAG * PITCH_INCREMENT : PITCH_INCREMENT))); + } + break; + case 12: // shift + if (shiftTimer < 0.0) { + shifted = !shifted; + shiftTimer = SHIFT_UPDATE_TIME; + } break; default: break; } } + function update(dt) { + if (yawTimer >= 0.0) { + yawTimer = yawTimer - dt; + } + if (pitchTimer >= 0.0) { + pitchTimer = pitchTimer - dt; + } + if (shiftTimer >= 0.0) { + shiftTimer = shiftTimer - dt; + } + } + function setUp() { Controller.captureActionEvents(); Controller.actionEvent.connect(onActionEvent); + + Script.update.connect(update); } function tearDown() { diff --git a/interface/src/devices/Joystick.cpp b/interface/src/devices/Joystick.cpp index 07f3c4873c..fcfee85b75 100644 --- a/interface/src/devices/Joystick.cpp +++ b/interface/src/devices/Joystick.cpp @@ -210,6 +210,8 @@ void Joystick::assignDefaultInputMapping(UserInputMapper& mapper) { // Zoom mapper.addInputChannel(UserInputMapper::BOOM_IN, makeInput(RIGHT_SHOULDER), makeInput(SDL_CONTROLLER_BUTTON_RIGHTSHOULDER), BOOM_SPEED/2.0f); mapper.addInputChannel(UserInputMapper::BOOM_OUT, makeInput(LEFT_SHOULDER), makeInput(SDL_CONTROLLER_BUTTON_RIGHTSHOULDER), BOOM_SPEED/2.0f); + + mapper.addInputChannel(UserInputMapper::SHIFT, makeInput(SDL_CONTROLLER_BUTTON_LEFTSHOULDER)); #endif } diff --git a/interface/src/devices/KeyboardMouseDevice.cpp b/interface/src/devices/KeyboardMouseDevice.cpp index 9fadf7be82..e070e002c2 100755 --- a/interface/src/devices/KeyboardMouseDevice.cpp +++ b/interface/src/devices/KeyboardMouseDevice.cpp @@ -276,6 +276,8 @@ void KeyboardMouseDevice::assignDefaultInputMapping(UserInputMapper& mapper) { mapper.addInputChannel(UserInputMapper::LATERAL_RIGHT, makeInput(MOUSE_AXIS_WHEEL_X_POS), BUTTON_YAW_SPEED); #endif + + mapper.addInputChannel(UserInputMapper::SHIFT, makeInput(Qt::Key_Space)); } diff --git a/interface/src/devices/SixenseManager.cpp b/interface/src/devices/SixenseManager.cpp index c2a53508e3..c94dd52f4f 100644 --- a/interface/src/devices/SixenseManager.cpp +++ b/interface/src/devices/SixenseManager.cpp @@ -724,6 +724,10 @@ void SixenseManager::assignDefaultInputMapping(UserInputMapper& mapper) { mapper.addInputChannel(UserInputMapper::VERTICAL_UP, makeInput(BUTTON_3, 1), BUTTON_MOVE_SPEED); mapper.addInputChannel(UserInputMapper::VERTICAL_DOWN, makeInput(BUTTON_1, 1), BUTTON_MOVE_SPEED); + + mapper.addInputChannel(UserInputMapper::SHIFT, makeInput(BUTTON_2, 0)); + mapper.addInputChannel(UserInputMapper::SHIFT, makeInput(BUTTON_2, 1)); + } float SixenseManager::getButton(int channel) const { diff --git a/interface/src/ui/UserInputMapper.cpp b/interface/src/ui/UserInputMapper.cpp index 985353e31e..b5fcbebda6 100755 --- a/interface/src/ui/UserInputMapper.cpp +++ b/interface/src/ui/UserInputMapper.cpp @@ -247,6 +247,7 @@ void UserInputMapper::assignDefaulActionScales() { _actionScales[PITCH_UP] = 1.0f; // 1 degree per unit _actionScales[BOOM_IN] = 1.0f; // 1m per unit _actionScales[BOOM_OUT] = 1.0f; // 1m per unit + _actionStates[SHIFT] = 1.0f; // on } // This is only necessary as long as the actions are hardcoded @@ -264,4 +265,5 @@ void UserInputMapper::createActionNames() { _actionNames[PITCH_UP] = "PITCH_UP"; _actionNames[BOOM_IN] = "BOOM_IN"; _actionNames[BOOM_OUT] = "BOOM_OUT"; + _actionNames[SHIFT] = "SHIFT"; } \ No newline at end of file diff --git a/interface/src/ui/UserInputMapper.h b/interface/src/ui/UserInputMapper.h index 91aa724ea6..0093c36eec 100755 --- a/interface/src/ui/UserInputMapper.h +++ b/interface/src/ui/UserInputMapper.h @@ -139,6 +139,8 @@ public: BOOM_IN, BOOM_OUT, + + SHIFT, NUM_ACTIONS, };