extends Object func apply_damage(damage_dealer: Entity, damage_receiver: Entity, weapon: Weapon ): var damage = weapon.get_damage() + damage_dealer.get_damage() var armor = damage_receiver.get_armor() var damage_percent = 90*( pow(MathUtils.e, 0.03*armor)) var damage_after_armor = damage * damage_percent if damage_after_armor < 1 : damage_after_armor = 1 var shield = damage_receiver.get_shield() if shield > 0: damage_receiver.reduce_shield(damage_after_armor) else: damage_receiver.reduce_health(damage_after_armor) for effect in weapon.get_hit_effects(): effect.apply_effect(damage_dealer,damage_receiver)