RiftMayhem/Assets/Scripts/EntityBroker/BasicStatMitigationCalculator.cs

47 lines
1.7 KiB
C#

using UnityEngine;
public class BasicStatMitigationCalculator : BrokerInterceptor
{
float percentStatMitigation;
float reducedDamage;
float finalValue;
protected override void Awake()
{
base.Awake();
broker.OnIncomingDamage.Subscribe(HandleStatMitigation, GameConstants.BrokerEventPriority.BasicStatMitigation);
}
private void HandleStatMitigation(DamageArgs args)
{
if (args.currentValue >= 0) return;
finalValue = args.currentValue;
switch (args.damageType)
{
case DamageType.Attack:
default:
{
percentStatMitigation = Mathf.Clamp((stats.GetStat("armor").Value * GameConstants.CharacterStatsBalancing.PercentArmorIntoDamageReduction), 0, GameConstants.CharacterStatsBalancing.MaximumPercentDamageReductionFromArmor);
}
break;
case DamageType.Spell:
{
percentStatMitigation = Mathf.Clamp((stats.GetStat("magicresistance").Value * GameConstants.CharacterStatsBalancing.PercentMagicResistanceIntoDamageReduction), 0, GameConstants.CharacterStatsBalancing.MaximumPercentDamageReductionFromMagicResistance);
}
break;
}
reducedDamage = args.currentValue * percentStatMitigation;
finalValue += Mathf.Abs(reducedDamage);
//Debug.Log(gameObject.name + " receiving dmg = " + incomingValue + $" after mitigations from {(dmgType == DamageType.Attack ? nameof(character.Armor) : nameof(character.MagicResistance))}");
if (finalValue > 0) //avoid damage ultra mitigated turning into healing
finalValue = 0;
}
}