You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
2.2 KiB
C#

using UnityEngine;
namespace MalbersAnimations.Controller
{
public class AttackTriggerBehaviour : StateMachineBehaviour
{
[Tooltip("0: Disable All Attack Triggers\n-1: Enable All Attack Triggers\nx: Enable the Attack Trigger by its index")]
public int AttackTrigger = 1; //ID of the Attack Trigger to Enable/Disable during the Attack Animation
[Tooltip("Range on the Animation that the Attack Trigger will be Active")]
[MinMaxRange(0, 1)]
public RangedFloat AttackActivation = new RangedFloat(0.3f, 0.6f);
private bool isOn, isOff;
private IMDamagerSet[] damagers;
override public void OnStateEnter(Animator anim, AnimatorStateInfo stateInfo, int layerIndex)
{
if (damagers == null) damagers = anim.GetComponents<IMDamagerSet>();
isOn = isOff = false; //Reset the ON/OFF parameters (to be used on the Range of the animation
}
override public void OnStateUpdate(Animator anim, AnimatorStateInfo state, int layer)
{
var time = state.normalizedTime % 1;
if (!isOn && (time >= AttackActivation.minValue))
{
foreach (var d in damagers) d.ActivateDamager(AttackTrigger);
isOn = true;
}
if (!isOff && (time >= AttackActivation.maxValue))
{
if (anim.IsInTransition(layer) && anim.GetNextAnimatorStateInfo(layer).fullPathHash == state.fullPathHash) return; //means is transitioning to it self so do not OFF it
foreach (var d in damagers) d.ActivateDamager(0);
isOff = true;
}
}
override public void OnStateExit(Animator anim, AnimatorStateInfo state, int layer)
{
if (anim.GetCurrentAnimatorStateInfo(layer).fullPathHash == state.fullPathHash) return; //means is transitioning to it self
if (!isOff)
foreach (var d in damagers) d.ActivateDamager(0); //Double check that the Trigger is OFF
isOn = isOff = false; //Reset the ON/OFF variables
}
}
}