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 { get; set;} [Export] public float Modifier { get; set;} public RDamageModifier() : this(EDamageTypes.Normal, 1.0f) {} 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; } public DamageRecord ComputeDamage(DamageRecord damageRecord) { if (damageRecord.Damage.DamageType != DamageType) return damageRecord with { Damage = new RDamage(0, damageRecord.Damage.DamageType) }; var finalDamage = damageRecord.Damage.DamageDealt * Modifier; return damageRecord with { Damage = new RDamage(finalDamage, damageRecord.Damage.DamageType) }; } }