use crate::dynamic_data::libraries::battle_stat_calculator::BattleStatCalculator; use crate::dynamic_data::libraries::damage_library::DamageLibrary; use crate::dynamic_data::libraries::misc_library::MiscLibrary; use crate::dynamic_data::libraries::script_resolver::ScriptCategory; use crate::dynamic_data::script_handling::item_script::ItemScript; use crate::dynamic_data::script_handling::script::Script; use crate::static_data::items::item::Item; use crate::static_data::libraries::static_data::StaticData; use crate::{PkmnResult, StringKey}; #[derive(Debug)] pub struct DynamicLibrary { static_data: StaticData, stat_calculator: BattleStatCalculator, damage_calculator: Box, misc_library: Box>, } unsafe impl Sync for DynamicLibrary {} unsafe impl Send for DynamicLibrary {} impl DynamicLibrary { pub fn new( static_data: StaticData, stat_calculator: BattleStatCalculator, damage_calculator: Box, misc_library: Box>, ) -> Self { Self { static_data, stat_calculator, damage_calculator, misc_library, } } pub fn static_data(&self) -> &StaticData { &self.static_data } pub fn stat_calculator(&self) -> &BattleStatCalculator { &self.stat_calculator } pub fn damage_calculator(&self) -> &Box { &self.damage_calculator } pub fn misc_library(&self) -> &Box> { &self.misc_library } pub fn load_script(&self, _category: ScriptCategory, _key: &StringKey) -> PkmnResult>> { todo!() } pub fn load_item_script(&self, _key: &Item) -> PkmnResult>> { todo!() } } #[cfg(test)] pub mod test { use crate::dynamic_data::libraries::battle_stat_calculator::BattleStatCalculator; use crate::dynamic_data::libraries::damage_library::Gen7DamageLibrary; use crate::dynamic_data::libraries::dynamic_library::DynamicLibrary; use crate::dynamic_data::libraries::misc_library::Gen7MiscLibrary; use crate::static_data::libraries::static_data; pub fn build<'library>() -> DynamicLibrary { DynamicLibrary { static_data: static_data::test::build(), stat_calculator: BattleStatCalculator {}, damage_calculator: Box::new(Gen7DamageLibrary::new(false)), misc_library: Box::new(Gen7MiscLibrary::new()), } } }