v2 трек 8: каркас ядра + герой (управление, камера следит)
- core/loop.ts: GameLoop — фиксированный шаг 60 Гц, аккумулятор с
  maxStepsPerFrame, ручной режим setManual+stepTick (детерминизм гейтов),
  now/schedule инъектируются для Node-тестов
- core/ecs.ts: EntityWorld — перенос проверенной минимальной ECS v1
  (открытый вопрос «каркас ядра» решён)
- core/controls.ts: ввод как данные; screenMoveToWorld — экранные оси
  в мировую горизонталь по yaw камеры (проекция на границе, урок №1)
- physics/character.ts: Character — тело физики + walk от скорости
  (фаза = путь/stride, стопы не скользят; покой замирает); spawnY для
  спавна в воздухе; мост тела физики переехал на Character (один путь)
- render: setTarget/currentTarget — камера (и солнце) следит за целью
- Демка: герой на WASD/стрелках + виртуальный стик агента; мост
  setInput/heroInfo/heroTeleport/stepTicks/setManual/setFollow
- Гейт hero.mjs 9 проверок: ввод агента двигает героя, фаза 1.25
  цикла/с, стена по грани, покой замирает, камера следует

115 юнит-тестов; гейты: render 13, turntable 5, anim 8, physics 7,
hero 9 — зелёные.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent f48c1a6 commit 01a1509a48f127489e70ac3047cee6ed241fe1f5
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 2 days ago
Showing 15 changed files
View
docs/plan.md
View
v2/CLAUDE.md
View
v2/apps/demo/src/main.ts
View
v2/apps/demo/tools/checks/hero.mjs 0 → 100644
View
v2/apps/demo/tools/checks/physics.mjs
View
v2/packages/engine/src/core/__tests__/controls.test.ts 0 → 100644
View
v2/packages/engine/src/core/__tests__/ecs.test.ts 0 → 100644
View
v2/packages/engine/src/core/__tests__/loop.test.ts 0 → 100644
View
v2/packages/engine/src/core/controls.ts 0 → 100644
View
v2/packages/engine/src/core/ecs.ts 0 → 100644
View
v2/packages/engine/src/core/loop.ts 0 → 100644
View
v2/packages/engine/src/index.ts
View
v2/packages/engine/src/physics/__tests__/character.test.ts 0 → 100644
View
v2/packages/engine/src/physics/character.ts 0 → 100644
View
v2/packages/engine/src/render/voxelRenderer.ts