tiger_lib/data/
coadesigner.rs

1use crate::block::Block;
2#[cfg(feature = "ck3")]
3use crate::data::coa::validate_coa_layout;
4use crate::db::{Db, DbKind};
5use crate::everything::Everything;
6use crate::game::GameFlags;
7use crate::item::{Item, ItemLoader};
8#[cfg(feature = "ck3")]
9use crate::report::{ErrorKey, warn};
10use crate::token::Token;
11use crate::validator::Validator;
12
13#[derive(Clone, Debug)]
14pub struct CoaDesignerColoredEmblem {}
15
16inventory::submit! {
17    ItemLoader::Normal(GameFlags::jomini(), Item::CoaDesignerColoredEmblem, CoaDesignerColoredEmblem::add)
18}
19
20impl CoaDesignerColoredEmblem {
21    pub fn add(db: &mut Db, key: Token, block: Block) {
22        db.add(Item::CoaDesignerColoredEmblem, key, block, Box::new(Self {}));
23    }
24}
25
26impl DbKind for CoaDesignerColoredEmblem {
27    fn validate(&self, key: &Token, block: &Block, data: &Everything) {
28        let mut vd = Validator::new(block, data);
29
30        let pathname = format!("{}{key}", Item::CoaDesignerColoredEmblem.path());
31        data.verify_exists_implied(Item::File, &pathname, key);
32
33        vd.field_integer_range("colors", 0..=5);
34        vd.field_bool("visible");
35        if let Some(token) = vd.field_value("category") {
36            let loca = format!("COA_DESIGNER_CATEGORY_{token}");
37            data.verify_exists_implied(Item::Localization, &loca, token);
38        }
39    }
40}
41
42#[derive(Clone, Debug)]
43#[cfg(feature = "ck3")]
44pub struct CoaDesignerColorPalette {}
45
46#[cfg(feature = "ck3")]
47inventory::submit! {
48    ItemLoader::Normal(GameFlags::Ck3, Item::CoaDesignerColorPalette, CoaDesignerColorPalette::add)
49}
50
51#[cfg(feature = "ck3")]
52impl CoaDesignerColorPalette {
53    pub fn add(db: &mut Db, key: Token, mut block: Block) {
54        if key.is("coa_designer_background_colors") {
55            for (token, block) in block.drain_definitions_warn() {
56                db.add(Item::CoaDesignerColorPalette, token, block, Box::new(Self {}));
57            }
58        } else {
59            warn(ErrorKey::UnknownField).msg("unknown key").loc(key).push();
60        }
61    }
62}
63
64#[cfg(feature = "ck3")]
65impl DbKind for CoaDesignerColorPalette {
66    fn validate(&self, key: &Token, block: &Block, data: &Everything) {
67        let mut _vd = Validator::new(block, data);
68
69        data.verify_exists(Item::NamedColor, key);
70    }
71}
72
73#[derive(Clone, Debug)]
74#[cfg(feature = "ck3")]
75pub struct CoaDesignerEmblemLayout {}
76
77#[cfg(feature = "ck3")]
78inventory::submit! {
79    ItemLoader::Normal(GameFlags::Ck3, Item::CoaDesignerEmblemLayout, CoaDesignerEmblemLayout::add)
80}
81
82#[cfg(feature = "ck3")]
83impl CoaDesignerEmblemLayout {
84    pub fn add(db: &mut Db, key: Token, block: Block) {
85        db.add(Item::CoaDesignerEmblemLayout, key, block, Box::new(Self {}));
86    }
87}
88
89#[cfg(feature = "ck3")]
90impl DbKind for CoaDesignerEmblemLayout {
91    fn validate(&self, _key: &Token, block: &Block, data: &Everything) {
92        validate_coa_layout(block, data);
93    }
94}
95
96#[derive(Clone, Debug)]
97pub struct CoaDesignerPattern {}
98
99inventory::submit! {
100    ItemLoader::Normal(GameFlags::all(), Item::CoaDesignerPattern, CoaDesignerPattern::add)
101}
102
103impl CoaDesignerPattern {
104    pub fn add(db: &mut Db, key: Token, block: Block) {
105        db.add(Item::CoaDesignerPattern, key, block, Box::new(Self {}));
106    }
107}
108
109impl DbKind for CoaDesignerPattern {
110    fn validate(&self, key: &Token, block: &Block, data: &Everything) {
111        let mut vd = Validator::new(block, data);
112
113        let pathname = format!("{}{key}", Item::CoaDesignerPattern.path());
114        data.verify_exists_implied(Item::File, &pathname, key);
115
116        vd.field_integer_range("colors", 0..=5);
117        vd.field_bool("visible");
118    }
119}