diff --git a/src/dynamic_data/models/battle.rs b/src/dynamic_data/models/battle.rs index a41b08b..8ffe218 100644 --- a/src/dynamic_data/models/battle.rs +++ b/src/dynamic_data/models/battle.rs @@ -31,6 +31,8 @@ pub struct Battle<'a> { current_turn: u32, volatile_scripts: Arc>, last_turn_time: i64, + + script_source_data: RwLock, } impl<'a> Battle<'a> { @@ -64,6 +66,7 @@ impl<'a> Battle<'a> { current_turn: 0, volatile_scripts: Default::default(), last_turn_time: 0, + script_source_data: Default::default(), })); for i in 0..number_of_sides { @@ -176,11 +179,11 @@ impl<'a> VolatileScripts<'a> for Battle<'a> { impl<'a> ScriptSource<'a> for Battle<'a> { fn get_script_count(&self) -> usize { - todo!() + 1 } fn get_script_source_data(&self) -> &RwLock { - todo!() + &self.script_source_data } fn get_own_scripts(&self, scripts: &mut Vec) { diff --git a/src/dynamic_data/models/battle_side.rs b/src/dynamic_data/models/battle_side.rs index 14799de..b84e64e 100644 --- a/src/dynamic_data/models/battle_side.rs +++ b/src/dynamic_data/models/battle_side.rs @@ -23,6 +23,8 @@ pub struct BattleSide<'a> { battle: Weak>>, has_fled_battle: bool, volatile_scripts: Arc>, + + script_source_data: RwLock, } impl<'a> BattleSide<'a> { @@ -47,6 +49,7 @@ impl<'a> BattleSide<'a> { battle, has_fled_battle: false, volatile_scripts: Default::default(), + script_source_data: Default::default(), } } pub fn index(&self) -> u8 { @@ -277,11 +280,11 @@ impl<'a> VolatileScripts<'a> for BattleSide<'a> { impl<'a> ScriptSource<'a> for BattleSide<'a> { fn get_script_count(&self) -> usize { - todo!() + self.battle.upgrade().unwrap().read().get_script_count() + 1 } fn get_script_source_data(&self) -> &RwLock { - todo!() + &self.script_source_data } fn get_own_scripts(&self, scripts: &mut Vec) { diff --git a/src/dynamic_data/models/executing_move.rs b/src/dynamic_data/models/executing_move.rs index ffd7b5c..a7ac5d0 100644 --- a/src/dynamic_data/models/executing_move.rs +++ b/src/dynamic_data/models/executing_move.rs @@ -65,6 +65,7 @@ pub struct ExecutingMove<'a, 'b> { use_move: &'a MoveData, script: ScriptContainer, targets: Vec>>, + script_source_data: RwLock, } impl<'a, 'b> ExecutingMove<'a, 'b> { @@ -89,6 +90,7 @@ impl<'a, 'b> ExecutingMove<'a, 'b> { use_move, script, targets, + script_source_data: Default::default(), } } pub fn target_count(&self) -> usize { @@ -150,7 +152,7 @@ impl<'a, 'b> ScriptSource<'a> for ExecutingMove<'a, 'b> { } fn get_script_source_data(&self) -> &RwLock { - todo!() + &self.script_source_data } fn get_own_scripts(&self, scripts: &mut Vec) { diff --git a/src/dynamic_data/models/pokemon.rs b/src/dynamic_data/models/pokemon.rs index 476b941..d117fa8 100644 --- a/src/dynamic_data/models/pokemon.rs +++ b/src/dynamic_data/models/pokemon.rs @@ -92,6 +92,8 @@ pub struct Pokemon<'a> { ability_script: ScriptContainer, status_script: ScriptContainer, volatile: Arc>, + + script_source_data: RwLock, } impl<'a> Pokemon<'a> { @@ -154,6 +156,7 @@ impl<'a> Pokemon<'a> { ability_script: ScriptContainer::default(), status_script: ScriptContainer::default(), volatile: Default::default(), + script_source_data: Default::default(), }; pokemon.recalculate_flat_stats(); pokemon @@ -535,11 +538,18 @@ impl<'a> Pokemon<'a> { impl<'a> ScriptSource<'a> for Pokemon<'a> { fn get_script_count(&self) -> usize { - todo!() + let mut c = 3; + if let Some(battle_data) = &self.battle_data { + if let Some(battle) = battle_data.battle.upgrade() { + c += battle.read().sides()[battle_data.battle_side_index as usize] + .get_script_count(); + } + } + c } fn get_script_source_data(&self) -> &RwLock { - todo!() + &self.script_source_data } fn get_own_scripts(&self, scripts: &mut Vec) { diff --git a/src/dynamic_data/script_handling/mod.rs b/src/dynamic_data/script_handling/mod.rs index 49fdbd0..70dadc1 100644 --- a/src/dynamic_data/script_handling/mod.rs +++ b/src/dynamic_data/script_handling/mod.rs @@ -23,7 +23,7 @@ macro_rules! script_hook { }; } -#[derive(Default)] +#[derive(Default, Debug)] pub struct ScriptSourceData { is_initialized: bool, scripts: Vec, @@ -46,6 +46,7 @@ pub trait ScriptSource<'a> { fn collect_scripts(&self, scripts: &mut Vec); } +#[derive(Debug)] pub enum ScriptWrapper { Script(Weak>>>), Set(Weak>),