tiger_lib/vic3/data/
goods.rs

1use crate::block::Block;
2use crate::db::{Db, DbKind};
3use crate::everything::Everything;
4use crate::game::GameFlags;
5use crate::item::{Item, ItemLoader};
6use crate::token::Token;
7use crate::validator::Validator;
8use crate::vic3::tables::modifs::maybe_warn_modifiable_capitalization;
9
10#[derive(Clone, Debug)]
11pub struct Goods {}
12
13inventory::submit! {
14    ItemLoader::Normal(GameFlags::Vic3, Item::Goods, Goods::add)
15}
16
17impl Goods {
18    pub fn add(db: &mut Db, key: Token, block: Block) {
19        db.add(Item::Goods, key, block, Box::new(Self {}));
20    }
21}
22
23impl DbKind for Goods {
24    fn validate(&self, key: &Token, block: &Block, data: &Everything) {
25        let mut vd = Validator::new(block, data);
26
27        maybe_warn_modifiable_capitalization(key);
28
29        data.verify_exists(Item::Localization, key);
30
31        vd.field_item("texture", Item::File);
32        vd.field_numeric("cost");
33        vd.field_choice("category", &["industrial", "luxury", "military", "staple"]);
34
35        vd.field_bool("local");
36        vd.field_bool("tradeable");
37        vd.field_bool("fixed_price");
38
39        vd.field_numeric("prestige_factor");
40        vd.field_numeric("traded_quantity");
41        vd.field_numeric("convoy_cost_multiplier");
42
43        vd.field_numeric("obsession_chance");
44        vd.field_numeric("consumption_tax_cost");
45
46        vd.field_bool("pop_consumption_can_add_infrastructure"); // undocumented
47    }
48}