| 2026-09-09 |
Трек 13: бой — перенос боевой системы v1 на воксельный движок
...
Движок: combat/ — shapes/los/stats/enemies/playerCombat/brain + world.ts
(CombatWorld: хуки вместо EventBus v1, мир — deps-предикаты solid/opaque,
снаряды, трупы, толкучка-сепарация с откатом в стены), StateMachine +
Cooldown, 16 юнит-тестов (217 всего). Боевой юнит = 3 вокселя демки,
конвертация только на границе.
Демка: сгустки-кучки на лугу (спящий — «блин», hurt-вспышка), атака на
Space (конус/резонанс), HUD сердец #hp (скрыт вне игровой сцены), шум
шагов, мост combatSpawn/combatClear/combatInfo/combatStats/attackInput.
Гейт combat.mjs 14 проверок; все 10 гейтов демки зелёные.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
v2 трек 12: сцены — SceneManager (стек, фейд out→in), меню поверх игры в демке
...
core/scene.ts — перенос схемы v1 без привязки к бэкенду: стек
push/pop/replace, переход фазами затухание → смена → проявление
(полный переход 2×duration), FadeOverlay {setAlpha} инъекцией;
параллельные переходы глотаются, enter новой сцены не ожидается,
render рисует весь стек. 10 юнит-тестов.
Демка: gameScene (tick+рендер) внизу стека, menuScene (DOM-панель,
мир под ней) сверху — старт в меню; Esc/мост gotoMenu — автосейв
в слот auto + меню, «Продолжить» грузит auto; мост sceneInfo/
gotoMenu/startGame. Гейт scenes.mjs — 11 проверок (фейд чёрный в
конце out, глотание параллельного перехода, продолжение с сейва).
Гейты демки входят в игру через startGame(false)+60 тиков (полный
переход). Уроки: CSS display:flex перебивает атрибут hidden
(#menu[hidden]{display:none}); полный переход = 48 тиков, не 24.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Инвентарь: контейнер предметов + эффекты диалогов (v2 трек 10)
...
inventory/inventory.ts — перенос Inventory v1 1:1: счётчики по id,
лимиты слотов/стака (возвращают факт, не бросают), onChange с деталями
изменения, serialize/load для сейвов. Демка: сумка героя (maxSlots 8),
DialogueWorld.hasItem связывает условия диалогов с сумкой (выбор
«Отдать цветок» виден только с цветком), onEffect исполняет
giveItem/takeItem (движок эмитит — исполнение игрой), HUD сумки
перерисовывается по событию контейнера. Гейт inventory.mjs — 8 проверок.
147 юнит-тестов.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Диалоги как данные + интерактивные точки (v2 трек 9)
...
Перенос диалоговой архитектуры v1 в ядро v2: граф — данные (узлы/
выборы/условия/эффекты, validateDialogue для агентной валидации),
рантайм DialogueRunner — семантика v1 (текстовый узел ждёт игрока,
узел-действие проваливается сам, do[] только эмитится), отрисовка —
игра (DialogueView). Точки взаимодействия — чистые данные + nearest.
Демка: страж у дома и табличка, клавиша E, HTML-оверлей диалога,
2 графа с эффектами setFlags/setVars и тостами; мост interact/
interactInfo/dialogueOpen/dialogueInfo/dialoguePick/dialogueAdvance.
Гейт dialogue.mjs — 15 проверок (подсказка, панель по зонам кадра,
выборы, эффекты, закрытие). 136 юнит-тестов.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Спайк v2: воксельный рендер — сетка/мешер/AO, three.js-бэкенд, демка и скриншот-гейт
...
- движок: voxel/grid.ts (Uint8-сетка, палитра по индексам), voxel/mesher.ts
(culled-грани + классический AO 0..3 с флипом диагонали, 12 тестов),
render/voxelRenderer.ts (ортокамера диметрии 2:1, dirLight + shadow map,
низкое разрешение 480×270)
- тулзы: tools/agent-lib.mjs — браузерный каркас проверок v2 (swiftshader),
tools/png.mjs — PNG-кодек (в т.ч. RGB-скриншоты headless Chromium)
- демка: apps/demo — воксельный пепельный луг в палитре арт-библии,
мост window.__agent (setSun/stats), чек checks/render.mjs: pageerror,
меш, тени ползут утро/вечер, апскейл кратен 2×2, многокрасочность
- грабли в v2/CLAUDE.md: камера под землёй при минус-Y (ловится только
скриншот-гейтом — урок №2 подтверждён в первый же день)
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|