1use serde::{Deserialize, Serialize};
5pub mod state;
6pub use state::*;
7pub mod iterator;
8pub use iterator::*;
9pub mod ability;
10pub use ability::*;
11#[cfg(feature = "dep_arrow")]
12pub mod arrow_store;
13#[cfg(feature = "dep_arrow")]
14pub use arrow_store::*;
15
16#[cfg(feature = "dep_arrow")]
17use arrow_convert::{ArrowDeserialize, ArrowField, ArrowSerialize};
18
19use crate::SC2ReplayFilters;
20
21pub type TUserId = u8;
22pub type GameTUnitTag = u32;
23pub type GameTUnitLink = u16;
24pub type GameTPlayerId = i64;
25pub type GameTMapCoordFixedBits = i64;
26pub type GameTFixedBits = i32;
27pub type GameTAbilLink = u16;
28pub type GameTFixedMiniBitsSigned = i16;
29pub type GameTFixedMiniBitsUnsigned = i64;
30pub type GameTControlGroupId = u8;
31pub type GameTSubgroupIndex = u16;
32pub type GameTSelectionIndex = u16;
33pub type GameTSubgroupPriority = u8;
34pub type GameTSelectionCount = u16;
35pub type GameTSubgroupCount = u16;
36pub type GameTControlGroupIndex = u8;
37pub type GameTControlGroupCount = u8;
38pub type GameTSyncChecksum = u32;
39pub type GameTButtonLink = u16;
40
41#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
42#[cfg_attr(
43 feature = "dep_arrow",
44 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
45)]
46pub struct GameEvent {
47 pub delta: i64,
48 pub user_id: i64,
49 pub event: ReplayGameEvent,
50}
51
52#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
53#[cfg_attr(
54 feature = "dep_arrow",
55 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
56)]
57#[cfg_attr(feature = "dep_arrow", arrow_field(type = "sparse"))]
58pub enum ReplayGameEvent {
59 DropUser(DropUserEvent),
60 CameraSave(CameraSaveEvent),
61 Cmd(GameSCmdEvent),
62 SelectionDelta(GameSSelectionDeltaEvent),
63 ControlGroupUpdate(GameSControlGroupUpdateEvent),
64 SelectionSyncCheck(GameSSelectionSyncCheckEvent),
65 TriggerChatMessage(GameSTriggerChatMessageEvent),
66 UnitClick(GameSUnitClickEvent),
67 UnitHighlight(GameSUnitHighlightEvent),
68 TriggerReplySelected(GameSTriggerReplySelectedEvent),
69 CameraUpdate(CameraUpdateEvent),
70 TriggerMouseClicked(GameSTriggerMouseClickedEvent),
71 TriggerMouseMoved(GameSTriggerMouseMovedEvent),
72 TriggerHotkeyPressed(GameSTriggerHotkeyPressedEvent),
73 TriggerTargetModeUpdate(GameSTriggerTargetModeUpdateEvent),
74 TriggerKeyPressed(GameSTriggerKeyPressedEvent),
75 TriggerMouseWheel(GameSTriggerMouseWheelEvent),
76 TriggerButtonPressed(GameSTriggerButtonPressedEvent),
77 CommandManagerState(GameSCommandManagerStateEvent),
80 CmdUpdateTargetPoint(GameSCmdUpdateTargetPointEvent),
81 CmdUpdateTargetUnit(GameSCmdUpdateTargetUnitEvent),
82 }
85
86impl ReplayGameEvent {
87 pub fn should_skip(&self, _filters: &SC2ReplayFilters) -> bool {
88 false
90 }
91}
92
93#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
94#[cfg_attr(
95 feature = "dep_arrow",
96 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
97)]
98#[cfg_attr(feature = "dep_arrow", arrow_field(type = "sparse"))]
99pub enum ELeaveReason {
100 UserLeft,
101 UserDropped,
102 UserBanned,
103 UserVictory,
104 UserDefeat,
105 UserTied,
106 UserDesynced,
107 UserOutOfTime,
108 WeWereUnresponsive,
109 WeContinuedAlone,
110 ReplayDesynced,
111 UserTimeout,
112 UserDisconnected,
113 Unrecoverable,
114 UserCatchupDesynced,
115 TakeCommandDropped,
116}
117
118#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
119#[cfg_attr(
120 feature = "dep_arrow",
121 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
122)]
123pub struct DropUserEvent {
124 pub m_drop_session_user_id: TUserId,
125 pub m_reason: ELeaveReason,
126}
127
128#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
129#[cfg_attr(
130 feature = "dep_arrow",
131 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
132)]
133pub struct CameraSaveEvent {
134 pub m_which: i64,
135 pub m_target: GameSPointMini,
136}
137
138#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
139#[cfg_attr(
140 feature = "dep_arrow",
141 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
142)]
143pub struct CameraUpdateEvent {
144 pub m_target: Option<GameSPointMini>,
145 pub m_distance: Option<GameTFixedMiniBitsUnsigned>,
146 pub m_pitch: Option<GameTFixedMiniBitsUnsigned>,
147 pub m_yaw: Option<GameTFixedMiniBitsUnsigned>,
148 pub m_reason: Option<i8>,
149 pub m_follow: bool,
150}
151
152#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)]
153#[cfg_attr(
154 feature = "dep_arrow",
155 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
156)]
157pub struct GameSPointMini {
158 pub x: GameTFixedMiniBitsUnsigned,
159 pub y: GameTFixedMiniBitsUnsigned,
160}
161
162#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
163#[cfg_attr(
164 feature = "dep_arrow",
165 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
166)]
167pub struct GameSCmdEvent {
168 pub m_cmd_flags: i64,
169 pub m_abil: Option<GameSCmdAbil>,
170 pub m_data: GameSCmdData,
171 pub m_sequence: i64,
172 pub m_other_unit: Option<GameTUnitTag>,
173 pub m_unit_group: Option<u32>,
174}
175
176#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
177#[cfg_attr(
178 feature = "dep_arrow",
179 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
180)]
181pub struct GameSCmdAbil {
182 pub m_abil_link: GameTAbilLink,
183 pub ability: String,
184 pub m_abil_cmd_index: i64,
185 pub m_abil_cmd_data: Option<u8>,
186}
187
188#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
189#[cfg_attr(
190 feature = "dep_arrow",
191 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
192)]
193#[cfg_attr(feature = "dep_arrow", arrow_field(type = "sparse"))]
194pub enum GameSCmdData {
195 None,
196 TargetPoint(GameSMapCoord3D),
197 TargetUnit(GameSCmdDataTargetUnit),
198 Data(u32),
199}
200
201#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
202#[cfg_attr(
203 feature = "dep_arrow",
204 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
205)]
206pub struct GameSMapCoord3D {
207 pub x: GameTMapCoordFixedBits,
208 pub y: GameTMapCoordFixedBits,
209 pub z: GameTFixedBits,
210}
211
212#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
213#[cfg_attr(
214 feature = "dep_arrow",
215 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
216)]
217pub struct GameSCmdDataTargetUnit {
218 pub m_target_unit_flags: u16,
219 pub m_timer: u8,
220 pub m_tag: GameTUnitTag,
221 pub m_snapshot_unit_link: GameTUnitLink,
222 pub m_snapshot_control_player_id: Option<GameTPlayerId>,
223 pub m_snapshot_upkeep_player_id: Option<GameTPlayerId>,
224 pub m_snapshot_point: GameSMapCoord3D,
225}
226
227#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
228#[cfg_attr(
229 feature = "dep_arrow",
230 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
231)]
232pub struct GameSCmdUpdateTargetPointEvent {
233 pub m_target: GameSMapCoord3D,
234}
235
236#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
237#[cfg_attr(
238 feature = "dep_arrow",
239 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
240)]
241pub struct GameSCmdUpdateTargetUnitEvent {
242 pub m_target: GameSCmdDataTargetUnit,
243}
244#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
245#[cfg_attr(
246 feature = "dep_arrow",
247 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
248)]
249pub struct GameSTriggerMouseClickedEvent {
250 pub m_button: u32,
251 pub m_down: bool,
252 pub m_pos_ui: GameSuiCoord,
253 pub m_pos_world: GameSMapCoord3D,
254 pub m_flags: i8,
255}
256#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
257#[cfg_attr(
258 feature = "dep_arrow",
259 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
260)]
261pub struct GameSTriggerMouseMovedEvent {
262 pub m_pos_ui: GameSuiCoord,
263 pub m_pos_world: GameSMapCoord3D,
264 pub m_flags: i8,
265}
266#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
267#[cfg_attr(
268 feature = "dep_arrow",
269 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
270)]
271pub struct GameSuiCoord {
272 pub x: u16,
273 pub y: u16,
274}
275#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
276#[cfg_attr(
277 feature = "dep_arrow",
278 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
279)]
280pub struct GameSTriggerMouseWheelEvent {
281 pub m_wheel_spin: GameTFixedMiniBitsSigned,
282 pub m_flags: i8,
283}
284
285#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
286#[cfg_attr(
287 feature = "dep_arrow",
288 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
289)]
290pub struct GameSUnitClickEvent {
291 pub m_unit_tag: GameTUnitTag,
292}
293
294#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
295#[cfg_attr(
296 feature = "dep_arrow",
297 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
298)]
299pub struct GameSUnitHighlightEvent {
300 pub m_unit_tag: GameTUnitTag,
301 pub m_flags: u8,
302}
303#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
304#[cfg_attr(
305 feature = "dep_arrow",
306 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
307)]
308pub struct GameSSelectionDeltaEvent {
309 pub m_control_group_id: GameTControlGroupId,
310 pub m_delta: GameSSelectionDelta,
311}
312#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
313#[cfg_attr(
314 feature = "dep_arrow",
315 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
316)]
317pub struct GameSSelectionDelta {
318 pub m_subgroup_index: GameTSubgroupIndex,
319 pub m_remove_mask: GameSSelectionMask,
320 pub m_add_subgroups: Vec<GameSSelectionDeltaSubgroup>,
321 pub m_add_unit_tags: Vec<GameTUnitTag>,
322}
323
324#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
325#[cfg_attr(
326 feature = "dep_arrow",
327 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
328)]
329pub struct GameSSelectionDeltaSubgroup {
330 pub m_unit_link: GameTUnitLink,
331 pub m_subgroup_priority: GameTSubgroupPriority,
332 pub m_intra_subgroup_priority: GameTSubgroupPriority,
333 pub m_count: GameTSelectionCount,
334}
335
336#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
337#[cfg_attr(
338 feature = "dep_arrow",
339 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
340)]
341#[cfg_attr(feature = "dep_arrow", arrow_field(type = "sparse"))]
342pub enum GameSSelectionMask {
343 None,
344 Mask(GameSelectionMaskType),
345 OneIndices(GameSelectionIndexArrayType),
346 ZeroIndices(GameSelectionIndexArrayType),
347}
348
349#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
350#[cfg_attr(
351 feature = "dep_arrow",
352 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
353)]
354pub struct GameSelectionMaskType {
355 pub value: Vec<u8>,
356}
357
358#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
359#[cfg_attr(
360 feature = "dep_arrow",
361 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
362)]
363pub struct GameSelectionIndexArrayType {
364 pub value: Vec<GameTSelectionIndex>,
365}
366
367#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
368#[cfg_attr(
369 feature = "dep_arrow",
370 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
371)]
372pub struct GameSSelectionSyncCheckEvent {
373 pub m_control_group_id: GameTControlGroupId,
374 pub m_selection_sync_data: GameSSelectionSyncData,
375}
376
377#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
378#[cfg_attr(
379 feature = "dep_arrow",
380 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
381)]
382pub struct GameSSelectionSyncData {
383 pub m_count: GameTSelectionCount,
384 pub m_subgroup_count: GameTSubgroupCount,
385 pub m_active_subgroup_index: GameTSubgroupIndex,
386 pub m_unit_tags_checksum: GameTSyncChecksum,
387 pub m_subgroup_indices_checksum: GameTSyncChecksum,
388 pub m_subgroups_checksum: GameTSyncChecksum,
389}
390
391#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
392#[cfg_attr(
393 feature = "dep_arrow",
394 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
395)]
396pub struct GameSControlGroupUpdateEvent {
397 pub m_control_group_index: GameTControlGroupIndex,
398 pub m_control_group_update: GameEControlGroupUpdate,
399 pub m_mask: GameSSelectionMask,
400}
401
402#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
403#[cfg_attr(
404 feature = "dep_arrow",
405 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
406)]
407#[cfg_attr(feature = "dep_arrow", arrow_field(type = "sparse"))]
408pub enum GameEControlGroupUpdate {
409 ESet,
410 EAppend,
411 ERecall,
412 EClear,
413 ESetAndSteal,
414 EAppendAndSteal,
415}
416
417#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
418#[cfg_attr(
419 feature = "dep_arrow",
420 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
421)]
422pub struct GameSTriggerChatMessageEvent {
423 pub m_chat_message: String,
424}
425
426#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
427#[cfg_attr(
428 feature = "dep_arrow",
429 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
430)]
431pub struct GameSTriggerReplySelectedEvent {
432 pub m_conversation_id: i32,
433 pub m_reply_id: i32,
434}
435
436#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
437#[cfg_attr(
438 feature = "dep_arrow",
439 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
440)]
441pub struct GameSTriggerHotkeyPressedEvent {
442 pub m_hotkey: u32,
443 pub m_down: bool,
444}
445
446#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
447#[cfg_attr(
448 feature = "dep_arrow",
449 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
450)]
451pub struct GameSTriggerTargetModeUpdateEvent {
452 pub m_abil_link: GameTAbilLink,
453 pub ability: String,
454 pub m_abil_cmd_index: i64,
455 pub m_state: i8,
456}
457
458#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
459#[cfg_attr(
460 feature = "dep_arrow",
461 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
462)]
463pub struct GameSTriggerKeyPressedEvent {
464 pub m_key: i8,
465 pub m_flags: i8,
466}
467
468#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
469#[cfg_attr(
470 feature = "dep_arrow",
471 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
472)]
473pub struct GameSTriggerButtonPressedEvent {
474 pub m_button: GameTButtonLink,
475}
476
477#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
478#[cfg_attr(
479 feature = "dep_arrow",
480 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
481)]
482pub struct GameSCommandManagerStateEvent {
483 pub m_state: GameECommandManagerState,
484 pub m_sequence: Option<i64>,
485}
486#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
487#[cfg_attr(
488 feature = "dep_arrow",
489 derive(ArrowField, ArrowSerialize, ArrowDeserialize)
490)]
491#[cfg_attr(feature = "dep_arrow", arrow_field(type = "sparse"))]
492pub enum GameECommandManagerState {
493 EFireDone,
494 EFireOnce,
495 EFireMany,
496}