overte-thingvellir/scripts/system/controllers/mouseLook.js
Armored Dragon e901cea8ef
Check if setting is enabled.
Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-07-12 16:01:45 -05:00

108 lines
3.2 KiB
JavaScript

//
// 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);
}
})();