From f77a741428b86a853ff5522ba8f199129f28ae8b Mon Sep 17 00:00:00 2001 From: min Date: Mon, 15 Jun 2026 20:17:27 +0300 Subject: [PATCH] =?UTF-8?q?feat(player):=20=D0=BD=D0=B5=20=D0=B2=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B0=D1=82=D1=8C=20fullscreen=20=D0=B2=20?= =?UTF-8?q?=D0=B4=D0=B5=D1=81=D0=BA=D1=82=D0=BE=D0=BF-=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В Electron-обёртке (rublox-desktop) окно уже на весь экран без браузерной панели и вкладок — fullscreen не нужен (раньше защищал от Ctrl+W/Ctrl+T, в десктопе этого риска нет). По флагу window.__RUBLOX_DESKTOP__ (его ставит preload Electron): - handleGameStart/handleMobileStart не вызывают requestFullscreen; - стартовый текст «Нажми чтобы играть» без упоминания FS (показывает управление WASD); - пункт «Полноэкранный режим» в меню игры скрыт. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/KubikonPlayer/GameMenu.jsx | 6 ++++++ src/KubikonPlayer/KubikonPlayer.jsx | 31 +++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/KubikonPlayer/GameMenu.jsx b/src/KubikonPlayer/GameMenu.jsx index c020e61..d49f287 100644 --- a/src/KubikonPlayer/GameMenu.jsx +++ b/src/KubikonPlayer/GameMenu.jsx @@ -44,6 +44,10 @@ const HUD = { font: '"Inter", system-ui, -apple-system, sans-serif', }; +// В десктоп-приложении (Electron) пункт «Полноэкранный режим» не нужен — +// окно и так на весь экран. preload выставляет window.__RUBLOX_DESKTOP__. +const IS_DESKTOP_APP = typeof window !== 'undefined' && !!window.__RUBLOX_DESKTOP__; + const TABS = [ { id: 'people', icon: 'users', title: 'Участники' }, { id: 'settings', icon: 'settings', title: 'Настройки' }, @@ -931,6 +935,7 @@ function TabSettings({ sceneRef }) { /> + {!IS_DESKTOP_APP && ( + )} { || root.webkitRequestFullscreen || root.mozRequestFullScreen || root.msRequestFullscreen; - if (req) { + // В десктоп-приложении окно и так на весь экран — FS не нужен. + if (req && !IS_DESKTOP_APP) { try { await req.call(root); } catch (e) { /* отменено */ } } setMobileStartTapped(true); }, []); /** Стартовый клик «Начать игру» — запрашивает fullscreen - * (Chrome блокирует Ctrl+W/Ctrl+T в fullscreen) и снимает оверлей. */ + * (Chrome блокирует Ctrl+W/Ctrl+T в fullscreen) и снимает оверлей. + * В десктоп-приложении FS не нужен (нет вкладок браузера). */ const handleGameStart = useCallback(async () => { const root = document.documentElement; const req = root.requestFullscreen || root.webkitRequestFullscreen || root.mozRequestFullScreen || root.msRequestFullscreen; - if (req) { + if (req && !IS_DESKTOP_APP) { try { await req.call(root); } catch (e) { /* юзер запретил — играем без FS */ } } setGameStarted(true); @@ -1286,11 +1294,18 @@ const KubikonPlayer = () => { lineHeight: 1.4, padding: '0 24px', }}> - Игра откроется в полноэкранном режиме — - это защитит от случайного закрытия вкладки - (Ctrl+W, Ctrl+T и др.). -
- Выход: Esc или F11. + {IS_DESKTOP_APP ? ( + <>Управление: WASD — движение, пробел — прыжок, + мышь — камера. + ) : ( + <> + Игра откроется в полноэкранном режиме — + это защитит от случайного закрытия вкладки + (Ctrl+W, Ctrl+T и др.). +
+ Выход: Esc или F11. + + )}