tiger_lib/ck3/data/
modif.rs1use crate::block::Block;
2use crate::ck3::modif::ModifKinds;
3use crate::ck3::tables::modifs::modif_loc;
4use crate::db::{Db, DbKind};
5use crate::everything::Everything;
6use crate::game::GameFlags;
7use crate::item::{Item, ItemLoader};
8use crate::modif::verify_modif_exists;
9use crate::report::Severity;
10use crate::token::Token;
11use crate::validator::Validator;
12
13#[derive(Clone, Debug)]
14pub struct ModifierFormat {}
15
16inventory::submit! {
17 ItemLoader::Normal(GameFlags::Ck3, Item::ModifierFormat, ModifierFormat::add)
18}
19
20impl ModifierFormat {
21 pub fn add(db: &mut Db, key: Token, block: Block) {
22 db.add(Item::ModifierFormat, key, block, Box::new(Self {}));
23 }
24}
25
26impl DbKind for ModifierFormat {
27 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
28 let mut vd = Validator::new(block, data);
29
30 if let Some("yes") = vd.field_value("hidden").map(Token::as_str) {
31 } else {
33 let loca = modif_loc(key);
34 data.verify_exists_implied(Item::Localization, &loca, key);
35 }
36
37 verify_modif_exists(key, data, ModifKinds::all(), Severity::Untidy);
38
39 vd.field_integer("decimals");
40 vd.field_choice("color", &["good", "neutral", "bad"]);
41
42 vd.field_item("prefix", Item::Localization);
43 vd.field_item("suffix", Item::Localization);
44 vd.field_item("negative_suffix", Item::Localization);
45
46 vd.field_item("dlc_feature", Item::DlcFeature);
47
48 vd.field_bool("percent");
50 vd.field_bool("already_percent");
51 vd.field_bool("hidden");
52 vd.field_bool("no_difference_sign");
53 }
54}