wowlab_engine_domain/rotation/buffer/dense/
offsets.rs1use wowlab_types::{
2 combat::ResourceType,
3 sim::{AuraKey, AuraProjectionKey, FastMap, IntMap, SpellIdx},
4};
5
6use crate::rotation::buffer::{ByteOffset, DescriptorId};
7
8#[derive(Clone, Debug)]
9pub(crate) struct SlotMaps<V> {
10 pub(crate) cooldowns: IntMap<SpellIdx, V>,
11 pub(crate) auras: FastMap<AuraKey, V>,
12 pub(crate) aura_projections: FastMap<AuraProjectionKey, V>,
13 pub(crate) resources: FastMap<ResourceType, V>,
14 pub(crate) spells: IntMap<SpellIdx, V>,
15 pub(crate) talents: FastMap<String, V>,
16 pub(crate) hero_trees: FastMap<String, V>,
17 pub(crate) items: FastMap<String, V>,
18 pub(crate) swings: FastMap<String, V>,
19 pub(crate) history: IntMap<SpellIdx, V>,
20 pub(crate) equipment: FastMap<String, V>,
21 pub(crate) set_bonuses: FastMap<String, V>,
22 pub(crate) units: FastMap<String, V>,
23 pub(crate) weapon_imbues: FastMap<String, V>,
24}
25
26impl<V> Default for SlotMaps<V> {
27 fn default() -> Self {
28 Self {
29 cooldowns: IntMap::default(),
30 auras: FastMap::default(),
31 aura_projections: FastMap::default(),
32 resources: FastMap::default(),
33 spells: IntMap::default(),
34 talents: FastMap::default(),
35 hero_trees: FastMap::default(),
36 items: FastMap::default(),
37 swings: FastMap::default(),
38 history: IntMap::default(),
39 equipment: FastMap::default(),
40 set_bonuses: FastMap::default(),
41 units: FastMap::default(),
42 weapon_imbues: FastMap::default(),
43 }
44 }
45}
46
47impl SlotMaps<usize> {
48 pub(crate) fn into_byte_offsets(self) -> SlotMaps<ByteOffset> {
49 fn convert<K, S>(
50 map: std::collections::HashMap<K, usize, S>,
51 ) -> std::collections::HashMap<K, ByteOffset, S>
52 where
53 K: Eq + std::hash::Hash,
54 S: std::hash::BuildHasher + Default,
55 {
56 map.into_iter()
57 .map(|(key, offset)| (key, ByteOffset::new(offset)))
58 .collect()
59 }
60
61 SlotMaps {
62 cooldowns: convert(self.cooldowns),
63 auras: convert(self.auras),
64 aura_projections: convert(self.aura_projections),
65 resources: convert(self.resources),
66 spells: convert(self.spells),
67 talents: convert(self.talents),
68 hero_trees: convert(self.hero_trees),
69 items: convert(self.items),
70 swings: convert(self.swings),
71 history: convert(self.history),
72 equipment: convert(self.equipment),
73 set_bonuses: convert(self.set_bonuses),
74 units: convert(self.units),
75 weapon_imbues: convert(self.weapon_imbues),
76 }
77 }
78}
79
80#[derive(Clone, Debug)]
82pub(crate) struct BufferOffsets {
83 pub(crate) slots: SlotMaps<ByteOffset>,
84 pub(crate) player: ByteOffset,
85 pub(crate) combat: ByteOffset,
86 pub(crate) pet: ByteOffset,
87 pub(crate) standalone: FastMap<DescriptorId, ByteOffset>,
88}