Skip to main content

Module sim

Module sim 

Source
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, т.к. в них нужен произвольный набор движковых ресурсов одновременно.