mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
108 lines
3.2 KiB
JavaScript
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);
|
|
}
|
|
})();
|