using UnityEngine; public class AbsorbInterceptor : BrokerInterceptor { AbsorbEffectInstance absorbEffect; float finalValue; protected override void Awake() { base.Awake(); absorbEffect = GetComponentInParent(); 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); } }