RiftMayhem/Assets/Scripts/EntityBroker/AbsorbInterceptor.cs

51 lines
1.2 KiB
C#

using UnityEngine;
public class AbsorbInterceptor : BrokerInterceptor
{
AbsorbEffectInstance absorbEffect;
float finalValue;
protected override void Awake()
{
base.Awake();
absorbEffect = GetComponentInParent<AbsorbEffectInstance>();
broker.OnIncomingDamage.Subscribe(HandleAbsorbEffects, GameConstants.BrokerEventPriority.BasicStatMitigation);
}
private void HandleAbsorbEffects(DamageArgs args)
{
finalValue = args.currentValue;
if (finalValue >= 0) return;
AbsorbArgs absorbArgs = CObjectPool<AbsorbArgs>.Get();
absorbArgs.user = user;
absorbArgs.absorbedDamage = false;
absorbArgs.absorbDepleted = false;
if (absorbEffect.IsActive)
{
finalValue = absorbEffect.AbsorbDamage(finalValue);
if (finalValue > 0) //avoid complete absorbs turning into healing
finalValue = 0;
absorbArgs.absorbedDamage = true;
absorbArgs.absorbDepleted = absorbEffect.currentAmount <= 0;
args.currentValue = finalValue;
}
broker.OnAbsorb.Invoke(absorbArgs);
CObjectPool<AbsorbArgs>.Release(absorbArgs);
}
}