/// <summary>
 /// Call this method to toggle on an animation trigger. T
 /// </summary>
 /// <param name="AnimatorHash"></param>
 /// <param name="AttackBufferInFrames"></param>
 public void SetAnimationTrigger(int AnimatorHash, int AttackBufferInFrames = 0)
 {
     AssociatedAnimator.SetTrigger(AnimatorHash);
     if (AttackBufferInFrames > 0)
     {
         StartCoroutine(BeginBufferTriggerInput(AnimatorHash, AttackBufferInFrames));
     }
 }
 /// <summary>
 /// This method is used to update the character's animator based on the character movement component
 /// </summary>
 public void UpdateAnimatorBasedOnCharacterMovement()
 {
     AssociatedAnimator.SetFloat(HORIZONTAL_INPUT, Mathf.Abs(AssociatedCharacterMovmeent.MovementInput.x));
     AssociatedAnimator.SetFloat(VERTICAL_INPUT, Mathf.Abs(AssociatedCharacterMovmeent.MovementInput.y));
     AssociatedAnimator.SetFloat(VERTICAL_VELOCITY, CharacterPhysics.Velocity.y);
     AssociatedAnimator.SetInteger(MOVEMENT_STATE, (int)AssociatedCharacterMovmeent.CurrentMovementState);
     AssociatedAnimator.SetInteger(STANDING_GROUNDED_STATE, (int)AssociatedCharacterMovmeent.CurrentGroundedStandingState);
 }
 /// <summary>
 /// This method acts to buffer trigger events in our Animator. If a button is pressed again while our coroutine is still
 /// active, it will simply reset the buffer timer and exit out of the new cotourine.
 /// </summary>
 /// <param name="AnimationHash"></param>
 /// <param name="AttackBufferInFrames"></param>
 /// <returns></returns>
 private IEnumerator BeginBufferTriggerInput(int AnimationHash, int AttackBufferInFrames)
 {
     if (TriggerInputBufferDictionary.ContainsKey(AnimationHash))
     {
         TriggerInputBufferDictionary[AnimationHash] = AttackBufferInFrames;
         yield break;
     }
     TriggerInputBufferDictionary.Add(AnimationHash, AttackBufferInFrames);
     while (TriggerInputBufferDictionary[AnimationHash] > 0)
     {
         --TriggerInputBufferDictionary[AnimationHash];
         yield return(null);
     }
     AssociatedAnimator.SetBool(AnimationHash, false);
     TriggerInputBufferDictionary.Remove(AnimationHash);
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="AnimationHash"></param>
 /// <param name="Value"></param>
 public void SetAnimationFloat(int AnimationHash, float Value)
 {
     AssociatedAnimator.SetFloat(AnimationHash, Value);
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="AnimationHash"></param>
 /// <param name="Value"></param>
 public void SetAnimationInt(int AnimationHash, int Value)
 {
     AssociatedAnimator.SetInteger(AnimationHash, Value);
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="AnimationHash"></param>
 /// <param name="Value"></param>
 public void SetAnimationBool(int AnimationHash, bool Value)
 {
     AssociatedAnimator.SetBool(AnimationHash, Value);
 }