tiger_lib/vic3/data/
goods.rs1use 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"); }
48}