Expand description
Граница движковый-цикл ↔ игровая симуляция (Этап 4a.1 плана распила
движка/игры, PLAN.md §3.6). EngineSim<G> (core/src/game.rs) владеет
физическим миром, картой, нав-графом/сеткой ботов, PRNG и очередью
удаления тел; конкретная игра (TanksSim и т.п.) реализует GameSim<G>
и получает доступ к движковому через SimCtx только там, где нужен
шаг тика (on_fixed_step/on_contacts/on_before_destroy/on_ai_tick).
Один wasm-бандл — одна игра: мономорфизация EngineSim<TanksGame> без
динамической диспетчеризации.
Structs§
- SimCtx
- Контекст движкового тика, передаваемый игровым callback’ам.
Traits§
- GameDef
- Связывает конкретную игру с её типом симуляции и конфигом.
Config— игровая половина init-JSON (модели/оружие/панель и т.п.); движковая половина —crate::config::EngineConfig, общая для любой игры. - GameSim
- Игровая симуляция поверх движкового каркаса: участники, оружие,
снапшот-блоки. Игровой конфиг (
G::Config) передаётся только вnew— реализация хранит нужные ей куски сама (модели/оружие не меняются в течение комнаты), поэтому остальные методы им не параметризованы. Методы вне тика получают только то, что им реально нужно (не весьSimCtx), тиковые callback’ы —SimCtx, т.к. в них нужен произвольный набор движковых ресурсов одновременно.