source2_demo/event/
list.rs

1use 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}