source2_demo/event/
list.rs1use crate::event::*;
2use crate::HashMap;
3use source2_demo_protobufs::CSvcMsgGameEventList;
4use std::rc::Rc;
5
6#[derive(Default)]
7pub struct GameEventList {
8 pub(crate) list: HashMap<i32, Rc<GameEventDefinition>>,
9}
10
11impl GameEventList {
12 pub(crate) fn new(list: CSvcMsgGameEventList) -> Self {
13 let list = list
14 .descriptors
15 .into_iter()
16 .map(|descriptor| {
17 let keys = descriptor
18 .keys
19 .clone()
20 .into_iter()
21 .enumerate()
22 .map(|(i, key)| {
23 Rc::new(GameEventKey {
24 id: i as i32,
25 name: key.name().into(),
26 })
27 })
28 .collect::<Vec<_>>();
29 let definition = Rc::new(GameEventDefinition {
30 name: descriptor.name().into(),
31 keys: keys.clone(),
32 name_to_key: keys
33 .into_iter()
34 .map(|key| (key.name.clone(), key))
35 .collect(),
36 });
37 (descriptor.eventid(), definition)
38 })
39 .collect::<HashMap<_, _>>();
40
41 Self { list }
42 }
43}