Expand description
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).
Контракт: тип-цель обязан иметь поля state: vimp_engine_core::game::EngineSim<G>
(под именем EngineSim<...>, конкретный G — забота игрового crate) и
packer: vimp_engine_core::snapshot::SnapshotPacker, и раскрываться в
модуле, где уже подключён wasm-bindgen как зависимость (пути ниже
квалифицированы через ::wasm_bindgen, поэтому не зависят от локальных
use, но зависят от наличия крейта в Cargo.toml вызывающей стороны).
new (парсинг игрового конфига) и не-#[wasm_bindgen] тестовые
аксессоры в макрос не входят — остаются рукописными в game-crate.
Constants§
- ABI_
DESCRIBE_ VERSION - Версия формата самоописания (
abi_describe), не контракта плагина. - CORE_
VERSION - Версия крейта движка, с которым собрано ядро. Внутри макроса
env!раскрылся бы в версию крейта ИГРЫ — поэтому константа живёт здесь. - ENGINE_
CLIENT_ OPS - То же для клиентского макроса.
- ENGINE_
GAME_ OPS - Движковые опкоды
dispatch, которые умеет это раскрытие игрового макроса. Список растёт вместе с движком: игра, пересобранная с новым крейтом, получает их без единой правки своего исходника.
Functions§
- describe_
json - JSON самоописания ядра: версия формата, версия движкового крейта и объединённый список опкодов (движковые + объявленные игрой).
- dispatch_
result - Соглашение о возврате
dispatch: пустой вектор — «опкод не обработан» (вызывающий идёт по запасному пути), однобайтовый маркер[0x00]— «обработан, ответа нет».