Expand description
VIMP — движковый каркас симуляции (Этап 4b распила движка/игры,
PLAN.md §2-3). Физика/карта/снапшот-фрейминг/интерполяция/предикт-примитивы/
raycast/нав-утилиты — общие для любой игры; sim::{GameDef, GameSim, SimCtx} — граница, через которую конкретная игра (game-crate, cdylib с
wasm-bindgen-обёртками GameCore/ClientCore) подключает свою логику.
Эта библиотека — rlib без wasm-bindgen: игровой crate раскрывает
#[wasm_bindgen] рядом со своими типами (wasm-bindgen не умеет
экспортировать generics), engine-crate от wasm-bindgen не зависит вовсе.
Modules§
- abi
export_game_core_abi!— генерирует#[wasm_bindgen] implдля игровогоGameCore, снимая ~25-метод boilerplate, зафиксированный §3.4 PLAN.md. Все методы ниже — механические 1:1-делегации в уже genericEngineSim<G>/SnapshotPacker, чья сигнатура зафиксирована трейтомcrate::sim::GameSim<G>независимо от конкретной игры — не дизайн под гипотетическую вторую игру, а извлечение уже существующего соответствия (см. PLAN_4_details.md §5).- client
- Движковые клиентские примитивы: snapshot-интерполяция (schema-driven),
бинарный декодер кадра v3 (framing), 2D raycast, примитивы столкновений
(SAT-контакты + импульсный решатель) и generic-оркестрация
рендер-тика (
game::ClientState<G>) поверх игровой предикт-логики (game::GameClientDef, реализует конкретная игра — см. games/tanks/core/src/client/mod.rs). - config
- debug
- Курированный дамп мира для отладки (
plan/done/ai-debug/stage_4.md).EngineSim::serialize_stateуже умеет дампить всё — но в сыром serde-формате rapier, который нечитаем ни человеком, ни нейросетью. Здесь — второй, отдельный дамп: только то, по чему диагностируют «танк в стене», «снаряд без коллайдера», «бот не видит нав-граф». - events
- game
- map
- nav
- physics
- rng
- sim
- Граница движковый-цикл ↔ игровая симуляция (Этап 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>без динамической диспетчеризации. - snapshot
Macros§
- export_
client_ core_ abi export_client_core_abi!— генерирует#[wasm_bindgen] implдля клиентскогоClientCore, зеркальноexport_game_core_abi!(см. выше). Методы ниже — движковый минимум (§3.4 PLAN.md): 1:1-делегации в genericvimp_engine_core::client::game::ClientState<G>, чья сигнатура зафиксирована трейтомGameClientDefнезависимо от конкретной игры.- export_
game_ core_ abi