53 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|