176 lines · 5.7 KB · JavaScript
RawDownload
"use strict"; // Created by james b. pollack @imgntn on 8/18/2016// Copyright 2016 High Fidelity, Inc.//// advanced movements settings are in individual controller json files// what we do is check the status of the 'advance movement' checkbox when you enter HMD mode// if 'advanced movement' is checked...we give you the defaults that are in the json.// if 'advanced movement' is not checked... we override the advanced controls with basic ones.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html /* jslint bitwise: true */ /* global Script, Quat, MyAvatar, HMD, Controller, Messages*/ (function() { // BEGIN LOCAL_SCOPE     var controllerStandard = Controller.Standard;     var TWO_SECONDS_INTERVAL = 2000;    var FLYING_MAPPING_NAME = 'Hifi-Flying-Dev-' + Math.random();    var DRIVING_MAPPING_NAME = 'Hifi-Driving-Dev-' + Math.random();     var flyingMapping = null;    var drivingMapping = null;     var TURN_RATE = 1000;    var isDisabled = false;     var previousFlyingState = MyAvatar.getFlyingEnabled();    var previousDrivingState = false;     function rotate180() {        var newOrientation = Quat.multiply(MyAvatar.orientation, Quat.angleAxis(180, {            x: 0,            y: 1,            z: 0        }));        MyAvatar.orientation = newOrientation;    }     var inFlipTurn = false;     function registerBasicMapping() {         drivingMapping = Controller.newMapping(DRIVING_MAPPING_NAME);        drivingMapping.from(controllerStandard.LY).to(function(value) {            if (isDisabled) {                return;            }             if (Controller.Hardware.Vive !== undefined) {                if (value > 0.75 && inFlipTurn === false) {                    inFlipTurn = true;                    rotate180();                    Script.setTimeout(function() {                        inFlipTurn = false;                    }, TURN_RATE);                }            } else {                rotate180();            }            return;        });         flyingMapping = Controller.newMapping(FLYING_MAPPING_NAME);        flyingMapping.from(controllerStandard.RY).to(function(value) {            if (isDisabled) {                return;            }             if (Controller.Hardware.Vive !== undefined) {                if (value > 0.75 && inFlipTurn === false) {                    inFlipTurn = true;                    rotate180();                    Script.setTimeout(function() {                        inFlipTurn = false;                    }, TURN_RATE);                }            } else {                rotate180();            }            return;        });    }     function scriptEnding() {        Controller.disableMapping(FLYING_MAPPING_NAME);        Controller.disableMapping(DRIVING_MAPPING_NAME);    }     Script.scriptEnding.connect(scriptEnding);     registerBasicMapping();     Script.setTimeout(function() {        if (MyAvatar.useAdvancedMovementControls) {            Controller.disableMapping(DRIVING_MAPPING_NAME);        } else {            Controller.enableMapping(DRIVING_MAPPING_NAME);        }         if (MyAvatar.getFlyingEnabled()) {            Controller.disableMapping(FLYING_MAPPING_NAME);        } else {            Controller.enableMapping(FLYING_MAPPING_NAME);        }    }, 100);      HMD.displayModeChanged.connect(function(isHMDMode) {        if (isHMDMode) {            if (Controller.Hardware.OpenXR !== undefined || Controller.Hardware.Vive !== undefined || Controller.Hardware.OculusTouch !== undefined) {                if (MyAvatar.useAdvancedMovementControls) {                    Controller.disableMapping(DRIVING_MAPPING_NAME);                } else {                    Controller.enableMapping(DRIVING_MAPPING_NAME);                }                 if (MyAvatar.getFlyingEnabled()) {                    Controller.disableMapping(FLYING_MAPPING_NAME);                } else {                    Controller.enableMapping(FLYING_MAPPING_NAME);                }             }        }    });      function update() {        if ((Controller.Hardware.OpenXR !== undefined || Controller.Hardware.Vive !== undefined || Controller.Hardware.OculusTouch !== undefined) && HMD.active) {            var flying = MyAvatar.getFlyingEnabled();            var driving = MyAvatar.useAdvancedMovementControls;             if (flying !== previousFlyingState) {                if (flying) {                    Controller.disableMapping(FLYING_MAPPING_NAME);                } else {                    Controller.enableMapping(FLYING_MAPPING_NAME);                }                 previousFlyingState = flying;            }             if (driving !== previousDrivingState) {                if (driving) {                    Controller.disableMapping(DRIVING_MAPPING_NAME);                } else {                    Controller.enableMapping(DRIVING_MAPPING_NAME);                }                previousDrivingState = driving;            }        }        Script.setTimeout(update, TWO_SECONDS_INTERVAL);    }     Script.setTimeout(update, TWO_SECONDS_INTERVAL);     var HIFI_ADVANCED_MOVEMENT_DISABLER_CHANNEL = 'Hifi-Advanced-Movement-Disabler';    function handleMessage(channel, message, sender) {        if (channel === HIFI_ADVANCED_MOVEMENT_DISABLER_CHANNEL) {            if (message === 'disable') {                isDisabled = true;            } else if (message === 'enable') {                isDisabled = false;            }        }    }     Messages.subscribe(HIFI_ADVANCED_MOVEMENT_DISABLER_CHANNEL);    Messages.messageReceived.connect(handleMessage); }()); // END LOCAL_SCOPE