tiger_lib/vic3/data/
ship_names.rs1use crate::block::Block;
2use crate::db::{Db, DbKind};
3use crate::everything::Everything;
4use crate::game::GameFlags;
5use crate::item::{Item, ItemLoader};
6use crate::scopes::Scopes;
7use crate::token::Token;
8use crate::tooltipped::Tooltipped;
9use crate::validator::Validator;
10
11#[derive(Clone, Debug)]
12pub struct ShipNameDefinition {}
13
14inventory::submit! {
15 ItemLoader::Normal(GameFlags::Vic3, Item::ShipNameDefinition, ShipNameDefinition::add)
16}
17
18impl ShipNameDefinition {
19 pub fn add(db: &mut Db, key: Token, block: Block) {
20 db.add(Item::ShipNameDefinition, key, block, Box::new(Self {}));
21 }
22}
23
24impl DbKind for ShipNameDefinition {
25 fn validate(&self, _key: &Token, block: &Block, data: &Everything) {
26 let mut vd = Validator::new(block, data);
27
28 vd.field_item("name", Item::Localization);
29 vd.field_numeric("selection_weight");
30 vd.field_item("country", Item::Country);
31 vd.field_item("culture", Item::Culture);
32 vd.field_bool("template");
33 vd.field_bool("fallback");
34 vd.field_item("clone_properties", Item::ShipNameDefinition);
35
36 vd.field_list_items("allowed_ship_types", Item::ShipType);
37 vd.field_validated_block("properties", |block, data| {
38 let mut vd = Validator::new(block, data);
39 for block in vd.blocks() {
40 let mut vd = Validator::new(block, data);
41 vd.field_choice(
42 "type",
43 &[
44 "custom_text",
45 "name_list",
46 "ordinal_number",
47 "owned_hubs",
48 "ship_type",
49 "culture_surnames",
50 "owned_states",
51 ],
52 );
53 vd.field_item("key", Item::Localization);
54 vd.field_item("custom_text", Item::Localization);
55 vd.multi_field_item("quick_trigger_required_law", Item::LawType);
56 vd.multi_field_item("quick_trigger_forbidden_law", Item::LawType);
57 vd.multi_field_item("quick_trigger_required_country", Item::Country);
58 vd.field_bool("quick_trigger_country_leader_female");
59 vd.field_list_items("name_list", Item::Localization);
60 vd.field_trigger_rooted("trigger", Tooltipped::No, Scopes::Ship);
61 }
62 });
63 }
64}