Skip to main content

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}