59 Commits

Author SHA1 Message Date
min
eb6430182b feat(14): Vehicle System V1+V2 — порт в плеер
All checks were successful
CI / Lint (pull_request) Successful in 57s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
CI / Build (pull_request) Successful in 1m34s
CI / Secret scan (pull_request) Successful in 2m30s
CI / PR size check (pull_request) Successful in 7s
Фича-парность со студией (задача 14):
- VehicleManager + VehicleHud (спидометр-стрелка) идентичны студийным.
- game.scene.spawn('vehicle:car'), onVehicleEnter/Exit, hold-F/E, камера follow/V.
- Звук мотора (рокот+LFO), оседание машины на землю (_settle+повторы),
  скрытие водителя, респавн при падении, shadow-caster фильтр (фикс FPS).
- incrementPlay(id, userId) — передаём user_id для cooldown.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 02:25:15 +03:00
min
4ca8cdd9bd Merge pull request 'feat(13): ������� ���� ���� (game.mainMenu)' (#18) from feat/main-menu-task13 into main
All checks were successful
CI / Lint (push) Successful in 59s
CI / Build (push) Successful in 1m35s
CI / Secret scan (push) Successful in 2m31s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Successful in 2m9s
2026-06-02 21:21:53 +00:00
min
b2cff903ba feat(13): главное меню игры (game.mainMenu) — порт в плеер
All checks were successful
CI / Lint (pull_request) Successful in 59s
CI / Build (pull_request) Successful in 1m37s
CI / Secret scan (pull_request) Successful in 2m30s
CI / PR size check (pull_request) Successful in 7s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
Фича-парность со студией: namespace game.mainMenu (show/hide/setCamera/
setPatchNotes/колбэки) + зацикливание облёта через onCutsceneDone +
game.player.setInputBlocked в worker + handler в runtime + passthrough
scene.mainMenu в load. Проверено: меню работает в плеере на игре 2434.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 00:07:47 +03:00
min
dd7688c4d7 Merge pull request 'feat(12): ������������� Loading Screen (game.loading)' (#17) from feat/loading-screen-task12 into main
All checks were successful
CI / Lint (push) Successful in 58s
CI / Build (push) Successful in 1m37s
CI / Secret scan (push) Successful in 2m29s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Successful in 2m9s
2026-06-02 20:10:51 +00:00
min
302db5e1f4 feat(12): внутриигровой Loading Screen (game.loading) — порт в плеер
All checks were successful
CI / Lint (pull_request) Successful in 58s
CI / Build (pull_request) Successful in 1m36s
CI / Secret scan (pull_request) Successful in 2m40s
CI / PR size check (pull_request) Successful in 7s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
Фича-парность со студией: LoadingScreenOverlay.js (DOM-оверлей),
namespace game.loading в worker (хэндл local→real + колбэки через
globalEvent), cmd loading.* + _ensureLoadingScreen в GameRuntime,
class-ref + tick + load конфига в BabylonScene. Проверено: экран
загрузки работает в плеере на тест-игре «Такси-босс» 2427.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 22:00:42 +03:00
min
f420501481 ci: redeploy player на S1 (фикс прав www-data→min на build/)
All checks were successful
CI / Lint (push) Successful in 55s
CI / Build (push) Successful in 1m32s
CI / Secret scan (push) Successful in 2m52s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Successful in 1m53s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 21:03:47 +03:00
min
9e3bc60a76 ci: verify-шаг не валится на недоступном root-мусоре в build/wiki
All checks were successful
CI / Lint (push) Successful in 55s
CI / Build (push) Successful in 1m33s
CI / Secret scan (push) Successful in 2m29s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Successful in 1m52s
du -sh натыкался на systemd-private-* в build/wiki/tmp (Permission
denied) → exit 1 → deploy failure, хотя rsync долетел. Теперь verify
проверяет наличие index.html, а du неблокирующий (2>/dev/null||true).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 20:43:12 +03:00
min
61ac40ab61 Merge pull request 'feat(11): placement mode � ����������� ��������� (tycoon)' (#15) from feat/placement-task11 into main
All checks were successful
CI / Lint (push) Successful in 59s
CI / Build (push) Successful in 1m33s
CI / Secret scan (push) Successful in 2m27s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Successful in 1m55s
2026-06-02 17:24:22 +00:00
min
91af8514c5 fix(11): порт game.format в worker плеера (money/number/time)
All checks were successful
CI / Lint (pull_request) Successful in 55s
CI / Build (pull_request) Successful in 1m29s
CI / Secret scan (pull_request) Successful in 2m30s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
Скрипт «Мой завод» (id 2345) падал в плеере на game.format.money —
неймспейс был только в worker студии. Из-за краха в синхронной части
не доходило до inventoryUi.create/placement → инвентарь не показывался.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 20:09:27 +03:00
min
517545b0cf feat(11): порт placement mode в плеер (фича-парность со студией)
Some checks failed
CI / Lint (pull_request) Successful in 54s
CI / Build (pull_request) Successful in 1m30s
CI / Secret scan (pull_request) Failing after 12s
CI / PR size check (pull_request) Successful in 8s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
PlacementManager + ShopInventoryUi + проводка game.placement.*/inventoryUi.*
в worker/GameRuntime/BabylonScene — опубликованные tycoon-игры с расстановкой
теперь работают в плеере. + TerrainManager backFaceCulling=false (воксели не
просвечивают), cleanup usermodel при Stop, Hotbar скрыт при пустом инвентаре.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 19:06:51 +03:00
af3dd97f97 ci: retry — actions cache полностью очищен
All checks were successful
CI / PR size check (push) Has been skipped
CI / Lint (push) Successful in 2m40s
CI / Build (push) Successful in 3m16s
CI / Secret scan (push) Successful in 3m24s
CI / Deploy to S1 + S2 (push) Successful in 1m50s
2026-06-01 21:18:03 +03:00
37e9f9b2c4 ci: retry after runner restart
Some checks failed
CI / PR size check (push) Has been skipped
CI / Build (push) Failing after 58s
CI / Lint (push) Successful in 1m42s
CI / Secret scan (push) Successful in 2m47s
CI / Deploy to S1 + S2 (push) Has been skipped
2026-06-01 21:10:01 +03:00
32a2fa6137 ci: retry — actions/checkout cache warm-up
Some checks failed
CI / PR size check (push) Has been skipped
CI / Build (push) Failing after 9s
CI / Lint (push) Successful in 58s
CI / Secret scan (push) Successful in 2m34s
CI / Deploy to S1 + S2 (push) Has been skipped
2026-06-01 20:56:52 +03:00
93739e13af ci: redeploy main через CI (Deploy_v2 затёр свежий CI build)
Some checks failed
CI / PR size check (push) Has been skipped
CI / Lint (push) Failing after 18s
CI / Build (push) Failing after 21s
CI / Secret scan (push) Successful in 2m49s
CI / Deploy to S1 + S2 (push) Has been skipped
2026-06-01 20:44:14 +03:00
min
cec58412dc Merge pull request 'feat(09): Studs материал + окрашиваемые блоки + лего-сет' (#13) from feat/studs-material-09 into main
All checks were successful
CI / Deploy to S1 + S2 (push) Successful in 2m34s
CI / Lint (push) Successful in 59s
CI / Build (push) Successful in 1m30s
CI / Secret scan (push) Successful in 2m28s
CI / PR size check (push) Has been skipped
2026-05-31 11:17:41 +00:00
322dd089d9 merge main into feat/studs-material-09
All checks were successful
CI / Lint (pull_request) Successful in 1m1s
CI / Build (pull_request) Successful in 1m34s
CI / Secret scan (pull_request) Successful in 2m31s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
2026-05-31 14:09:39 +03:00
8504549928 fix(09): _recreateMesh studs пересоздаёт материал (паритет со студией)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 13:37:44 +03:00
ae83926a5a feat(09): per-face UV studs + studDensity (паритет со студией)
All checks were successful
CI / Lint (pull_request) Successful in 56s
CI / Build (pull_request) Successful in 1m31s
CI / Secret scan (pull_request) Successful in 2m30s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
faceUV для куба (кружки одного размера на всех гранях) + studDensity
(плотность кружков) — портировано из студии.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 13:26:52 +03:00
d5968f7cb8 feat(09): сочные круглые studs (v4) — паритет со студией
- Текстура studs v4 (круглые, объём+тени, сочный цвет), URL studs_v4_*.
- PrimitiveManager: emissive 45% цвета + новые константы (GRID 4, UNIT 1).
- BlockManager/BlockTypes: studs-block на v4-текстуре, specular убран.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 12:22:03 +03:00
80e546eb08 feat(09): материал studs + studs-block + лего-сет (паритет со студией)
Портирование задачи 09 в плеер:
- PrimitiveManager: material 'studs' (diffuse×color + normal, тайлинг по размеру).
- BlockTypes: studs-block ('Окрашиваемые', colorable).
- BlockManager: per-instance color через ThinInstance color buffer
  (useVertexColors + thinInstanceSetBuffer('color')), addBlock с color,
  _setBlockColorAt/setBlockColor, serialize/load с color.
- GameRuntime: scene.setColor блока + spawn block с color.
- ScriptSandboxWorker: spawn блока прокидывает color.
- ModelTypes: лего-сет 19 compound-моделей (паритет).

Текстуры: public/kubikon-assets/materials/studs_{diffuse,normal}.png.
Проверено: рендер studs-блоков/примитивов/лего-моделей.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 11:11:09 +03:00
min
64de6c3683 Merge pull request 'fix(player): ���� ESC toggle + ����� orbit-������ �� ���' (#12) from fix/player-menu-toggle-camera into main
All checks were successful
CI / Lint (push) Successful in 57s
CI / Build (push) Successful in 1m37s
CI / Secret scan (push) Successful in 2m28s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Successful in 2m33s
2026-05-31 07:15:26 +00:00
acb5b0b133 fix(player): меню ESC — toggle вместо открытия поверх + чинит orbit-камеру по ПКМ
All checks were successful
CI / Build (pull_request) Successful in 1m35s
CI / Secret scan (pull_request) Successful in 2m29s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
CI / Lint (pull_request) Successful in 58s
Два бага меню в плеере:
1. Повторный ESC открывал меню ПОВЕРХ первого (не закрывал).
2. После открытия/закрытия меню переставала работать orbit-камера по
   зажатой ПКМ (игры задачи 2 camera_mouse_controls).

Первопричина: ESC слушали ДВА обработчика — движок (setOnExitRequest →
_onEscMenu) и React (отдельный keydown при topMenuOpen). На одно нажатие
срабатывали оба → гонка: меню дублировалось, а _uiCursorMode застревал в
true, из-за чего onCanvasMouseDownGlobal (if _uiCursorMode return) игнорировал
ПКМ → orbit-камера не включалась.

Фикс — единый источник истины в движке:
- BabylonScene: флаг _playerMenuOpen + toggle в setOnExitRequest (открыто→
  закрыть+setUiCursorMode(false), закрыто→открыть). _onEscMenu(open) передаёт
  состояние в UI. setPlayerMenuOpen(open) — синхронизация при закрытии из UI
  (кнопка «Продолжить»). Сброс флага в enterPlayMode.
- KubikonPlayer: setOnEscMenu((open)=>setTopMenuOpen(open)); УБРАН дублирующий
  React ESC-обработчик; onClose меню → setPlayerMenuOpen(false); синхронизация
  _playerMenuOpen=true в onLockChange (perma) и setOnPlayChange.
- PlayerController.setUiCursorMode(true): сброс _rmbHeld=false (иначе если меню
  открыли при зажатой ПКМ, флаг застревал → orbit «думал» что ПКМ активна).

Проверено: ESC открыл→ESC закрыл (1 меню в DOM), ПКМ-orbit работает после меню.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 09:55:58 +03:00
min
cd31078e6d Merge pull request 'fix(engine): findOne(x).onTouch + findOne �� ������ + ������� Instance-proxy' (#11) from fix/pointer-ontouch-findone into main
All checks were successful
CI / Build (push) Successful in 1m31s
CI / Deploy to S1 + S2 (push) Successful in 2m28s
CI / Lint (push) Successful in 57s
CI / Secret scan (push) Successful in 2m28s
CI / PR size check (push) Has been skipped
2026-05-31 06:53:48 +00:00
256f147568 fix(engine): findOne(x).onTouch + findOne на старте + паритет Instance-proxy
All checks were successful
CI / Lint (pull_request) Successful in 55s
CI / Build (pull_request) Successful in 1m42s
CI / Secret scan (pull_request) Successful in 2m30s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
Портирование фикса из studio (фича-парность движков). Баг: стрелка-указатель
game.fx.pointer не переключалась на следующую цель.

- find/findOne/all раньше возвращали голую строку-ref → .onTouch невозможен.
  Приведены к студийному Instance-proxy (_getOrCreateInstance, coerces в строку
  через Symbol.toPrimitive → обратно совместимо со старым кодом).
- Instance-proxy: + onTouch/onUntouch/onClick → inst.watchTouch{ref}.
  Worker: _instTouchHandlers + маршрут instTouch/instUntouch/instClick;
  _detectSnapshotDeltas для changed/destroying-событий.
- GameRuntime: inst.watchTouch/watchClick → _watchedTouchRefs; routeInstEvent.
- BabylonScene._detectTouchEvents: блок watched-объектов + _refToTarget;
  _touchState.clear() в enterPlayMode.
- Первичный snapshot сцены в init (setInitialScene) → findOne на старте.

Проверено на проде player.rublox.pro/333: стрелка переключается
red-cube→blue-sphere→gold-chest, на финале удаляется.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 08:28:55 +03:00
min
3edc462741 Merge pull request 'chore: redeploy �� S2 (���� ���� build)' (#10) from chore/redeploy-after-perm-fix into main
All checks were successful
CI / Lint (push) Successful in 57s
CI / Build (push) Successful in 1m32s
CI / Secret scan (push) Successful in 2m32s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Successful in 2m32s
2026-05-30 20:08:35 +00:00
60f214ee84 chore: redeploy на S2 после фикса прав /var/www/rublox-player/build (chown min)
All checks were successful
CI / Lint (pull_request) Successful in 58s
CI / Build (pull_request) Successful in 1m33s
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
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 23:01:32 +03:00
min
1534cdfecc Merge pull request 'feat: ���� 3D-�������-��������� � ����� + dev JWT-������' (#9) from feat/arrow-pointer into main
Some checks failed
CI / Lint (push) Successful in 59s
CI / Build (push) Successful in 1m32s
CI / Secret scan (push) Successful in 2m31s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Failing after 2m10s
2026-05-30 19:41:39 +00:00
9c79da4ce5 fix(lint): устранить 8 eslint-ошибок (предсущ., всплыли после починки конфига)
All checks were successful
CI / Lint (pull_request) Successful in 58s
CI / Build (pull_request) Successful in 1m34s
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
- no-dupe-keys: дубль ключа эмодзи '🟧' в Icon.jsx
- no-useless-escape: лишний \- в regex (ticketExchange, EmoteGlbParser)
- no-extra-semi: висячие ; в PreviewSkin-route (auto-fix)
Лок. eslint: 0 errors, 118 warnings (< max-warnings 200).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 22:30:50 +03:00
fe68248b57 ci: S1-деплой не блокирующий (continue-on-error + ConnectTimeout 20с)
Some checks failed
CI / Lint (pull_request) Failing after 56s
CI / Build (pull_request) Successful in 1m36s
CI / Secret scan (pull_request) Successful in 2m28s
CI / PR size check (pull_request) Successful in 7s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
S1 в downtime — деплой не должен валиться, главное доставить на S2.
S1 rsync/verify помечены continue-on-error; S2 остаётся строгим.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 22:20:03 +03:00
1c568728b5 fix(ci): убрать flat eslint.config.js (несовместим с eslint 8.57) — вернуть .eslintrc.json
Some checks failed
CI / Lint (pull_request) Failing after 56s
CI / Build (pull_request) Successful in 1m41s
CI / Secret scan (pull_request) Successful in 2m32s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
CI Lint падал: ERR_MODULE_NOT_FOUND eslint-plugin-react-refresh + flat-config
(defineConfig/configs.flat) — это API eslint 9, а в lock eslint 8.57.1.
У студии (lint=success) рабочая схема — legacy .eslintrc.json. Привёл плеер
к ней: удалён eslint.config.js, .eslintrc.json дополнен правилами движка,
lint-скрипт с --ext .js,.jsx.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 22:13:55 +03:00
70bbd2f7d4 chore: не коммитить .env.production (только .env.example)
Some checks failed
CI / Lint (pull_request) Failing after 41s
CI / Build (pull_request) Successful in 1m32s
CI / Secret scan (pull_request) Successful in 2m31s
CI / PR size check (pull_request) Successful in 7s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:49:59 +03:00
8f0524cbb3 feat: порт 3D-стрелки-указателя в плеер (фича-парность) + dev JWT-панель
- game.fx.pointer + расширенный game.fx.beam: BeamManager (текстуры/curved/
  градиент/quest-marker), ScriptSandboxWorker (_normFxPoint от DataCloneError),
  GameRuntime (fx.createPointer/pointerTarget/pointerUpdate/beamUpdate/
  beamVisible), BabylonScene._activatePointers. 1-в-1 со студией.
- Dev JWT-панель на экране «Нужен JWT» (только localhost): кнопка → инпут →
  localStorage.player_jwt + reload.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:46:24 +03:00
bec3ee830c fix(player): смена скина - манифест объединяет статичный JSON + rublox/avatars (фикс исчезновения скина при setSkin non-humanoid) 2026-05-30 14:06:56 +03:00
f794fbe2d4 fix(player): чат — русская модалка вместо англ. кода при неподтверждённом email
REST-fallback чата при ошибке email_not_confirmed попадал в else-ветку и
показывал сырой код email_not_confirmed (англ). WS-путь уже показывал
русскую модалку EmailConfirmNotice. Добавил ту же ветку в REST-catch:
email_not_confirmed → setEmailNotice(true). Игра 2046 не-мультиплеерная,
чат часто идёт REST-фоллбэком → баг был виден именно там.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:30:37 +03:00
e26f854578 fix(player): меню больше не открывается на отпускание ПКМ (orbit)
React onLockChange в KubikonPlayer считал ЛЮБУЮ потерю pointer-lock за
нажатие ESC и открывал меню. В third отпускание ПКМ (orbit-камера) тоже
снимает lock → меню выскакивало на каждый поворот камеры.

Теперь меню открывается только если lock потерян в perma-режиме
(first/lockfirst/sideview/shiftLock) — там потеря lock = реальный ESC.
В third отпускание ПКМ игнорируется.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:15:09 +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
6a2aeefee5 Merge remote-tracking branch 'origin/main' into feat/sync-engine-week4 2026-05-30 08:28:08 +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
min
64a9d3064d Merge pull request 'feat: синхронизация движка плеера со студией (задачи 01-07)' (#8) from feat/sync-engine-week4 into main
Some checks failed
CI / Lint (push) Failing after 41s
CI / Build (push) Successful in 1m37s
CI / Secret scan (push) Successful in 2m29s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Failing after 4m1s
2026-05-30 00:28:12 +00:00
e61c398eeb Merge remote-tracking branch 'origin/main' into feat/sync-engine-week4
Some checks failed
CI / Lint (pull_request) Failing after 40s
CI / Build (pull_request) Successful in 1m32s
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
2026-05-30 03:22:28 +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
a3455710c0 ci: исключить wiki/ и kubikon-assets/ из rsync deploy (#7)
Some checks failed
CI / PR size check (push) Has been skipped
CI / Lint (push) Failing after 6s
CI / Build (push) Successful in 2m1s
CI / Secret scan (push) Successful in 2m32s
CI / Deploy to S1 + S2 (push) Failing after 1m45s
Co-authored-by: МИН <maksimivankov26@yandex.ru>
Co-committed-by: МИН <maksimivankov26@yandex.ru>
2026-05-29 05:45:01 +00:00
3ec6bd18be ci: убрать sudo в Deploy job (act-runner всегда root) (#6)
Some checks failed
CI / Lint (push) Failing after 43s
CI / Build (push) Successful in 1m34s
CI / Secret scan (push) Successful in 2m31s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Failing after 1m48s
Co-authored-by: МИН <maksimivankov26@yandex.ru>
Co-committed-by: МИН <maksimivankov26@yandex.ru>
2026-05-29 04:49:21 +00:00
90f5a53ad4 ci: убрать lint из needs deploy-job (#5)
Some checks failed
CI / Lint (push) Failing after 43s
CI / Secret scan (push) Successful in 2m38s
CI / Deploy to S1 + S2 (push) Failing after 1m38s
CI / Build (push) Successful in 1m35s
CI / PR size check (push) Has been skipped
Co-authored-by: МИН <maksimivankov26@yandex.ru>
Co-committed-by: МИН <maksimivankov26@yandex.ru>
2026-05-29 04:26:56 +00:00
f2938ee072 ci: add auto-deploy to S1+S2 via rsync after merge (#3)
Some checks failed
CI / Lint (push) Failing after 41s
CI / Build (push) Successful in 1m41s
CI / Secret scan (push) Successful in 2m29s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Has been skipped
Co-authored-by: МИН <maksimivankov26@yandex.ru>
Co-committed-by: МИН <maksimivankov26@yandex.ru>
2026-05-29 01:10:04 +00:00
90134cfd2d fix: sync package-lock.json with package.json (#4)
Some checks failed
CI / Lint (push) Failing after 42s
CI / Build (push) Successful in 1m35s
CI / Secret scan (push) Successful in 2m28s
CI / PR size check (push) Has been skipped
Co-authored-by: МИН <maksimivankov26@yandex.ru>
Co-committed-by: МИН <maksimivankov26@yandex.ru>
2026-05-29 00:34:49 +00:00
7709bd9f74 fix(scripts): fetch-assets ESM + native Windows tar
Some checks failed
CI / Lint (push) Failing after 15s
CI / Build (push) Failing after 12s
CI / Secret scan (push) Successful in 2m26s
CI / PR size check (push) Has been skipped
2026-05-28 15:13:56 +03:00