mirror of
https://github.com/overte-org/overte.git
synced 2025-04-27 22:55:57 +02:00
86 lines
3.3 KiB
JavaScript
86 lines
3.3 KiB
JavaScript
//
|
|
// hydraThrustAndView.js
|
|
// hifi
|
|
//
|
|
// Created by Brad Hefta-Gaub on 2/6/14.
|
|
// Copyright (c) 2014 HighFidelity, Inc. All rights reserved.
|
|
//
|
|
// This is an example script that demonstrates use of the Controller and MyAvatar classes to implement
|
|
// avatar flying through the hydra/controller joysticks
|
|
//
|
|
//
|
|
|
|
var damping = 0.9;
|
|
var position = { x: MyAvatar.position.x, y: MyAvatar.position.y, z: MyAvatar.position.z };
|
|
var joysticksCaptured = false;
|
|
var THRUST_CONTROLLER = 0;
|
|
var VIEW_CONTROLLER = 1;
|
|
var INITIAL_THRUST_MULTPLIER = 1.0;
|
|
var THRUST_INCREASE_RATE = 1.05;
|
|
var MAX_THRUST_MULTIPLIER = 75.0;
|
|
var thrustMultiplier = INITIAL_THRUST_MULTPLIER;
|
|
|
|
function flyWithHydra() {
|
|
var deltaTime = 1/60; // approximately our FPS - maybe better to be elapsed time since last call
|
|
var THRUST_MAG_UP = 800.0;
|
|
var THRUST_MAG_DOWN = 300.0;
|
|
var THRUST_MAG_FWD = 500.0;
|
|
var THRUST_MAG_BACK = 300.0;
|
|
var THRUST_MAG_LATERAL = 250.0;
|
|
var THRUST_JUMP = 120.0;
|
|
var scale = 1.0;
|
|
|
|
var YAW_MAG = 500.0;
|
|
var PITCH_MAG = 100.0;
|
|
var THRUST_MAG_HAND_JETS = THRUST_MAG_FWD;
|
|
var JOYSTICK_YAW_MAG = YAW_MAG;
|
|
var JOYSTICK_PITCH_MAG = PITCH_MAG * 0.5;
|
|
|
|
var thrustJoystickPosition = Controller.getJoystickPosition(THRUST_CONTROLLER);
|
|
|
|
if (thrustJoystickPosition.x != 0 || thrustJoystickPosition.y != 0) {
|
|
if (thrustMultiplier < MAX_THRUST_MULTIPLIER) {
|
|
thrustMultiplier *= 1 + (deltaTime * THRUST_INCREASE_RATE);
|
|
}
|
|
var currentOrientation = MyAvatar.orientation;
|
|
|
|
var front = Quat.getFront(currentOrientation);
|
|
var right = Quat.getRight(currentOrientation);
|
|
var up = Quat.getUp(currentOrientation);
|
|
|
|
var thrustFront = Vec3.multiply(front, scale * THRUST_MAG_HAND_JETS * thrustJoystickPosition.y * thrustMultiplier * deltaTime);
|
|
MyAvatar.addThrust(thrustFront);
|
|
var thrustRight = Vec3.multiply(right, scale * THRUST_MAG_HAND_JETS * thrustJoystickPosition.x * thrustMultiplier * deltaTime);
|
|
MyAvatar.addThrust(thrustRight);
|
|
} else {
|
|
thrustMultiplier = INITIAL_THRUST_MULTPLIER;
|
|
}
|
|
|
|
// View Controller
|
|
var viewJoystickPosition = Controller.getJoystickPosition(VIEW_CONTROLLER);
|
|
if (viewJoystickPosition.x != 0 || viewJoystickPosition.y != 0) {
|
|
|
|
// change the body yaw based on our x controller
|
|
var orientation = MyAvatar.orientation;
|
|
var deltaOrientation = Quat.fromPitchYawRoll(0, (-1 * viewJoystickPosition.x * JOYSTICK_YAW_MAG * deltaTime), 0);
|
|
MyAvatar.orientation = Quat.multiply(orientation, deltaOrientation);
|
|
|
|
// change the headPitch based on our x controller
|
|
//pitch += viewJoystickPosition.y * JOYSTICK_PITCH_MAG * deltaTime;
|
|
var newPitch = MyAvatar.headPitch + (viewJoystickPosition.y * JOYSTICK_PITCH_MAG * deltaTime);
|
|
MyAvatar.headPitch = newPitch;
|
|
}
|
|
}
|
|
|
|
Script.willSendVisualDataCallback.connect(flyWithHydra);
|
|
Controller.captureJoystick(THRUST_CONTROLLER);
|
|
Controller.captureJoystick(VIEW_CONTROLLER);
|
|
|
|
// Map keyPress and mouse move events to our callbacks
|
|
function scriptEnding() {
|
|
// re-enabled the standard application for touch events
|
|
Controller.releaseJoystick(THRUST_CONTROLLER);
|
|
Controller.releaseJoystick(VIEW_CONTROLLER);
|
|
}
|
|
Script.scriptEnding.connect(scriptEnding);
|
|
|