9 Commits

Author SHA1 Message Date
bec3ee830c fix(player): смена скина - манифест объединяет статичный JSON + rublox/avatars (фикс исчезновения скина при setSkin non-humanoid) 2026-05-30 14:06:56 +03:00
66375e26c8 fix(player): управление камерой 02 как в студии + фикс рандомного меню
Привёл _setupInput/onPointerLockChange к рабочей студийной реализации:
- onCanvasMouseDownGlobal/onWindowMouseUpGlobal — ПКМ-orbit с проверкой
  needPermLock() (как в студии), вместо самодельных onRmbDown/onRmbUp.
- onPointerLockChange: при потере lock выход из Play (меню) ТОЛЬКО если
  needPermLock (first/lockfirst/sideview/shiftLock). В third потеря lock =
  отпустили ПКМ → остаёмся в Play. Это убирает рандомное открытие меню.
- onCanvasClick лочит только в perma-режимах.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:45:06 +03:00
7b869c83bd fix(player): клик по 3D-табличкам в third-person (свободный курсор)
_handlePlayClick пикал билборд из ЦЕНТРА экрана (w/2,h/2) — верно только при
pointer-lock. В third курсор свободен, юзер кликает мышью НЕ в центре →
pick промахивался, кнопки табличек не нажимались (Ферма 1981 и др).

Фикс: onMouseDown передаёт реальные canvas-координаты клика в
_handlePlayClick(clickX,clickY); при locked — центр, иначе — точка клика.
Добавлен console.log [billboard] для диагностики попадания.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:32:34 +03:00
fe23d099cd 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>
2026-05-30 12:16:37 +03:00
85f8198c7c fix(player): порядок чтения скина + управление камерой 02 + авто-меню
1. Стартовый скин не ставился: блок чтения scene.skins/playerModelType стоял
   НИЖЕ предзагрузки модели и enterPlayMode. Перенёс ВЫШЕ — теперь
   PlayerController при старте видит корректный _playerModelType.
2. Меню открывалось каждые ~4с: onPointerLockChange звал _onExitRequest при
   любой потере lock. В third/front потеря lock = отпустили ПКМ (orbit), это
   НЕ выход. Меню (Esc) только из perma-режимов (first/lockfirst/sideview/
   shift-lock).
3. Управление 02: start() лочит только в perma-режимах; onCanvasClick не лочит
   в third (курсор свободен для GUI/3D-табличек); ПКМ-orbit (onRmbDown/Up);
   onWheel авто-переход third<->first; _isPermaLockMode/_applyCursorVisibility.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 09:17:19 +03:00
2afd6a287a fix(player): кнопки 3D-табличек + управление камерой как в Roblox (задачи 01, 02)
Задача 01 — billboard-клик не работал: _handlePlayClick не проверял кнопки
табличек. Добавил pick по billboard-мешу из центра экрана → pickButtonAt →
fireClick (BabylonScene._handlePlayClick).

Задача 02 — управление было старым (всегда pointer-lock, ПКМ не работал):
- start(): lock только в perma-режимах (first/lockfirst/sideview/shift-lock),
  в third курсор виден свободно
- onCanvasClick: не лочит в third (курсор для GUI/3D-табличек)
- ПКМ-orbit: зажал ПКМ в third → lock+вращение, отпустил → курсор вернулся
- onWheel: авто-переход third↔first при зуме (порог 0.7), экспоненциальный шаг
- onPointerLockChange: отпускание ПКМ в third НЕ выходит из Play (раньше выходило)
- _applyCursorVisibility / _isPermaLockMode хелперы

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 08:27:59 +03:00
a46829c5f7 feat: синхронизация движка плеера со студией (задачи 01-07)
Some checks failed
CI / Lint (pull_request) Failing after 42s
CI / Build (pull_request) Successful in 1m30s
CI / Secret scan (pull_request) Successful in 2m28s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
Плеер отстал на несколько задач — игры из студии не открывались с механиками.
Перенёс из rublox-studio в движок плеера:

Новые файлы движка:
- engine/ModalManager.js (задача 04 — модальные сцены)
- engine/BillboardUiManager.js (задача 01 — 3D-таблички)

Точечный перенос в существующие файлы:
- ScriptSandboxWorker.js: namespace game.modal/billboard/environment, скины в
  game.player, game.gui.tween, _guiHandlerKeys(localId), события
  modalOpened/modalClosed/skinChanged/billboardClick
- GameRuntime.js: команды modal.*/billboard.*/player.setSkin.*/gui.tween +
  _broadcastSkinsSnapshot/_ensureSkinState + routeGlobalEvent с localId
- PlayerController.js: non-humanoid скины (loadNonHumanoid+reloadSkin+
  процедурная анимация+pivot-центрирование), setInputBlocked/focusOnTarget,
  камера задачи 02 (zoom/shift-lock), клавиша B (магазин)
- BabylonScene.js: init modalManager/billboardUiManager, методы магазина скинов,
  чтение scene.skins, modalManager.tick, Esc-приоритет
- ScriptSandbox.js: sendSkinsSnapshot
- GuiManager.js: поля анимаций задачи 03 (синхронизирован со студией)
- PrimitiveTypes.js / PrimitiveManager.js: тип billboard + рендер

React-слой (editor-shared):
- ModalOverlay.jsx, SkinShopOverlay.jsx (новые) + подключены в KubikonPlayer
- GuiOverlay.jsx, GameHud.jsx синхронизированы со студией

eslint.config: послабления стилевых правил (no-empty off и т.п.).

Локальный build зелёный.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 03:15:43 +03:00
6d86aa7c36 docs: переводы оставшихся английских комментариев на русский
- src/api/API.js — комменты, описание env
- vite.config.js — описание полей
- src/App.jsx — IndexRoute (текст «Плеер Рублокса»)
- src/KubikonPlayer/KubikonPlayer.jsx — exitPlayer
- src/engine/PlayerController.js — _storysApiUrl
- src/engine/GameRuntime.js — _resolveExternalUrl
- src/engine/devlog.js — убрал упоминания приватных путей разработчика
- src/fixtures/sample-game.json — title/description
2026-05-27 23:18:38 +03:00
87444ee2c8 Initial public release: Rublox Player v1.0
Open-source web player for Rublox games, dual-licensed under
AGPL-3.0 + Commercial.

Highlights:
- Babylon.js 7 + React 18 + Vite 5 stack
- Self-contained engine (~46k lines): BlockManager, ModelManager,
  PlayerController, ScriptSandboxWorker, MultiplayerSync, 30+ GD
  gamemodes
- Configurable backend via VITE_API_BASE and friends — works against
  staging (dev-api.rublox.pro) out of the box
- Standalone mode (VITE_STANDALONE=true) loads a bundled sample game
  for first-run without any backend
- Full docs: README, ARCHITECTURE, CONTRIBUTING, SECURITY, CHANGELOG
- Lint + format scaffolding (ESLint + Prettier + EditorConfig)
- Legal: LICENSE (AGPL-3.0), LICENSE-COMMERCIAL.md, CLA.md, COPYRIGHT.md
- Issue templates: bug_report, feature_request, security_disclosure

Removed before public release:
- frontend_deploy.py (contained production SSH credentials)
- ~27 admin endpoints (kept in private repo)
- Hard-coded internal URLs and IPs
- All previous git history (clean repo init)
2026-05-27 23:04:04 +03:00