Skip to main content

Crate vimp_engine_core

Crate vimp_engine_core 

Source
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-делегации в уже generic EngineSim<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-делегации в generic vimp_engine_core::client::game::ClientState<G>, чья сигнатура зафиксирована трейтом GameClientDef независимо от конкретной игры.
export_game_core_abi