44 lines
1006 B
C#
44 lines
1006 B
C#
using Kryz.CharacterStats.Examples;
|
|
using UnityEngine;
|
|
|
|
public class DodgeInterceptor : BrokerInterceptor
|
|
{
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
|
|
broker.OnIncomingDamage.Subscribe(HandleDodge, GameConstants.BrokerEventPriority.Dodge);
|
|
}
|
|
|
|
private void HandleDodge(DamageArgs args)
|
|
{
|
|
if (args.currentValue >= 0) return;
|
|
if (args.applicationMethod == EffectApplicationMethod.Tick) return;
|
|
|
|
DodgeArgs dodgeArgs = CObjectPool<DodgeArgs>.Get();
|
|
|
|
dodgeArgs.user = user;
|
|
dodgeArgs.dodgedSuccessfully = false;
|
|
|
|
|
|
if (HasDodged())
|
|
{
|
|
Debug.Log("Dodged!");
|
|
|
|
|
|
dodgeArgs.dodgedSuccessfully = true;
|
|
|
|
args.currentValue = 0f;
|
|
}
|
|
|
|
broker.OnDodge.Invoke(dodgeArgs);
|
|
|
|
CObjectPool<DodgeArgs>.Release(dodgeArgs);
|
|
}
|
|
|
|
protected bool HasDodged()
|
|
{
|
|
return MathHelpers.RollChancePercent(stats.GetStat("dodgechance").Value);
|
|
}
|
|
}
|