fix(player): меню больше не открывается на отпускание ПКМ (orbit)
React onLockChange в KubikonPlayer считал ЛЮБУЮ потерю pointer-lock за нажатие ESC и открывал меню. В third отпускание ПКМ (orbit-камера) тоже снимает lock → меню выскакивало на каждый поворот камеры. Теперь меню открывается только если lock потерян в perma-режиме (first/lockfirst/sideview/shiftLock) — там потеря lock = реальный ESC. В third отпускание ПКМ игнорируется. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
66375e26c8
commit
e26f854578
@ -711,15 +711,25 @@ const KubikonPlayer = () => {
|
||||
const s = sceneRef.current;
|
||||
if (!s || !s._isPlaying) return;
|
||||
const locked = !!document.pointerLockElement;
|
||||
// Lock потерян, мы НЕ в UI-cursor mode → пользователь нажал ESC
|
||||
if (!locked && s.player && !s.player._uiCursorMode) {
|
||||
// Синхронно ставим флаг — listener PlayerController сработает
|
||||
// следующим и увидит true, не вызовет _onExitRequest.
|
||||
s.player._uiCursorMode = true;
|
||||
// Открываем меню в следующий тик (state-update React)
|
||||
if (locked || !s.player || s.player._uiCursorMode) return;
|
||||
// Lock потерян. НЕ всякая потеря = ESC! В third-person отпускание
|
||||
// ПКМ (orbit-камера) тоже снимает lock — это НЕ выход в меню.
|
||||
// Меню открываем ТОЛЬКО если lock был «постоянным» (perma-режим:
|
||||
// first/lockfirst/sideview/shiftLock) — там потеря lock = реальный ESC.
|
||||
const p = s.player;
|
||||
const permaLock = (
|
||||
p._cameraMode === 'first' ||
|
||||
p._cameraMode === 'lockfirst' ||
|
||||
p._cameraMode === 'sideview' ||
|
||||
p._shiftLock
|
||||
);
|
||||
// _rmbHeld был выставлен при входе в lock; если ПКМ отпущена в third —
|
||||
// это orbit-завершение, не меню.
|
||||
if (!permaLock) return;
|
||||
// Реальный ESC в perma-режиме → открываем меню.
|
||||
p._uiCursorMode = true;
|
||||
setChatOpen(false);
|
||||
setTopMenuOpen(true);
|
||||
}
|
||||
};
|
||||
// capture-фаза, чтобы успеть раньше PlayerController
|
||||
document.addEventListener('pointerlockchange', onLockChange, true);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user