diff --git a/rpg_components/src/items/ability_book.rs b/rpg_components/src/items/ability_book.rs index 27c0c91..f0a7dee 100644 --- a/rpg_components/src/items/ability_book.rs +++ b/rpg_components/src/items/ability_book.rs @@ -29,7 +29,7 @@ pub trait Ability: Send + Sync + Clone + Default { fn mana_cost(&self) -> u32; fn mana_cost_per_level(&self) -> u32; fn damage_type(&self) -> DamageType; - fn damage(&self, level: u32, addons: &AbilityAddonCollection, statistics: &Statistics) -> u32; + fn base_damage(&self, level: u32) -> u32; } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -240,6 +240,25 @@ impl AbilityBook { self.ability.mana_cost() + self.ability.mana_cost_per_level() * (self.level - 1) } + pub fn damage(&self, statistics: &Statistics) -> u32 { + // calculate damage of base ability + let ability_base_damage = self.ability.base_damage(self.level); + + // get bonus damage from statistics + let stats_damage = match self.ability.damage_type() { + DamageType::Air => statistics.air_damage.raw(), + DamageType::Fire => statistics.fire_damage.raw(), + DamageType::Water => statistics.water_damage.raw(), + DamageType::Physical => statistics.physical_damage.raw(), + }; + + // damage from addons multiplied with level + let addon_damage = self.addons.damage() * self.level; + + // sum up + ability_base_damage + stats_damage + addon_damage + } + pub fn into_persistent(&self) -> String { let mut base = format!("{}|{}|{}", self.ability().name(), self.rarity(), self.level); @@ -308,7 +327,7 @@ impl AbilityBook { let cooldown: Arc