|
feat(engine): диалоговые эффекты do[] + onEffect и результат onFinish
- DialogueEffectOp (giveItem/takeItem/sound/toast/custom) — эффекты как
данные в графе; движок только эмитит через onEffect(op, at), исполнение
— EffectSink игры. Никаких Inventory в движке.
- DialogueHooks { world, resolve } третьим аргументом конструктора +
setHooks (заменяет параметр world из D1).
- DialogueResult { lastNodeId, path, picks }: путь показанных узлов и
выборы игрока; onFinish(graph, result), result читается и после конца.
- Порядок эффектов: setFlags → clearFlags → setVars → do[].
- Тесты: порядок onEffect у узла/выбора, unknown kind не падает,
path/result/перезапуск; доки ui-and-dialogue.md + practices.md.
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
|---|
|
|
| docs/engine/practices.md |
|---|
| docs/engine/ui-and-dialogue.md |
|---|
| packages/engine/src/dialogue/DialogueRunner.ts |
|---|
| packages/engine/src/dialogue/__tests__/DialogueRunner.test.ts |
|---|
| packages/engine/src/index.ts |
|---|