34 lines
1.1 KiB
C#
34 lines
1.1 KiB
C#
using Godot;
|
|
using System;
|
|
using Movementtests.interfaces;
|
|
using Movementtests.systems.damage;
|
|
|
|
[GlobalClass]
|
|
public partial class RDamageModifier : Resource, IDamageable
|
|
{
|
|
public event Action<IDamageable, DamageRecord> 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;
|
|
}
|
|
}
|