OldBlueWater/BlueWater/Assets/02.Scripts/Character/CombatPlayer/StateMachines/ComboAttackBehavior.cs

65 lines
2.6 KiB
C#
Raw Normal View History

using UnityEngine;
using UnityEngine.InputSystem;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class ComboAttackBehavior : StateMachineBehaviour
{
private CombatPlayerController combatPlayerController;
[SerializeField] private LayerMask groundLayer;
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (combatPlayerController == null)
{
combatPlayerController = animator.GetComponentInParent<CombatPlayerController>();
}
var animationLength = stateInfo.length;
animator.speed = animationLength / combatPlayerController.GetAttackTime();
combatPlayerController.SetEnableMoving(false);
combatPlayerController.SetIsAttacking(true);
combatPlayerController.SetIsComboPossible(true);
if (combatPlayerController.MyCurrentState.useMouseAttack)
{
var mousePos = Mouse.current.position.ReadValue();
var ray = CameraManager.Inst.MainCam.ScreenPointToRay(mousePos);
if (!Physics.Raycast(ray, out var hit, float.MaxValue, groundLayer)) return;
var attackDirection = (hit.point - combatPlayerController.GetCurrentPosition()).normalized;
attackDirection.y = 0f;
combatPlayerController.SetPreviousMoveDirection(attackDirection);
}
}
public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (stateInfo.normalizedTime < 0.2f)
{
combatPlayerController.MoveToCurrentDirection(1f);
}
else if (combatPlayerController.GetIsComboAttacking() && stateInfo.normalizedTime is > 0.4f and < 0.45f)
{
combatPlayerController.MoveToCurrentDirection(10f);
}
if (stateInfo.normalizedTime >= 1f)
{
animator.SetBool(CombatPlayerController.IsAttackingHash, false);
}
}
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
animator.speed = 1f;
combatPlayerController.SetIsComboPossible(false);
combatPlayerController.SetIsComboAttacking(false);
combatPlayerController.SetIsAttacking(false);
combatPlayerController.SetEnableMoving(true);
}
}
}