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