4b5c8077d3
feat(quantik-game): фаза 0 — слой целей в движке (goal/HUD/result) Декларативный блок goal в спеке SimForge (булево SimExpr-условие победы), вычисляемый каждый кадр: фиксация результата (победа/время/попытки/звёзды), callback onGoal, HUD-оверлей (цель/звёзды/подсказка/баннер, inline SVG). API инстанса: onGoal/getResult/resetResult. Серверный validateSpec пропускает goal/game (длина выражений + escape текста, без исполнения). Аддитивно: спека без goal ведёт себя как раньше. Смоук 40/40; npm test 238 pass/8 baseline; lint:routes 0. План фичи (7 фаз) + CONTEXT. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> @
49 lines
4.0 KiB
Markdown
49 lines
4.0 KiB
Markdown
# Phase 4: Квантовые способности + SR-комнаты
|
|
|
|
**Status:** ⬜ Not Started
|
|
**Parent plan:** [PLAN.md](./PLAN.md)
|
|
**Domain:** fullstack
|
|
|
|
## Objective
|
|
Фирменные «квантовые» механики, дающие герою идентичность, плюс связка с флешкарт-SR:
|
|
**суперпозиция** (раздвоение), **коллапс/пауза** (точный прицел), **туннелирование**
|
|
(проход сквозь тонкую стену за «энергию», которую даёт быстрое SR-повторение).
|
|
|
|
## Tasks
|
|
- [ ] Task 1: Суперпозиция: уровень с двумя телами-копиями Квантика; общий «закон» (params) рулит
|
|
обеими; цель — обе достигают порталов/условий (`goal.when` ссылается на оба `<id>.x/.y`).
|
|
Реюз существующей мульти-body физики. Визуал — две glow-точки (полупрозрачные «фантомы»).
|
|
- [ ] Task 2: Коллапс/пауза-прицел: на паузе показать предсказанную траекторию (`plot trace`/
|
|
пунктир) текущего закона до запуска — «прицеливание». Реюз предпросмотра старта (P1/P2).
|
|
- [ ] Task 3: Туннелирование: «энергетический заряд» расходуется, чтобы пройти сквозь помеченную
|
|
`tunnelable:true` стену (стена временно проницаема). Энергия в HUD.
|
|
- [ ] Task 4: SR-комната: перед/в уровне — мини-сессия повторения флешкарт (реюз Tier-1 SR API,
|
|
мигр.074). Правильные ответы дают «энергию туннелирования». Открыть существующий движок
|
|
повторения в модалке/панели игры; начислять заряды по результату.
|
|
- [ ] Task 5: Контент: 2–3 уровня под каждую способность (обучающий + применение).
|
|
- [ ] Task 6: Тесты: суперпозиция (оба тела в `goal`), расход/начисление энергии (чистая логика),
|
|
проницаемость стены при заряде; смоук.
|
|
|
|
## Files to Modify/Create
|
|
- `frontend/js/labs/_sim_engine.js` — поле `tunnelable` у стены + расход энергии (аддитивно, документировать).
|
|
- `frontend/js/game/quantik-game.js` — способности, HUD энергии, SR-комната-модалка.
|
|
- интеграция с флешкарт-SR (клиентский модуль повторения / `LS` API).
|
|
- `frontend/js/game/levels.js` — уровни способностей.
|
|
- тест(ы).
|
|
|
|
## Acceptance Criteria
|
|
- Суперпозиция: победа только когда обе копии выполнили условие.
|
|
- Коллапс: на паузе виден предсказанный путь.
|
|
- Туннелирование тратит энергию; SR-повторение её пополняет; стена проницаема только при заряде.
|
|
- Без eval/эмодзи; existing симуляции/SR не сломаны; тесты зелёные; lint baseline 0.
|
|
|
|
## Notes
|
|
- Имя param `e` зарезервировано (число Эйлера в SimExpr) — для энергии брать `energy`/`charge`.
|
|
- SR-движок повторения уже существует — переиспользовать, не дублировать расписание.
|
|
|
|
## Review Checklist
|
|
- [ ] Все задачи; аддитивность; без эмодзи/eval; тесты зелёные; lint baseline 0
|
|
|
|
## Handoff to Next Phase
|
|
<!-- Заполняет агент-имплементер. -->
|