tiger_lib/data/
coadesigner.rs1use 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}