feat(player): hud.setHotbarVisible / hud.setHpVisible (паритет со студией)

Игры со студии (1995/2037/2046) звали game.hud.setHotbarVisible/setHpVisible —
в движке плеера были только hud.setVisible (весь HUD). Без них скрипт падал
на первой строке и игра не работала (нет монет, кнопки не жмутся).

Добавлено во все 3 слоя:
- ScriptSandboxWorker: методы hud.setHotbarVisible/setHpVisible → _send
- GameRuntime: обработчики cmd hud.setHotbarVisible/setHpVisible
- BabylonScene: _setHotbarVisible/_setHpVisible + колбэки видимости

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
МИН 2026-05-30 12:16:37 +03:00
parent 85f8198c7c
commit fe23d099cd
3 changed files with 29 additions and 0 deletions

View File

@ -5956,6 +5956,18 @@ export class BabylonScene {
try { this._onStdHudVisibilityChange?.(this._stdHudVisible); } catch (e) {} try { this._onStdHudVisibilityChange?.(this._stdHudVisible); } catch (e) {}
} }
/** Скрыть/показать только хотбар (5 слотов инвентаря снизу). */
_setHotbarVisible(visible) {
this._hotbarVisible = !!visible;
try { this._onHotbarVisibilityChange?.(this._hotbarVisible); } catch (e) {}
}
/** Скрыть/показать только HP-индикатор (полоска жизней). */
_setHpVisible(visible) {
this._hpVisible = !!visible;
try { this._onHpVisibilityChange?.(this._hpVisible); } catch (e) {}
}
/** Колбэк смены cursor-режима (ui/game) скриптом через game.input.setCursorMode. /** Колбэк смены cursor-режима (ui/game) скриптом через game.input.setCursorMode.
* Редактор подписан чтобы синхронизировать React-state uiCursorMode (для бейджа). */ * Редактор подписан чтобы синхронизировать React-state uiCursorMode (для бейджа). */
setOnCursorModeChange(cb) { setOnCursorModeChange(cb) {

View File

@ -1962,6 +1962,14 @@ export class GameRuntime {
} catch (e) {} } catch (e) {}
return; return;
} }
if (cmd === 'hud.setHotbarVisible') {
try { this.scene3d?._setHotbarVisible?.(!!payload?.visible); } catch (e) {}
return;
}
if (cmd === 'hud.setHpVisible') {
try { this.scene3d?._setHpVisible?.(!!payload?.visible); } catch (e) {}
return;
}
if (cmd === 'input.setCursorMode') { if (cmd === 'input.setCursorMode') {
try { try {
const mode = payload?.mode === 'ui' ? 'ui' : 'game'; const mode = payload?.mode === 'ui' ? 'ui' : 'game';

View File

@ -1910,6 +1910,15 @@ const game = {
setVisible(visible) { setVisible(visible) {
_send('hud.setVisible', { visible: !!visible }); _send('hud.setVisible', { visible: !!visible });
}, },
/** Скрыть/показать только хотбар (5 слотов инвентаря снизу).
* Для игр где инвентарь не нужен (магазин/головоломка/симулятор). */
setHotbarVisible(visible) {
_send('hud.setHotbarVisible', { visible: !!visible });
},
/** Скрыть/показать только HP-индикатор (полоска жизней). */
setHpVisible(visible) {
_send('hud.setHpVisible', { visible: !!visible });
},
}, },
/** /**
* Задача 04: модальные сцены (затемнение + GUI поверх + блок ввода). * Задача 04: модальные сцены (затемнение + GUI поверх + блок ввода).