32 lines
1.1 KiB
C#
32 lines
1.1 KiB
C#
using Godot;
|
|
using System;
|
|
using Movementtests.interfaces;
|
|
|
|
[GlobalClass, Icon("res://assets/ui/IconGodotNode/white/icon_skull.png")]
|
|
public partial class CDamageable : Node, IDamageable
|
|
{
|
|
public event Action<IDamageable, DamageRecord> 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) };
|
|
}
|
|
}
|