using Godot; using System; using Movementtests.interfaces; using Movementtests.systems.damage; [GlobalClass] public partial class RDamageModifier : Resource, IDamageable { public event Action DamageTaken; [Export] public EDamageTypes DamageType = EDamageTypes.Normal; [Export] public float Modifier = 1.0f; public RDamageModifier() { Modifier = 1.0f; DamageType = EDamageTypes.Normal; } public RDamageModifier(EDamageTypes damageType, float modifier) { Modifier = modifier; DamageType = damageType; } public DamageRecord TakeDamage(DamageRecord damageRecord) { if (damageRecord.Damage.DamageType != DamageType) return damageRecord with { Damage = new RDamage(0, damageRecord.Damage.DamageType) }; var finalDamage = damageRecord.Damage.DamageDealt * Modifier; var finalDamageRecord = damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) }; DamageTaken?.Invoke(this, finalDamageRecord); return finalDamageRecord; } }