aoe2-probe 0.3.2

A rust library for editing aoe2scenario files from AoE2 DE.
Documentation
use std::sync::Arc;

use crate::{parse::Token, utils::map::*};

use super::{Trigger, Variable};

pub struct Triggers;

impl Triggers {
    pub fn template() -> Token {
        let mut root = PatchedMap::with_capacity(9);
        root.push_back("trigger_version", 2.6_f64);
        root.push_back("trigger_instruction_start", 0_i8);
        root.push_back("number_of_triggers", 0_u32);
        root.push_back("trigger_data", vec![Trigger::template()]);

        root.patches.insert(
            "trigger_data".to_string(),
            Arc::new(|map: &mut PatchedMap, template: &mut Token| {
                if map.contains("number_of_triggers") {
                    let count = *map["number_of_triggers"].try_u32();
                    let unit = template.try_vec()[0].clone();
                    let vec = template.try_mut_vec();
                    vec.clear();

                    for _ in 0..count {
                        vec.push(unit.clone());
                    }
                }
            }),
        );

        root.push_back("trigger_display_order_array", vec![0_u32.into()]);
        root.patches.insert(
            "trigger_display_order_array".to_string(),
            Arc::new(|map: &mut PatchedMap, template: &mut Token| {
                if map.contains("number_of_triggers") {
                    let count = *map["number_of_triggers"].try_u32();
                    let unit = template.try_vec()[0].clone();
                    let vec = template.try_mut_vec();
                    vec.clear();

                    for _ in 0..count {
                        vec.push(unit.clone());
                    }
                }
            }),
        );

        root.push_back("unknown_bytes", vec![0_u8.into(); 1028]);
        root.push_back("number_of_variables", 0_u32);
        root.push_back("variable_data", vec![Variable::template()]);

        root.patches.insert(
            "variable_data".to_string(),
            Arc::new(|map: &mut PatchedMap, template: &mut Token| {
                if map.contains("number_of_variables") {
                    let count = *map["number_of_variables"].try_u32();
                    let unit = template.try_vec()[0].clone();
                    let vec = template.try_mut_vec();
                    vec.clear();

                    for _ in 0..count {
                        vec.push(unit.clone());
                    }
                }
            }),
        );

        root.push_back("useless_trigger_data", vec![0_u8.into(); 9]);
        root.push_back("unknown_bytes_2", vec![0_u8.into(); 8]);


        root.into()
    }
}