"use strict"; /// /// /* globals Utility */ // import {Utility} from "./Utility.js"; var Utility = Script.require("./Utility.js?" + Date.now()); module.exports = /** @class */ (function () { function SpacemouseInput() { // constants this.SPEED = 100; // speed multiplier this.YAW_SPEED = 200; // yaw speed is slower this.DELTA_TIME = 1 / 60; // a pretend deltatime this.PITCH_MINIMUM = -80; // clamp pitch up this.PITCH_MAXIMUM = 80; // clamp pitch down this.MAPPING_NAME = "org.mikeybailey.spacemouse.flycam"; // controller mapping // private class properties this.isFirstMove = true; // this will probably go away this.firstCameraMode = ""; // flycam off camera mode this.isFlyCameraActive = false; // fly camera is active this.position = { x: 0, y: 0, z: 0 }; // values from controller inpout this.rotation = { x: 0, y: 0, z: 0 }; // euler values from controller input this.utility = new Utility(); this.utility.isDebug = true; this.utility.debugLog("SMC!"); this.setupMapping(); this.mapping.enable(true); this.firstCameraMode = Camera.getModeString(); if (this.firstCameraMode === "independent") { this.firstCameraMode = "third person"; } // this.inputTimer = Script.setInterval(function() {}, 1000); Script.scriptEnding.connect(this, "destroy"); } SpacemouseInput.prototype.doCube = function (doit) { if (doit) { this.testCubeID = Entities.addEntity({ type: "Model", position: Vec3.sum(Camera.position, Vec3.multiplyQbyV(Camera.orientation, { x: 0, y: 0, z: 1 })), rotation: Camera.orientation, dimensions: { x: 0.25, y: 0.25, z: 0.25 }, registrationPoint: { x: 0, y: 0, z: 0 }, modelURL: "http://hifi-content.s3.amazonaws.com/caitlyn/dev/spacenavigator/droneBuggo.fbx?2" }, true); } else { Entities.deleteEntity(this.testCubeID); } }; SpacemouseInput.prototype.setupMapping = function () { var _this = this; this.mapping = Controller.newMapping(this.MAPPING_NAME); this.mapping.from(Controller.Hardware.Spacemouse.TranslateX).to(function (value) { _this.position.x = value * _this.SPEED * _this.DELTA_TIME; _this.move(); }); this.mapping.from(Controller.Hardware.Spacemouse.TranslateY).to(function (value) { _this.position.z = value * _this.SPEED * _this.DELTA_TIME; _this.move(); }); this.mapping.from(Controller.Hardware.Spacemouse.TranslateZ).to(function (value) { _this.position.y = -value * _this.SPEED * _this.DELTA_TIME; _this.move(); }); this.mapping.from(Controller.Hardware.Spacemouse.RotateX).to(function (value) { _this.rotation.x = value * _this.SPEED * _this.DELTA_TIME; _this.rotate(); }); this.mapping.from(Controller.Hardware.Spacemouse.RotateY).to(function (value) { _this.rotation.z = value * _this.SPEED * _this.DELTA_TIME; }); this.mapping.from(Controller.Hardware.Spacemouse.RotateZ).to(function (value) { _this.rotation.y = -value * _this.YAW_SPEED * _this.DELTA_TIME; _this.rotate(); }); this.mapping.from(Controller.Hardware.Spacemouse.LeftButton).to(function (value) { if (value) { _this.onLeftButtonPress(); } }); this.mapping.from(Controller.Hardware.Spacemouse.RightButton).to(function (value) { if (value) { _this.onRightButtonPress(); } }); this.mapping.enable(true); }; SpacemouseInput.prototype.onLeftButtonPress = function () { return; }; SpacemouseInput.prototype.onRightButtonPress = function () { if (this.isFlyCameraActive) { Camera.setModeString(this.firstCameraMode); this.utility.debugLog(this.firstCameraMode); this.isFlyCameraActive = false; this.doCube(false); this.position = Vec3.ZERO; this.rotation = Vec3.ZERO; this.utility.sleep(1000); } else { Camera.setModeString("independent"); this.utility.debugLog("independent"); this.isFlyCameraActive = true; this.doCube(true); this.utility.sleep(1000); } }; SpacemouseInput.prototype.move = function () { this.position = Vec3.multiplyQbyV(Camera.orientation, this.position); this.position = Vec3.sum(Camera.position, this.position); Camera.setPosition(this.position); this.position = Vec3.ZERO; }; SpacemouseInput.prototype.rotate = function () { if (!this.isFlyCameraActive) { return; } this.rotation = Vec3.multiplyQbyV(Camera.orientation, this.rotation); var orientation = Quat.multiply(Quat.fromVec3Degrees(this.rotation), Camera.orientation); var cameraAngles = Quat.safeEulerAngles(Quat.cancelOutRoll(orientation)); cameraAngles.x = this.utility.clamp(cameraAngles.x, this.PITCH_MINIMUM, this.PITCH_MAXIMUM); Camera.orientation = Quat.fromPitchYawRollDegrees(cameraAngles.x, cameraAngles.y, cameraAngles.z); var cubeY = Quat.safeEulerAngles(Camera.orientation); cubeY = cubeY.y + 180; Entities.editEntity(this.testCubeID, { position: { x: Camera.position.x, y: Camera.position.y, z: Camera.position.z }, rotation: Camera.orientation }); this.rotation = Vec3.ZERO; }; SpacemouseInput.prototype.destroy = function () { this.mapping.enable(false); // this.mapping.loadMapping("./spacemouse.json"); // this.mapping.enable(true); }; return SpacemouseInput; }()); //# sourceMappingURL=SpacemouseInput.js.map