use crate::StringKey; #[derive(PartialEq, Debug)] pub enum EffectParameter { Bool(bool), Int(i64), Float(f32), String(String), } #[derive(PartialEq, Debug)] pub struct SecondaryEffect { chance: f32, effect_name: StringKey, parameters: Vec, } impl SecondaryEffect { pub fn new(chance: f32, effect_name: StringKey, parameters: Vec) -> SecondaryEffect { SecondaryEffect { chance, effect_name, parameters, } } pub fn chance(&self) -> f32 { self.chance } pub fn effect_name(&self) -> &StringKey { &self.effect_name } pub fn parameters(&self) -> &Vec { &self.parameters } } #[cfg(test)] mod tests { use crate::static_data::moves::secondary_effect::SecondaryEffect; use assert_approx_eq::assert_approx_eq; #[test] fn create_secondary_effect() { let empty = SecondaryEffect::new(0.0, "".into(), vec![]); assert_approx_eq!(empty.chance(), 0.0); assert_eq!(empty.effect_name(), &"".into()); assert_eq!(empty.parameters().len(), 0); let set = SecondaryEffect::new(50.0, "foo".into(), Vec::new()); assert_approx_eq!(set.chance(), 50.0); assert_eq!(set.effect_name(), &"foo".into()); assert_eq!(set.parameters().len(), 0); } }