Merge pull request 'feat(player): �� �������� fullscreen � �������-����������' (#33) from feat/player-desktop-no-fullscreen-2026-06-15 into main
This commit is contained in:
commit
e0f5ac9a29
@ -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 }) {
|
||||
/>
|
||||
|
||||
<SettingsSection title="Экран" />
|
||||
{!IS_DESKTOP_APP && (
|
||||
<ArrowsRow
|
||||
label="Полноэкранный режим"
|
||||
hint="Развернуть игру на весь экран"
|
||||
@ -947,6 +952,7 @@ function TabSettings({ sceneRef }) {
|
||||
} catch (e) { /* ignore */ }
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
<SliderRow
|
||||
label="Качество графики"
|
||||
hint="Разрешение рендера и тени"
|
||||
|
||||
@ -25,6 +25,12 @@ import useDeviceType from '../hooks/useDeviceType';
|
||||
import KubikonMobileControls from './KubikonMobileControls';
|
||||
import GameLoadingScreen from './GameLoadingScreen';
|
||||
|
||||
// В десктоп-приложении (Electron-обёртка rublox-desktop) окно уже на весь
|
||||
// экран без браузерной панели и без вкладок — fullscreen не нужен (раньше он
|
||||
// защищал от случайного Ctrl+W/Ctrl+T в браузере; в Electron этого риска нет).
|
||||
// preload выставляет window.__RUBLOX_DESKTOP__.
|
||||
const IS_DESKTOP_APP = typeof window !== 'undefined' && !!window.__RUBLOX_DESKTOP__;
|
||||
|
||||
// Плеер живёт на player.rublox.pro — он не знает SPA-роутов Майнкрафтии
|
||||
// (/kubikon, /login, /auth). Поэтому вместо navigate(...) делаем
|
||||
// явный window.location.assign на внешний домен.
|
||||
@ -1124,21 +1130,23 @@ const KubikonPlayer = () => {
|
||||
|| 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',
|
||||
}}>
|
||||
{IS_DESKTOP_APP ? (
|
||||
<>Управление: <b>WASD</b> — движение, <b>пробел</b> — прыжок,
|
||||
мышь — камера.</>
|
||||
) : (
|
||||
<>
|
||||
Игра откроется в полноэкранном режиме —
|
||||
это защитит от случайного закрытия вкладки
|
||||
(Ctrl+W, Ctrl+T и др.).
|
||||
<br />
|
||||
Выход: <b>Esc</b> или <b>F11</b>.
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user