53 lines
1.3 KiB
C#

using UnityEngine;
public class DamageTickingRuntimeEffectInstance : TickingRuntimeEffectInstance
{
public float baseDamagePerTick;
public DamageType damageType;
Health targetHealth;
public override void OnEffectFirstApplied(int numberOfStacksApplied)
{
base.OnEffectFirstApplied(numberOfStacksApplied);
targetBroker.OnAilmentApplied.Invoke(damageType);
targetHealth = target.GetComponent<Health>();
}
protected override void PerformTick()
{
if (user == null) return;
if (target == null) return;
DamageArgs args = CObjectPool<DamageArgs>.Get();
args.sourceAbility = sourceAbility;
args.sourceEffect = sourceEffect;
args.user = user;
args.target = target;
args.currentValue = -baseDamagePerTick * numberOfStacks;
args.isCrit = false;
args.targetDead = false;
args.applicationMethod = EffectApplicationMethod.Tick;
args.damageType = damageType;
args.totalTargetsHit = 1;
user.Broker.OnOutgoingDamage.Invoke(args);
user.Broker.OnOutgoingDamageProcessed.Invoke(args);
targetHealth.ApplyDamage(args);
CObjectPool<DamageArgs>.Release(args);
}
public new void Reset()
{
base.Reset();
baseDamagePerTick = 0f;
}
}