| 2026-09-07 |
chore: ESLint (typescript-eslint, flat config) + npm run lint в check:fast
...
- eslint.config.js: recommended TS для src обоих пакетов + тулз; node/браузерные
глобали для .mjs-сценариев и редактора диалогов; no-undef выключен в TS
(глобали DOM/Vite проверяет tsc).
- Попутные находки (8): no-useless-assignment в waitFor-агентах (catch опирается
на init false), тернарник-выражение в StateMachine, причина ошибки в
AssetLoader ({ cause }), неиспользуемые consoleLogs/JSON_SPACE, let->const,
as const в тесте квестов.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
12 hours ago
|
| 2026-09-06 |
Фабрика тестовых фикстур + fail-fast предикатов waitFor
...
- testing/ (только для *.test.ts, в бандл не попадает):
combatWorld.ts (fakeMap/fakeWorld/run/far), gameState.ts (fakeState),
maps.ts (mapWithWall). EnemyAI/los/Interactables тесты переведены —
бойлерплейт фейковых карт/стейтов выведен из трёх файлов.
- GameAgent.waitFor: top-level обращения s.<ключ> сверяются с
AGENT_SNAPSHOT_KEYS до компиляции предиката; неизвестный ключ ->
{ ok: false, error: 'неизвестный ключ s.X', ticks: 0 } — опечатка
больше не тихий false на весь таймаут. predKeys — чистая функция,
тестируется в snapshot.test.ts.
- Список ключей: ENGINE_SNAPSHOT_KEYS (движок) + сценические + слой игры;
анти-дрейф тесты держат список согласованным со слоями снапшота.
Проверки: typecheck, 307 тестов (+6), agent check 45/45 (ни один чек
валидация не отторгла), smoke-act1. Доки: agent.md (поведение waitFor),
practices.md (проверка сценариев).
Co-Authored-By: Claude Code <noreply@anthropic.com>
|

Батч 4: ИИ врагов (LOS, шум, патруль, настороженность, отступление)
...
- los.ts: линия видимости по сетке (дискретизация 0.25 юнита), тайлы с
tall-объектами непрозрачны; кэш LOS раз в 3 тика в EnemySystem.
- EnemyBrain: состояния patrol/wary/flee/return поверх существующего цикла;
расширенные сенсоры (pos, canSee, noise, patrolPoints, home, hpFraction);
бег при отступлении (run в EnemyIntent.move); warySec-таймер.
- CombatWorld.noise(pos, level): шаги героя 0.35, удар конусом 1.0, плевок и
смерть 0.6; спящих будит только уровень >= 0.7, бодрых слышат от 0.35 в
hearRadius (окно слышимости 0.5 с).
- Патруль — per-spawn (AREAS[*].enemies patrol {points, pauseSec}): тяжеловес
и плевун на лугах бродят по маршрутам, ползуны спят в пепле как раньше.
- Поля ИИ в EnemyKindDef + withDefaults; инварианты enemy-state-legal и
enemy-in-bounds; команды scene:noise и scene:damageEnemy.
- Сценарий tools/checks/ai.mjs (7 проверок) в agent check; 14 новых юнит-
тестов (EnemyAI) + 6 (los); доки: agent.md, practices.md, demo.md.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
| 2026-09-05 |
Фаза 3: мир игры в мировых юнитах
...
PlayerController, CombatWorld, EnemyBrain, CombatViews и LocationScene
переведены с виртуальных пикселей на мировые юниты (1 юнит = 1 тайл):
- позиции/дистанции/скорости в юнитах (герой 1.75 юн/с, скорости и
радиусы врагов, knockback 0.75, INTERACT_RANGE 1.5);
- конус/окружности через inConeW/inCircleW (метрика проекции);
- вью-позиции — через worldToScreen, округление до px только на границе;
- гистерезис дистанции плевуна ±0.4 юнита, attackStop 0.85 юнита;
- тесты EnemyBrain/stats обновлены под юниты (185/185).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
игра: бой в реальном времени — сгустки на ECS, конус/резонанс, HUD, интеграция в LocationScene
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|