Compare commits
2 Commits
e0f5ac9a29
...
4fe86ee723
| Author | SHA1 | Date | |
|---|---|---|---|
| 4fe86ee723 | |||
|
|
86620eee1c |
@ -31,6 +31,18 @@ import GameLoadingScreen from './GameLoadingScreen';
|
||||
// preload выставляет window.__RUBLOX_DESKTOP__.
|
||||
const IS_DESKTOP_APP = typeof window !== 'undefined' && !!window.__RUBLOX_DESKTOP__;
|
||||
|
||||
// В Android-приложении (Capacitor-обёртка rublox-android) WebView уже на весь
|
||||
// экран — браузерный fullscreen не нужен, а стартовый оверлей «Нажми чтобы
|
||||
// играть» избыточен (в браузере он нужен для user-gesture перед FS, в APK
|
||||
// этого барьера не требуется). Capacitor выставляет window.Capacitor.
|
||||
const IS_ANDROID_APP = typeof window !== 'undefined'
|
||||
&& (!!window.Capacitor
|
||||
|| /RubloxAndroid/i.test(navigator.userAgent || ''));
|
||||
|
||||
// Объединённый признак «нативного приложения» (десктоп ИЛИ Android) — там,
|
||||
// где поведение совпадает (не дёргать fullscreen).
|
||||
const IS_NATIVE_APP = IS_DESKTOP_APP || IS_ANDROID_APP;
|
||||
|
||||
// Плеер живёт на player.rublox.pro — он не знает SPA-роутов Майнкрафтии
|
||||
// (/kubikon, /login, /auth). Поэтому вместо navigate(...) делаем
|
||||
// явный window.location.assign на внешний домен.
|
||||
@ -236,7 +248,10 @@ const KubikonPlayer = () => {
|
||||
// ВКЛЮЧИТЬ fullscreen и заблокировать Ctrl+W/Ctrl+T и др. системные
|
||||
// хоткеи. Без этого браузер закрывает вкладку при случайном Ctrl+W.
|
||||
// requestFullscreen() требует user gesture — поэтому без клика никак.
|
||||
const [gameStarted, setGameStarted] = useState(false);
|
||||
// В нативном приложении (Electron/Capacitor) fullscreen не нужен (окно и
|
||||
// так на весь экран), поэтому стартовый оверлей пропускаем — игра
|
||||
// запускается сразу.
|
||||
const [gameStarted, setGameStarted] = useState(IS_NATIVE_APP);
|
||||
const [hp, setHp] = useState({ hp: 100, maxHp: 100 });
|
||||
// Скрипт через game.hud.setVisible(false) полностью скрывает стандартный HUD.
|
||||
const [stdHudVisible, setStdHudVisible] = useState(true);
|
||||
@ -1130,8 +1145,9 @@ const KubikonPlayer = () => {
|
||||
|| root.webkitRequestFullscreen
|
||||
|| root.mozRequestFullScreen
|
||||
|| root.msRequestFullscreen;
|
||||
// В десктоп-приложении окно и так на весь экран — FS не нужен.
|
||||
if (req && !IS_DESKTOP_APP) {
|
||||
// В нативном приложении (Electron/Capacitor) окно и так на весь
|
||||
// экран — FS не нужен.
|
||||
if (req && !IS_NATIVE_APP) {
|
||||
try { await req.call(root); } catch (e) { /* отменено */ }
|
||||
}
|
||||
setMobileStartTapped(true);
|
||||
@ -1139,14 +1155,14 @@ const KubikonPlayer = () => {
|
||||
|
||||
/** Стартовый клик «Начать игру» — запрашивает fullscreen
|
||||
* (Chrome блокирует Ctrl+W/Ctrl+T в fullscreen) и снимает оверлей.
|
||||
* В десктоп-приложении FS не нужен (нет вкладок браузера). */
|
||||
* В нативном приложении (Electron/Capacitor) FS не нужен. */
|
||||
const handleGameStart = useCallback(async () => {
|
||||
const root = document.documentElement;
|
||||
const req = root.requestFullscreen
|
||||
|| root.webkitRequestFullscreen
|
||||
|| root.mozRequestFullScreen
|
||||
|| root.msRequestFullscreen;
|
||||
if (req && !IS_DESKTOP_APP) {
|
||||
if (req && !IS_NATIVE_APP) {
|
||||
try { await req.call(root); } catch (e) { /* юзер запретил — играем без FS */ }
|
||||
}
|
||||
setGameStarted(true);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user