using Godot; using System; using Movementtests.interfaces; [GlobalClass] public partial class CDamageable : Node, IDamageable { public event Action DamageTaken; [Export] public RDamageModifier[] DamageModifiers { get; set; } public DamageRecord TakeDamage(DamageRecord damageRecord) { var finalDamage = 0f; foreach (var damageable in DamageModifiers.ToIDamageables()) finalDamage += damageable.TakeDamage(damageRecord).Damage.DamageDealt; var finalDamageRecord = damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) }; DamageTaken?.Invoke(this, finalDamageRecord); return finalDamageRecord; } public DamageRecord ComputeDamage(DamageRecord damageRecord) { var finalDamage = 0f; foreach (var damageable in DamageModifiers.ToIDamageables()) finalDamage += damageable.ComputeDamage(damageRecord).Damage.DamageDealt; return damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) }; } }