49 lines
1.1 KiB
C#
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);
|
|
}
|
|
}
|