tiger_lib/ck3/tables/
datafunctions.rs

1use std::sync::LazyLock;
2
3use crate::datatype::{Arg, Args, CaseInsensitiveStr, Ck3Datatype, Datatype};
4use crate::helpers::{BiTigerHashMap, TigerHashMap, TigerHashSet};
5use crate::item::Item;
6use crate::scopes::Scopes;
7
8use Arg::*;
9use Ck3Datatype::*;
10use Datatype::*;
11
12pub static LOWERCASE_DATATYPE_SET: LazyLock<TigerHashSet<CaseInsensitiveStr>> =
13    LazyLock::new(|| {
14        let mut set = TigerHashSet::default();
15
16        for (name, _, _) in GLOBAL_PROMOTES.iter().copied() {
17            set.insert(CaseInsensitiveStr(name));
18        }
19
20        for (name, _, _) in GLOBAL_FUNCTIONS.iter().copied() {
21            set.insert(CaseInsensitiveStr(name));
22        }
23
24        for (name, _, _, _) in PROMOTES.iter().copied() {
25            set.insert(CaseInsensitiveStr(name));
26        }
27
28        for (name, _, _, _) in FUNCTIONS.iter().copied() {
29            set.insert(CaseInsensitiveStr(name));
30        }
31        set
32    });
33
34pub static DATATYPE_AND_SCOPE_MAP: LazyLock<BiTigerHashMap<Datatype, Scopes>> =
35    LazyLock::new(|| {
36        let mut map = BiTigerHashMap::default();
37        for (datatype, scope) in DATATYPE_AND_SCOPE.iter().copied() {
38            map.insert(datatype, scope);
39        }
40        map
41    });
42
43pub static GLOBAL_PROMOTES_MAP: LazyLock<TigerHashMap<&'static str, (Args, Datatype)>> =
44    LazyLock::new(|| {
45        let mut map = TigerHashMap::default();
46        for (name, args, datatype) in GLOBAL_PROMOTES.iter().copied() {
47            map.insert(name, (args, datatype));
48        }
49        map
50    });
51
52pub static GLOBAL_FUNCTIONS_MAP: LazyLock<TigerHashMap<&'static str, (Args, Datatype)>> =
53    LazyLock::new(|| {
54        let mut map = TigerHashMap::default();
55        for (name, args, datatype) in GLOBAL_FUNCTIONS.iter().copied() {
56            map.insert(name, (args, datatype));
57        }
58        map
59    });
60
61#[allow(clippy::type_complexity)]
62pub static PROMOTES_MAP: LazyLock<TigerHashMap<&'static str, Vec<(Datatype, Args, Datatype)>>> =
63    LazyLock::new(|| {
64        let mut map = TigerHashMap::<&'static str, Vec<(Datatype, Args, Datatype)>>::default();
65        for (name, from, args, to) in PROMOTES.iter().copied() {
66            map.entry(name).or_default().push((from, args, to));
67        }
68        map
69    });
70
71#[allow(clippy::type_complexity)]
72pub static FUNCTIONS_MAP: LazyLock<TigerHashMap<&'static str, Vec<(Datatype, Args, Datatype)>>> =
73    LazyLock::new(|| {
74        let mut map = TigerHashMap::<&'static str, Vec<(Datatype, Args, Datatype)>>::default();
75        for (name, from, args, to) in FUNCTIONS.iter().copied() {
76            map.entry(name).or_default().push((from, args, to));
77        }
78        map
79    });
80
81// The include/ files are converted from the game's data_type_* output files.
82
83const DATATYPE_AND_SCOPE: &[(Datatype, Scopes)] = &[
84    (Ck3(Character), Scopes::Character),
85    (Ck3(Title), Scopes::LandedTitle),
86    (Ck3(Activity), Scopes::Activity),
87    (Ck3(Secret), Scopes::Secret),
88    (Ck3(Province), Scopes::Province),
89    (Ck3(Scheme), Scopes::Scheme),
90    (Ck3(Combat), Scopes::Combat),
91    (Ck3(CombatSide), Scopes::CombatSide),
92    (Ck3(Faith), Scopes::Faith),
93    (Ck3(GreatHolyWar), Scopes::GreatHolyWar),
94    (Ck3(Religion), Scopes::Religion),
95    (Ck3(War), Scopes::War),
96    (Ck3(Story), Scopes::StoryCycle),
97    (Ck3(CasusBelliItem), Scopes::CasusBelli),
98    (Ck3(Dynasty), Scopes::Dynasty),
99    (Ck3(DynastyHouse), Scopes::DynastyHouse),
100    (Ck3(Faction), Scopes::Faction),
101    (Ck3(Culture), Scopes::Culture),
102    (Ck3(Army), Scopes::Army),
103    (Ck3(HolyOrder), Scopes::HolyOrder),
104    (Ck3(ActiveCouncilTask), Scopes::CouncilTask),
105    (Ck3(MercenaryCompany), Scopes::MercenaryCompany),
106    (Ck3(Artifact), Scopes::Artifact),
107    (Ck3(Inspiration), Scopes::Inspiration),
108    (Ck3(Struggle), Scopes::Struggle),
109    (Ck3(CharacterMemory), Scopes::CharacterMemory),
110    (Ck3(TravelPlan), Scopes::TravelPlan),
111    (Ck3(Accolade), Scopes::Accolade),
112    (Ck3(AccoladeType), Scopes::AccoladeType),
113    (Ck3(Decision), Scopes::Decision),
114    (Ck3(FaithDoctrine), Scopes::Doctrine),
115    (Ck3(ActivityType), Scopes::ActivityType),
116    (Ck3(CultureTradition), Scopes::CultureTradition),
117    (Ck3(CulturePillar), Scopes::CulturePillar),
118    (Ck3(GovernmentType), Scopes::GovernmentType),
119    (Ck3(HoldingType), Scopes::HoldingType),
120    (Ck3(Trait), Scopes::Trait),
121    (Ck3(TaxSlot), Scopes::TaxSlot),
122    (Ck3(SubjectContract), Scopes::VassalContract),
123    (Ck3(ObligationLevel), Scopes::VassalObligationLevel),
124];
125
126const GLOBAL_PROMOTES: &[(&str, Args, Datatype)] = include!("include/data_global_promotes.rs");
127
128const GLOBAL_FUNCTIONS: &[(&str, Args, Datatype)] = include!("include/data_global_functions.rs");
129
130const PROMOTES: &[(&str, Datatype, Args, Datatype)] = include!("include/data_promotes.rs");
131
132const FUNCTIONS: &[(&str, Datatype, Args, Datatype)] = include!("include/data_functions.rs");