diff --git a/rpg_components/src/components/ability_slots.rs b/rpg_components/src/components/ability_slots.rs index cae81c7..1aad288 100644 --- a/rpg_components/src/components/ability_slots.rs +++ b/rpg_components/src/components/ability_slots.rs @@ -8,9 +8,14 @@ use std::{ str::FromStr, }; -use crate::items::{ability_addon::AbilityAddonTypes, ability_book::AbilityBook, Rarities}; use crate::{components::inventory::Storable, items::ItemSystem}; use crate::{config::save_game::SaveGame, items::ability_book::Ability}; +use crate::{ + damage_type::DamageType, + items::{ability_addon::AbilityAddonTypes, ability_book::AbilityBook, Rarities}, +}; + +use super::{character_status::CharacterStatus, statistics::Statistics}; macro_rules! load { ($me: ident, $item_system:ident, $save_game:ident, $($index:literal,)+) => { @@ -134,6 +139,21 @@ impl AbilitySlots { pub fn iter_mut(&mut self) -> IterMut<'_, Option>> { self.abilities.iter_mut() } + + pub fn apply_damage( + base_damage: u32, + damage_type: DamageType, + enemy_statistics: &Statistics, + enemy_status: &mut CharacterStatus, + ) { + let resistance = enemy_statistics.calculate_resistance(damage_type); + + if resistance < base_damage { + let damage = base_damage - resistance; + + enemy_status.apply_damage(damage as f32); + } + } } impl EntityComponent for AbilitySlots {