- name
- build-systems
- description
- Build a feature's ecs system-database — the real-time tick loop (systems the scheduler runs each frame). For real-time features only.
- input
- feature
- output
- feature
Create `ecs/system-database/system-database.ts`: `Database.Plugin.create({ extends:
Database.Plugin.combine(ComputedDatabase.plugin, scheduler), systems })` where the `systems`
map is declared **inline** (see `features/ecs/systems.md` — inline is required for `db` to be
typed and for system-name inference; a `systems/` folder is optional, only for extracted
per-frame body helpers).
- A system is a `SystemDeclaration`: `{ create, schedule?: { before?, after?, during? } }`.
`create(db)` runs once (capture queries / index handles / closures); the returned function
advances the world one tick. Return `void` for an init-only system (seeding entities).
- The step math lives in `data/`; each system reads store rows, calls the pure `data/` step,
writes back — via `db.store` (writable) for hot per-row work, or `db.transactions.*` for
discrete events. Iterate archetypes per `archetypes.md` (tail→head when destroying rows).
- Order under `schedule` (mirror the `data/` step's internal sequence); drive the loop by
combining `scheduler` (rAF), gated by the `schedulerState` resource.
**Only for real-time features** (games, sims) — turn-based features skip this phase entirely.
Comes after `build-computed`. The how is in the auto-loading `features/ecs/systems.md` rule.
View on GitHub