RiftMayhem/Assets/Scripts/EntityBroker/AbsorbInterceptor.cs

49 lines
1.1 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 = new AbsorbArgs()
{
user = user,
absorbedDamage = false,
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);
}
}