From fe23d099cddcbef97e262c99a1d26851b19bba6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=98=D0=9D?= Date: Sat, 30 May 2026 12:16:37 +0300 Subject: [PATCH] =?UTF-8?q?feat(player):=20hud.setHotbarVisible=20/=20hud.?= =?UTF-8?q?setHpVisible=20(=D0=BF=D0=B0=D1=80=D0=B8=D1=82=D0=B5=D1=82=20?= =?UTF-8?q?=D1=81=D0=BE=20=D1=81=D1=82=D1=83=D0=B4=D0=B8=D0=B5=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Игры со студии (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) --- src/engine/BabylonScene.js | 12 ++++++++++++ src/engine/GameRuntime.js | 8 ++++++++ src/engine/ScriptSandboxWorker.js | 9 +++++++++ 3 files changed, 29 insertions(+) diff --git a/src/engine/BabylonScene.js b/src/engine/BabylonScene.js index 0d3b9a1..0b19b10 100644 --- a/src/engine/BabylonScene.js +++ b/src/engine/BabylonScene.js @@ -5956,6 +5956,18 @@ export class BabylonScene { 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. * Редактор подписан чтобы синхронизировать React-state uiCursorMode (для бейджа). */ setOnCursorModeChange(cb) { diff --git a/src/engine/GameRuntime.js b/src/engine/GameRuntime.js index 92604a4..fc9ccaa 100644 --- a/src/engine/GameRuntime.js +++ b/src/engine/GameRuntime.js @@ -1962,6 +1962,14 @@ export class GameRuntime { } catch (e) {} 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') { try { const mode = payload?.mode === 'ui' ? 'ui' : 'game'; diff --git a/src/engine/ScriptSandboxWorker.js b/src/engine/ScriptSandboxWorker.js index 0ac66fc..91df928 100644 --- a/src/engine/ScriptSandboxWorker.js +++ b/src/engine/ScriptSandboxWorker.js @@ -1910,6 +1910,15 @@ const game = { setVisible(visible) { _send('hud.setVisible', { visible: !!visible }); }, + /** Скрыть/показать только хотбар (5 слотов инвентаря снизу). + * Для игр где инвентарь не нужен (магазин/головоломка/симулятор). */ + setHotbarVisible(visible) { + _send('hud.setHotbarVisible', { visible: !!visible }); + }, + /** Скрыть/показать только HP-индикатор (полоска жизней). */ + setHpVisible(visible) { + _send('hud.setHpVisible', { visible: !!visible }); + }, }, /** * Задача 04: модальные сцены (затемнение + GUI поверх + блок ввода).