tiger_lib/vic3/data/
scripted_progress_bars.rs1use crate::block::Block;
2use crate::context::ScopeContext;
3use crate::db::{Db, DbKind};
4use crate::desc::validate_desc;
5use crate::everything::Everything;
6use crate::game::GameFlags;
7use crate::item::{Item, ItemLoader};
8use crate::scopes::Scopes;
9use crate::token::Token;
10use crate::validator::Validator;
11
12#[derive(Clone, Debug)]
13pub struct ScriptedProgressBar {}
14
15inventory::submit! {
16 ItemLoader::Normal(GameFlags::Vic3, Item::ScriptedProgressBar, ScriptedProgressBar::add)
17}
18
19impl ScriptedProgressBar {
20 pub fn add(db: &mut Db, key: Token, block: Block) {
21 db.add(Item::ScriptedProgressBar, key, block, Box::new(Self {}));
22 }
23}
24
25const BAR_TYPES: &[&str] = &[
26 "default",
27 "default_green",
28 "default_bad",
29 "double_sided_gold",
30 "double_sided_bad",
31 "double_sided_two_spains",
33];
34
35impl DbKind for ScriptedProgressBar {
36 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
37 let mut vd = Validator::new(block, data);
38 let mut sc = ScopeContext::new(Scopes::JournalEntry, key);
39
40 vd.req_field("name");
41 vd.field_validated_sc("name", &mut sc, validate_desc);
42 vd.req_field("desc");
43 vd.field_validated_sc("desc", &mut sc, validate_desc);
44 vd.field_validated_sc("second_desc", &mut sc, validate_desc);
45
46 vd.field_bool("is_inverted");
47
48 vd.field_numeric("start_value");
49 vd.field_numeric("min_value");
50 vd.field_numeric("max_value");
51
52 vd.req_field_one_of(BAR_TYPES);
53 for field in BAR_TYPES {
54 vd.field_bool(field);
55 }
56
57 for field in &["weekly_progress", "monthly_progress", "yearly_progress"] {
58 vd.field_script_value_rooted(field, Scopes::Country);
59 }
60 }
61}