mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-08-05 20:58:27 +02:00
Update better-xcloud.user.js
This commit is contained in:
131
dist/better-xcloud.user.js
vendored
131
dist/better-xcloud.user.js
vendored
@@ -3099,6 +3099,9 @@ class NativeMkbHandler extends MkbHandler {
|
|||||||
this.#$message.classList.add("bx-offscreen");
|
this.#$message.classList.add("bx-offscreen");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
#onDialogShown = () => {
|
||||||
|
document.pointerLockElement && document.exitPointerLock();
|
||||||
|
};
|
||||||
#initMessage() {
|
#initMessage() {
|
||||||
if (!this.#$message) {
|
if (!this.#$message) {
|
||||||
this.#$message = CE("div", { class: "bx-mkb-pointer-lock-msg" }, CE("div", {}, CE("p", {}, t("native-mkb")), CE("p", {}, t("press-key-to-toggle-mkb", { key: "F8" }))), CE("div", { "data-type": "native" }, createButton({
|
this.#$message = CE("div", { class: "bx-mkb-pointer-lock-msg" }, CE("div", {}, CE("p", {}, t("native-mkb")), CE("p", {}, t("press-key-to-toggle-mkb", { key: "F8" }))), CE("div", { "data-type": "native" }, createButton({
|
||||||
@@ -3127,6 +3130,7 @@ class NativeMkbHandler extends MkbHandler {
|
|||||||
this.#pointerClient = PointerClient.getInstance();
|
this.#pointerClient = PointerClient.getInstance();
|
||||||
this.#connected = false;
|
this.#connected = false;
|
||||||
this.#inputSink = window.BX_EXPOSED.inputSink;
|
this.#inputSink = window.BX_EXPOSED.inputSink;
|
||||||
|
this.#updateInputConfigurationAsync(false);
|
||||||
try {
|
try {
|
||||||
this.#pointerClient.start(this);
|
this.#pointerClient.start(this);
|
||||||
this.#connected = true;
|
this.#connected = true;
|
||||||
@@ -3134,6 +3138,7 @@ class NativeMkbHandler extends MkbHandler {
|
|||||||
Toast.show("Cannot enable Mouse & Keyboard feature");
|
Toast.show("Cannot enable Mouse & Keyboard feature");
|
||||||
}
|
}
|
||||||
window.addEventListener("keyup", this.#onKeyboardEvent.bind(this));
|
window.addEventListener("keyup", this.#onKeyboardEvent.bind(this));
|
||||||
|
window.addEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.#onDialogShown.bind(this));
|
||||||
window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this.#onPointerLockRequested.bind(this));
|
window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this.#onPointerLockRequested.bind(this));
|
||||||
window.addEventListener(BxEvent.POINTER_LOCK_EXITED, this.#onPointerLockExited.bind(this));
|
window.addEventListener(BxEvent.POINTER_LOCK_EXITED, this.#onPointerLockExited.bind(this));
|
||||||
window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
||||||
@@ -3153,32 +3158,30 @@ class NativeMkbHandler extends MkbHandler {
|
|||||||
setEnable = !this.#enabled;
|
setEnable = !this.#enabled;
|
||||||
}
|
}
|
||||||
if (setEnable) {
|
if (setEnable) {
|
||||||
document.body.requestPointerLock();
|
document.documentElement.requestPointerLock();
|
||||||
Toast.show(t("native-mkb"), t("enabled"), { instant: true });
|
|
||||||
} else {
|
} else {
|
||||||
document.exitPointerLock();
|
document.exitPointerLock();
|
||||||
Toast.show(t("native-mkb"), t("disabled"), { instant: true });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#updateInputConfigurationAsync(enabled) {
|
||||||
|
window.BX_EXPOSED.streamSession.updateInputConfigurationAsync({
|
||||||
|
enableKeyboardInput: enabled,
|
||||||
|
enableMouseInput: enabled,
|
||||||
|
enableTouchInput: false
|
||||||
|
});
|
||||||
|
}
|
||||||
start() {
|
start() {
|
||||||
this.#resetMouseInput();
|
this.#resetMouseInput();
|
||||||
this.#enabled = true;
|
this.#enabled = true;
|
||||||
window.BX_EXPOSED.streamSession.updateInputConfigurationAsync({
|
this.#updateInputConfigurationAsync(true);
|
||||||
enableKeyboardInput: true,
|
|
||||||
enableMouseInput: true,
|
|
||||||
enableTouchInput: false
|
|
||||||
});
|
|
||||||
window.BX_EXPOSED.stopTakRendering = true;
|
window.BX_EXPOSED.stopTakRendering = true;
|
||||||
this.#$message?.classList.add("bx-gone");
|
this.#$message?.classList.add("bx-gone");
|
||||||
|
Toast.show(t("native-mkb"), t("enabled"), { instant: true });
|
||||||
}
|
}
|
||||||
stop() {
|
stop() {
|
||||||
this.#resetMouseInput();
|
this.#resetMouseInput();
|
||||||
this.#enabled = false;
|
this.#enabled = false;
|
||||||
window.BX_EXPOSED.streamSession.updateInputConfigurationAsync({
|
this.#updateInputConfigurationAsync(false);
|
||||||
enableKeyboardInput: false,
|
|
||||||
enableMouseInput: false,
|
|
||||||
enableTouchInput: false
|
|
||||||
});
|
|
||||||
this.#$message?.classList.remove("bx-gone");
|
this.#$message?.classList.remove("bx-gone");
|
||||||
}
|
}
|
||||||
destroy() {
|
destroy() {
|
||||||
@@ -3186,6 +3189,7 @@ class NativeMkbHandler extends MkbHandler {
|
|||||||
window.removeEventListener(BxEvent.POINTER_LOCK_REQUESTED, this.#onPointerLockRequested);
|
window.removeEventListener(BxEvent.POINTER_LOCK_REQUESTED, this.#onPointerLockRequested);
|
||||||
window.removeEventListener(BxEvent.POINTER_LOCK_EXITED, this.#onPointerLockExited);
|
window.removeEventListener(BxEvent.POINTER_LOCK_EXITED, this.#onPointerLockExited);
|
||||||
window.removeEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
window.removeEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
||||||
|
window.removeEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.#onDialogShown);
|
||||||
this.#$message?.classList.add("bx-gone");
|
this.#$message?.classList.add("bx-gone");
|
||||||
this.#connected && this.#pointerClient?.stop();
|
this.#connected && this.#pointerClient?.stop();
|
||||||
}
|
}
|
||||||
@@ -3272,13 +3276,6 @@ class WebSocketMouseDataProvider extends MouseDataProvider {
|
|||||||
destroy() {
|
destroy() {
|
||||||
this.#connected && this.#pointerClient?.stop();
|
this.#connected && this.#pointerClient?.stop();
|
||||||
}
|
}
|
||||||
toggle(enabled) {
|
|
||||||
if (!this.#connected) {
|
|
||||||
enabled = false;
|
|
||||||
}
|
|
||||||
enabled ? this.mkbHandler.start() : this.mkbHandler.stop();
|
|
||||||
this.mkbHandler.waitForMouseData(!enabled);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class PointerLockMouseDataProvider extends MouseDataProvider {
|
class PointerLockMouseDataProvider extends MouseDataProvider {
|
||||||
@@ -3286,13 +3283,8 @@ class PointerLockMouseDataProvider extends MouseDataProvider {
|
|||||||
super(...arguments);
|
super(...arguments);
|
||||||
}
|
}
|
||||||
init() {
|
init() {
|
||||||
document.addEventListener("pointerlockchange", this.#onPointerLockChange);
|
|
||||||
document.addEventListener("pointerlockerror", this.#onPointerLockError);
|
|
||||||
}
|
}
|
||||||
start() {
|
start() {
|
||||||
if (!document.pointerLockElement) {
|
|
||||||
document.body.requestPointerLock();
|
|
||||||
}
|
|
||||||
window.addEventListener("mousemove", this.#onMouseMoveEvent);
|
window.addEventListener("mousemove", this.#onMouseMoveEvent);
|
||||||
window.addEventListener("mousedown", this.#onMouseEvent);
|
window.addEventListener("mousedown", this.#onMouseEvent);
|
||||||
window.addEventListener("mouseup", this.#onMouseEvent);
|
window.addEventListener("mouseup", this.#onMouseEvent);
|
||||||
@@ -3308,22 +3300,7 @@ class PointerLockMouseDataProvider extends MouseDataProvider {
|
|||||||
window.removeEventListener("contextmenu", this.#disableContextMenu);
|
window.removeEventListener("contextmenu", this.#disableContextMenu);
|
||||||
}
|
}
|
||||||
destroy() {
|
destroy() {
|
||||||
document.removeEventListener("pointerlockchange", this.#onPointerLockChange);
|
|
||||||
document.removeEventListener("pointerlockerror", this.#onPointerLockError);
|
|
||||||
}
|
}
|
||||||
toggle(enabled) {
|
|
||||||
enabled ? this.mkbHandler.start() : this.mkbHandler.stop();
|
|
||||||
this.mkbHandler.waitForMouseData(!enabled);
|
|
||||||
}
|
|
||||||
#onPointerLockChange = () => {
|
|
||||||
if (this.mkbHandler.isEnabled() && !document.pointerLockElement) {
|
|
||||||
this.mkbHandler.stop();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#onPointerLockError = (e) => {
|
|
||||||
console.log(e);
|
|
||||||
this.stop();
|
|
||||||
};
|
|
||||||
#onMouseMoveEvent = (e) => {
|
#onMouseMoveEvent = (e) => {
|
||||||
this.mkbHandler.handleMouseMove({
|
this.mkbHandler.handleMouseMove({
|
||||||
movementX: e.movementX,
|
movementX: e.movementX,
|
||||||
@@ -3575,8 +3552,11 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
} else {
|
} else {
|
||||||
this.#enabled = !this.#enabled;
|
this.#enabled = !this.#enabled;
|
||||||
}
|
}
|
||||||
Toast.show(t("virtual-controller"), t(this.#enabled ? "enabled" : "disabled"), { instant: true });
|
if (this.#enabled) {
|
||||||
this.#mouseDataProvider?.toggle(this.#enabled);
|
document.body.requestPointerLock();
|
||||||
|
} else {
|
||||||
|
document.pointerLockElement && document.exitPointerLock();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
#getCurrentPreset = () => {
|
#getCurrentPreset = () => {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
@@ -3606,6 +3586,9 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
this.#$message.classList.add("bx-offscreen");
|
this.#$message.classList.add("bx-offscreen");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
#onDialogShown = () => {
|
||||||
|
document.pointerLockElement && document.exitPointerLock();
|
||||||
|
};
|
||||||
#initMessage = () => {
|
#initMessage = () => {
|
||||||
if (!this.#$message) {
|
if (!this.#$message) {
|
||||||
this.#$message = CE("div", { class: "bx-mkb-pointer-lock-msg bx-gone" }, CE("div", {}, CE("p", {}, t("virtual-controller")), CE("p", {}, t("press-key-to-toggle-mkb", { key: "F8" }))), CE("div", { "data-type": "virtual" }, createButton({
|
this.#$message = CE("div", { class: "bx-mkb-pointer-lock-msg bx-gone" }, CE("div", {}, CE("p", {}, t("virtual-controller")), CE("p", {}, t("press-key-to-toggle-mkb", { key: "F8" }))), CE("div", { "data-type": "virtual" }, createButton({
|
||||||
@@ -3614,7 +3597,7 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
onClick: ((e) => {
|
onClick: ((e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
this.start();
|
this.toggle(true);
|
||||||
}).bind(this)
|
}).bind(this)
|
||||||
}), CE("div", {}, createButton({
|
}), CE("div", {}, createButton({
|
||||||
label: t("ignore"),
|
label: t("ignore"),
|
||||||
@@ -3639,6 +3622,23 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
document.documentElement.appendChild(this.#$message);
|
document.documentElement.appendChild(this.#$message);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
#onPointerLockChange = () => {
|
||||||
|
if (document.pointerLockElement) {
|
||||||
|
this.start();
|
||||||
|
} else {
|
||||||
|
this.stop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#onPointerLockError = (e) => {
|
||||||
|
console.log(e);
|
||||||
|
this.stop();
|
||||||
|
};
|
||||||
|
#onPointerLockRequested = () => {
|
||||||
|
this.start();
|
||||||
|
};
|
||||||
|
#onPointerLockExited = () => {
|
||||||
|
this.#mouseDataProvider?.stop();
|
||||||
|
};
|
||||||
init = () => {
|
init = () => {
|
||||||
this.refreshPresetData();
|
this.refreshPresetData();
|
||||||
this.#enabled = false;
|
this.#enabled = false;
|
||||||
@@ -3651,6 +3651,14 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
window.addEventListener("keydown", this.#onKeyboardEvent);
|
window.addEventListener("keydown", this.#onKeyboardEvent);
|
||||||
window.addEventListener("keyup", this.#onKeyboardEvent);
|
window.addEventListener("keyup", this.#onKeyboardEvent);
|
||||||
window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
||||||
|
window.addEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.#onDialogShown);
|
||||||
|
if (AppInterface) {
|
||||||
|
window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this.#onPointerLockRequested.bind(this));
|
||||||
|
window.addEventListener(BxEvent.POINTER_LOCK_EXITED, this.#onPointerLockExited.bind(this));
|
||||||
|
} else {
|
||||||
|
document.addEventListener("pointerlockchange", this.#onPointerLockChange);
|
||||||
|
document.addEventListener("pointerlockerror", this.#onPointerLockError);
|
||||||
|
}
|
||||||
this.#initMessage();
|
this.#initMessage();
|
||||||
this.#$message?.classList.add("bx-gone");
|
this.#$message?.classList.add("bx-gone");
|
||||||
if (AppInterface) {
|
if (AppInterface) {
|
||||||
@@ -3668,6 +3676,15 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
document.pointerLockElement && document.exitPointerLock();
|
document.pointerLockElement && document.exitPointerLock();
|
||||||
window.removeEventListener("keydown", this.#onKeyboardEvent);
|
window.removeEventListener("keydown", this.#onKeyboardEvent);
|
||||||
window.removeEventListener("keyup", this.#onKeyboardEvent);
|
window.removeEventListener("keyup", this.#onKeyboardEvent);
|
||||||
|
if (AppInterface) {
|
||||||
|
window.removeEventListener(BxEvent.POINTER_LOCK_REQUESTED, this.#onPointerLockRequested.bind(this));
|
||||||
|
window.removeEventListener(BxEvent.POINTER_LOCK_EXITED, this.#onPointerLockExited.bind(this));
|
||||||
|
} else {
|
||||||
|
document.removeEventListener("pointerlockchange", this.#onPointerLockChange);
|
||||||
|
document.removeEventListener("pointerlockerror", this.#onPointerLockError);
|
||||||
|
}
|
||||||
|
window.removeEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
||||||
|
window.removeEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.#onDialogShown);
|
||||||
this.#mouseDataProvider?.destroy();
|
this.#mouseDataProvider?.destroy();
|
||||||
window.removeEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
window.removeEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.#onPollingModeChanged);
|
||||||
};
|
};
|
||||||
@@ -3689,19 +3706,22 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
gamepad: virtualGamepad
|
gamepad: virtualGamepad
|
||||||
});
|
});
|
||||||
window.BX_EXPOSED.stopTakRendering = true;
|
window.BX_EXPOSED.stopTakRendering = true;
|
||||||
|
Toast.show(t("virtual-controller"), t("enabled"), { instant: true });
|
||||||
};
|
};
|
||||||
stop = () => {
|
stop = () => {
|
||||||
this.#enabled = false;
|
this.#enabled = false;
|
||||||
this.#isPolling = false;
|
this.#isPolling = false;
|
||||||
this.#escKeyDownTime = -1;
|
this.#escKeyDownTime = -1;
|
||||||
this.#resetGamepad();
|
|
||||||
const virtualGamepad = this.#getVirtualGamepad();
|
const virtualGamepad = this.#getVirtualGamepad();
|
||||||
virtualGamepad.connected = false;
|
if (virtualGamepad.connected) {
|
||||||
virtualGamepad.timestamp = performance.now();
|
this.#resetGamepad();
|
||||||
BxEvent.dispatch(window, "gamepaddisconnected", {
|
virtualGamepad.connected = false;
|
||||||
gamepad: virtualGamepad
|
virtualGamepad.timestamp = performance.now();
|
||||||
});
|
BxEvent.dispatch(window, "gamepaddisconnected", {
|
||||||
window.navigator.getGamepads = this.#nativeGetGamepads;
|
gamepad: virtualGamepad
|
||||||
|
});
|
||||||
|
window.navigator.getGamepads = this.#nativeGetGamepads;
|
||||||
|
}
|
||||||
this.waitForMouseData(true);
|
this.waitForMouseData(true);
|
||||||
this.#mouseDataProvider?.stop();
|
this.#mouseDataProvider?.stop();
|
||||||
};
|
};
|
||||||
@@ -9097,13 +9117,22 @@ function patchPointerLockApi() {
|
|||||||
HTMLElement.prototype.requestFullscreen = function(options) {
|
HTMLElement.prototype.requestFullscreen = function(options) {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
};
|
};
|
||||||
|
let pointerLockElement = null;
|
||||||
|
Object.defineProperty(document, "pointerLockElement", {
|
||||||
|
configurable: true,
|
||||||
|
get() {
|
||||||
|
return pointerLockElement;
|
||||||
|
}
|
||||||
|
});
|
||||||
const nativeRequestPointerLock = HTMLElement.prototype.requestPointerLock;
|
const nativeRequestPointerLock = HTMLElement.prototype.requestPointerLock;
|
||||||
HTMLElement.prototype.requestPointerLock = function() {
|
HTMLElement.prototype.requestPointerLock = function() {
|
||||||
|
pointerLockElement = document.documentElement;
|
||||||
window.dispatchEvent(new Event(BxEvent.POINTER_LOCK_REQUESTED));
|
window.dispatchEvent(new Event(BxEvent.POINTER_LOCK_REQUESTED));
|
||||||
nativeRequestPointerLock.apply(this, arguments);
|
nativeRequestPointerLock.apply(this, arguments);
|
||||||
};
|
};
|
||||||
const nativeExitPointerLock = Document.prototype.exitPointerLock;
|
const nativeExitPointerLock = Document.prototype.exitPointerLock;
|
||||||
Document.prototype.exitPointerLock = function() {
|
Document.prototype.exitPointerLock = function() {
|
||||||
|
pointerLockElement = null;
|
||||||
window.dispatchEvent(new Event(BxEvent.POINTER_LOCK_EXITED));
|
window.dispatchEvent(new Event(BxEvent.POINTER_LOCK_EXITED));
|
||||||
nativeExitPointerLock.apply(this);
|
nativeExitPointerLock.apply(this);
|
||||||
};
|
};
|
||||||
@@ -9371,7 +9400,7 @@ var main = function() {
|
|||||||
interceptHttpRequests();
|
interceptHttpRequests();
|
||||||
patchVideoApi();
|
patchVideoApi();
|
||||||
patchCanvasContext();
|
patchCanvasContext();
|
||||||
getPref(PrefKey.NATIVE_MKB_ENABLED) === "on" && patchPointerLockApi();
|
AppInterface && patchPointerLockApi();
|
||||||
getPref(PrefKey.AUDIO_ENABLE_VOLUME_CONTROL) && patchAudioContext();
|
getPref(PrefKey.AUDIO_ENABLE_VOLUME_CONTROL) && patchAudioContext();
|
||||||
getPref(PrefKey.BLOCK_TRACKING) && patchMeControl();
|
getPref(PrefKey.BLOCK_TRACKING) && patchMeControl();
|
||||||
STATES.hasTouchSupport && TouchController.updateCustomList();
|
STATES.hasTouchSupport && TouchController.updateCustomList();
|
||||||
|
Reference in New Issue
Block a user