M5-M7: сцены, лобби, экран игры и цикл матча

Обе сцены собраны через Code Mode, не руками.

- loader: поднимает модули, прогревает арт карт, уходит в lobby
- lobby: обе UI-ветки в одной сцене (по ARCHITECTURE.md), матч — это
  смена видимого корня, а не загрузка сцены
- GameScreen рисует текущее состояние и доводит узлы твинами, а не
  проигрывает поток событий: узел карты живёт вместе со своей картой,
  поэтому "шестёрка ушла из руки на стол" не требует отдельного случая
- один тап = ход целиком; логика вынесена в core/rules/intent.ts
  и покрыта тестами, в том числе проверкой, что она никогда не предложит
  ход, который правила отвергнут
- арт карт переехал в assets/resources: .pac — это инструкция упаковки
  на сборке, а не рантайм-ассет, и без ссылок на кадры в сборку
  не попадало ничего. Теперь все 37 спрайтов в одной текстуре 2048x2048
- клики кнопок подписываются в коде, а не через clickEvents сцены
- строки интерфейса собраны в одном файле

Сборка web-mobile проходит чисто, все ссылки в сцене проверены.
Вживую не запускалось: браузер в этом окружении не поднимает
главный цикл движка. Подробности — в docs/TECHNICAL.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
ftc
2026-09-13 11:30:28 +03:00
co-authored by Claude Opus 5
parent 2056673946
commit 4f3a26dc45
111 changed files with 8168 additions and 37 deletions
+40 -22
View File
@@ -63,32 +63,50 @@ progress. The Cocos layer only renders state and turns taps into actions.
- [x] Import into `assets/art/`, configure sprite frames and atlasing
- [x] Remove consumed source art from `local/`, record attribution/licence
### M5 — Scenes and bootstrap `[ ]`
- [ ] `loader` scene: module initialisation, then transition to `lobby`
- [ ] `lobby` scene: New Game button, statistics readout
- [ ] Canvas / resolution policy and a reusable safe-area-aware layout root
### M5 — Scenes and bootstrap `[x]`
- [x] `loader` scene: module initialisation, then transition to `lobby`
- [x] `lobby` scene: New Game button, statistics readout
- [x] Canvas / resolution policy and a reusable safe-area-aware layout root
### M6 — Game screen `[ ]`
- [ ] `Card` prefab, face/back flipping, sizing
- [ ] Hand layout (fan), table layout (attack/defence pairs), deck and trump display
- [ ] Deal, attack, defend, take and discard animations driven by core events
- [ ] Tap/drag input producing core actions; illegal moves visibly rejected
- [ ] Bot acts with human-readable pacing
### M6 — Game screen `[x]`
- [x] `Card` prefab, face/back flipping, sizing
- [x] Hand layout (fan), table layout (attack/defence pairs), deck and trump display
- [x] Deal, attack, defend, take and discard animations driven by core events
- [x] Tap/drag input producing core actions; illegal moves visibly rejected
- [x] Bot acts with human-readable pacing
### M7 — Match flow `[ ]`
- [ ] Result overlay (win / lose), stats written through the savegame module
- [ ] Return to lobby; start another match without a scene leak
- [ ] Optional: surrender / leave match
### M7 — Match flow `[x]`
- [x] Result overlay (win / lose), stats written through the savegame module
- [x] Return to lobby; start another match without a scene leak
- [x] Leave-match button, which ends the match as a loss
### M8 — Responsive and touch pass `[ ]`
- [ ] Verify layout from 4:3 to 21:9, portrait
- [ ] All interactive elements meet a minimum tap size
- [ ] Editor preview screenshots at the extreme aspect ratios
### M8 — Responsive and touch pass `[~]`
- [x] Fit-width canvas, safe-area root, widget-stretched background
- [x] Every interactive element authored at or above the 120-unit minimum
(buttons 330×140 and 560×150; hand cards expose ~128 units each)
- [x] Vertical positions kept inside the 4:3 crop
- [ ] **Blocked:** seen at the extreme aspect ratios. Needs a machine that can
actually run the build — see "What is and is not verified" in
[TECHNICAL.md](TECHNICAL.md)
### M9 — Build verification and hand-off `[ ]`
- [ ] Web-mobile build runs end to end
- [ ] Android/iOS build settings documented (ASTC per ART.md)
- [ ] README / TECHNICAL.md final pass
### M9 — Build verification and hand-off `[~]`
- [x] `web-mobile` build completes clean; command recorded in TECHNICAL.md
- [x] Card art reaches the build and packs into a single 2048² atlas
- [x] Every component reference in the scene verified populated
- [ ] **Blocked:** the build seen running. The browser in this environment falls
back to a software renderer that cannot start the engine's main loop
- [ ] Android/iOS build settings (ASTC per ART.md)
- [ ] README
### Known follow-ups
- The default skybox cubemap (~1.1 MB) still reaches the build. `skybox.enabled`
is off in both scenes, but the scene keeps its `_envmapHDR` reference and the
builder follows it. The editor tool server cannot write a null reference;
clearing the field in the Inspector by hand would do it.
- Nothing verifies the presentation layer automatically. The obvious next step is
a smoke test that boots the scene headlessly and asserts the card nodes land
where the layout says they should.
## Deliberately out of scope for iteration 1