108 lines · 3.2 KB · JavaScript
RawDownload
//// mouseLook.js//// By Armored Dragon (June 6). Refactored from Rampa3 & Vegaslon work//  Copyright 2024 Overte e.V.////// Distributed under the Apache License, Version 2.0.// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// (() => {    // States ----    let mouseLookActive = Settings.getValue("mouselook-active", false);    let mouseLookEnabled = Camera.getMouseLook();    let hmdActive = HMD.active;    let overlayActive = Desktop.isOverlayWindowFocused();     // Resources ----    let tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");     // Events ----    Camera.mouseLookChanged.connect(onMouseLookChanged);    Controller.keyPressEvent.connect(onKeyPressEvent);    Desktop.uiFocusChanged.connect(onUiFocusChanged);    HMD.displayModeChanged.connect(onDisplayModeChanged);    MyAvatar.wentActive.connect(onWentActive);    MyAvatar.wentAway.connect(onWentAway);    tablet.tabletShownChanged.connect(onTabletShownChanged);    Script.scriptEnding.connect(onScriptEnding);     // Program ----    function onMouseLookChanged(newMouseLook) {        disableMouseLook();        mouseLookEnabled = newMouseLook;    }     function onKeyPressEvent(event) {        // Toggle using the m key        if (event.text.toLowerCase() === "m") {            if (Camera.captureMouse) {                disableMouseLook();            } else {                mouseLookActive = true;                Settings.setValue("mouselook-active", true);                enableMouseLook();            }        }    }     function onTabletShownChanged() {        if (tablet.tabletShown) disableMouseLook();        else enableMouseLook();    }     function onWentAway() {        disableMouseLook();    }     function onWentActive() {        enableMouseLook();    }     function onDisplayModeChanged() {        hmdActive = HMD.active;        if (hmdActive) disableMouseLook();        else enableMouseLook();    }     function onUiFocusChanged(keyFocus) {        if (keyFocus) {            overlayActive = true;            disableMouseLook();        } else {            overlayActive = false;            enableMouseLook();        }    }     function enableMouseLook() {        if (hmdActive) return;        if (tablet.tabletShown) return;        if (overlayActive) return;        if (!mouseLookEnabled) return; // Mouse look disabled via setting        if (!mouseLookActive) return; // Mouse look disabled via the hotkey         Camera.captureMouse = true;    }     function disableMouseLook() {        mouseLookActive = false;        Settings.setValue("mouselook-active", false);         Camera.captureMouse = false;    }     function onScriptEnding() {        Camera.captureMouse = false;        Camera.mouseLookChanged.disconnect(onMouseLookChanged);        Controller.keyPressEvent.disconnect(onKeyPressEvent);        tablet.tabletShownChanged.disconnect(onTabletShownChanged);        MyAvatar.wentAway.disconnect(onWentAway);        MyAvatar.wentActive.disconnect(onWentActive);        HMD.displayModeChanged.disconnect(onDisplayModeChanged);        Desktop.uiFocusChanged.disconnect(onUiFocusChanged);        Script.scriptEnding.disconnect(onScriptEnding);    }})();