tiger_lib/imperator/
modif.rs

1use std::fmt::{Display, Formatter};
2
3use bitflags::bitflags;
4
5use crate::{imperator::tables::modifs::lookup_modif, modif};
6
7bitflags! {
8    // LAST UPDATED IMPERATOR 2.0.4
9    // Taken from the game's `modifers.log`
10    // Remember to update the display_fmt functions when ModifKindsImperator changes.
11    #[derive(Debug, Copy, Clone)]
12    #[rustfmt::skip] // table looks better with cfg on same line
13    pub struct ModifKinds: u32 {
14        const Character      = 1<<0;
15        const Country        = 1<<1;
16        const State          = 1<<2;
17        const Province       = 1<<3;
18        const Unit           = 1<<4;
19        const Legion         = 1<<5;
20        const CountryCulture = 1<<6;
21    }
22}
23
24impl modif::ModifKinds for ModifKinds {
25    fn lookup_modif(
26        name: &crate::Token,
27        data: &crate::Everything,
28        warn: Option<crate::Severity>,
29    ) -> Option<Self> {
30        lookup_modif(name, data, warn)
31    }
32}
33
34impl Display for ModifKinds {
35    fn fmt(&self, f: &mut Formatter) -> Result<(), std::fmt::Error> {
36        let mut vec = Vec::new();
37        if self.contains(ModifKinds::Character) {
38            vec.push("character");
39        }
40        if self.contains(ModifKinds::Country) {
41            vec.push("country");
42        }
43        if self.contains(ModifKinds::Province) {
44            vec.push("province");
45        }
46        if self.contains(ModifKinds::State) {
47            vec.push("state");
48        }
49        if self.contains(ModifKinds::Unit) {
50            vec.push("unit");
51        }
52        if self.contains(ModifKinds::Legion) {
53            vec.push("legion");
54        }
55        if self.contains(ModifKinds::CountryCulture) {
56            vec.push("country culture");
57        }
58        write!(f, "{}", vec.join(", "))
59    }
60}