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(); } protected override void PerformTick() { if (user == null) return; if (target == null) return; DamageArgs args = CObjectPool.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); if (targetHealth != null) targetHealth.ApplyDamage(args); CObjectPool.Release(args); } public new void Reset() { base.Reset(); baseDamagePerTick = 0f; } }