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(); } 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); } } }