vimp_engine_core/events.rs
1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4/// Стандартный словарь событий ядра (Wasm Host ABI) — «топливо» движковой
5/// меты (Panel, RoundManager/Stat, звук/тряска камеры). Сериализуются в JSON
6/// при take_events(). Словарь фиксирован движком; игровой смысл (какое поле
7/// панели, что означает custom-событие) задаёт конфиг/HostPlugin, не ядро.
8#[derive(Clone, Debug, Serialize, Deserialize)]
9#[serde(tag = "type", rename_all = "camelCase")]
10pub enum CoreEvent {
11 /// Новое значение поля панели (Panel.updateUser); `field` — ключ схемы
12 /// панели игры (`"health"`, имя оружия и т.п.).
13 #[serde(rename_all = "camelCase")]
14 PanelSet { id: u32, field: String, value: f64 },
15
16 /// Смена активного поля панели (Panel.setActiveWeapon, ключ `activeKey`).
17 #[serde(rename_all = "camelCase")]
18 PanelActive { id: u32, field: String },
19
20 /// Уничтожение участника (RoundManager.reportKill / Stat).
21 #[serde(rename_all = "camelCase")]
22 Death { victim: u32, killer: u32 },
23
24 /// Тряска камеры у конкретного игрока (per-user мета кадра).
25 #[serde(rename_all = "camelCase")]
26 Shake { id: u32, intensity: f64, duration: f64 },
27
28 /// Игровое событие вне стандартного словаря — маршрутизируется движком
29 /// в `HostPlugin.onCoreEvent`, не интерпретируется ядром/движком.
30 #[serde(rename_all = "camelCase")]
31 Custom { data: Value },
32}