diff options
Diffstat (limited to 'src/statistics/gamedata.rs')
-rw-r--r-- | src/statistics/gamedata.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/statistics/gamedata.rs b/src/statistics/gamedata.rs new file mode 100644 index 0000000..d7f0e0e --- /dev/null +++ b/src/statistics/gamedata.rs @@ -0,0 +1,38 @@ +//! This module contains some game data that is necessary to correctly calculate +//! some statistics. +use super::boon::{BoonQueue, BoonType}; + +/// Contains a boon. +/// +/// Fields: +/// * boon id +/// * name (english) (just for easier debugging) +/// * maximum number of stacks +/// * boon type (intensity or duration) +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Boon(pub u16, pub &'static str, pub u32, pub BoonType); + +impl Boon { + pub fn create_queue(&self) -> BoonQueue { + BoonQueue::new(self.2, self.3) + } +} + +/// A list of all boons (and conditions) +pub static BOONS: &[Boon] = &[ + // Standard boons. + // Queue size for duration based boons are wonky, more or less guess work. + Boon(717, "Protection", 5, BoonType::Duration), + Boon(718, "Regeneration", 5, BoonType::Duration), + Boon(719, "Swiftness", 5, BoonType::Duration), + Boon(725, "Fury", 5, BoonType::Duration), + Boon(726, "Vigor", 5, BoonType::Duration), + Boon(740, "Might", 25, BoonType::Intensity), + Boon(743, "Aegis", 5, BoonType::Duration), + Boon(1187, "Quickness", 5, BoonType::Duration), + Boon(30328, "Alacrity", 9, BoonType::Duration), +]; + +pub fn get_boon(boon_id: u16) -> Option<&'static Boon> { + BOONS.iter().find(|b| b.0 == boon_id) +} |