Skip to main content

wowlab_engine_gamedata/game_data/
stores.rs

1//! Cohesive private stores backing resolved game data.
2
3use wowlab_engine_macros::ResolvedStore;
4use wowlab_types::{
5    data::WeaponStats,
6    sim::{EffectRef, FastMap, IntMap, SpellIdx},
7};
8
9use super::{
10    AuraProps, ConsumableSpells, EffectValues, PowerTypeProps, ResolvedCurves, ResolvedGameTables,
11    ResolvedMap, SpellClassFlags, SpellProps, default_aura_props, neutral_spell_props,
12};
13
14#[derive(Debug, ResolvedStore)]
15pub(crate) struct EffectStore {
16    pub(crate) values: FastMap<EffectRef, EffectValues>,
17    #[resolved(neutral = 0)]
18    pub(crate) school_masks: ResolvedMap<SpellIdx, i32>,
19}
20
21#[derive(Debug, ResolvedStore)]
22pub(crate) struct SpellStore {
23    #[resolved(neutral = neutral_spell_props())]
24    pub(crate) props: ResolvedMap<SpellIdx, SpellProps>,
25    #[resolved(neutral = default_aura_props())]
26    pub(crate) aura_props: ResolvedMap<SpellIdx, AuraProps>,
27    #[resolved(neutral = PowerTypeProps::default())]
28    pub(crate) power_types: ResolvedMap<i32, PowerTypeProps>,
29    pub(crate) overrides: IntMap<SpellIdx, SpellIdx>,
30    pub(crate) learns: IntMap<SpellIdx, Vec<SpellIdx>>,
31    pub(crate) labels: IntMap<SpellIdx, Vec<i32>>,
32    pub(crate) class_flags: IntMap<SpellIdx, SpellClassFlags>,
33    pub(crate) specialization: Vec<SpellIdx>,
34}
35
36#[derive(Debug, ResolvedStore)]
37pub(crate) struct PassiveStore {
38    pub(crate) direct_damage_mult: IntMap<SpellIdx, f64>,
39    pub(crate) direct_damage_flat: IntMap<SpellIdx, f64>,
40    pub(crate) direct_damage_flat_mastery: IntMap<SpellIdx, f64>,
41    pub(crate) periodic_damage_mult: IntMap<SpellIdx, f64>,
42    pub(crate) crit_chance_bonus: IntMap<SpellIdx, f64>,
43    pub(crate) crit_chance_mult: IntMap<SpellIdx, f64>,
44    pub(crate) crit_damage_bonus: IntMap<SpellIdx, f64>,
45    pub(crate) crit_damage_per_crit_chance: Vec<(i32, f64)>,
46    pub(crate) crit_bonus_per_crit_chance: IntMap<SpellIdx, f64>,
47    #[resolved(default = 1.0)]
48    pub(crate) auto_attack_damage_mult: f64,
49    #[resolved(default = 1.0)]
50    pub(crate) pet_damage_mult: f64,
51    #[resolved(default = 1.0)]
52    pub(crate) guardian_damage_mult: f64,
53    pub(crate) pet_attack_power_inheritance: IntMap<u32, f64>,
54    pub(crate) pet_spell_power_inheritance: IntMap<u32, f64>,
55    pub(crate) folded_spells: Vec<SpellIdx>,
56    pub(crate) class_target_debuffs: Vec<SpellIdx>,
57}
58
59#[derive(Debug, ResolvedStore)]
60pub(crate) struct EnvironmentStore {
61    pub(crate) armor_constant: f64,
62    pub(crate) creature_armor: f64,
63    #[resolved(default = 1.0)]
64    pub(crate) target_armor_mult: f64,
65    #[resolved(default = 1.0)]
66    pub(crate) armor_constant_mod: f64,
67    pub(crate) main_hand: WeaponStats,
68    pub(crate) off_hand: Option<WeaponStats>,
69    pub(crate) consumables: ConsumableSpells,
70}
71
72#[derive(Debug, Default)]
73pub(crate) struct ScalingStore {
74    pub(crate) curves: ResolvedCurves,
75    pub(crate) game_tables: ResolvedGameTables,
76    pub(crate) level: u32,
77}