60 lines
1.5 KiB
C#
60 lines
1.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
namespace OnlyScove.Scripts
|
|
{
|
|
public class ParkourController : MonoBehaviour
|
|
{
|
|
[SerializeField] private InputReader inputReader;
|
|
EnvironmentScanner environmentScanner;
|
|
Animator animator;
|
|
PlayerController playerController;
|
|
|
|
bool inAction;
|
|
private void Awake()
|
|
{
|
|
inputReader = GetComponent<InputReader>();
|
|
environmentScanner = GetComponent<EnvironmentScanner>();
|
|
animator = GetComponent<Animator>();
|
|
playerController = GetComponent<PlayerController>();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
inputReader.OnJumpEvent += HandleParkour;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
inputReader.OnJumpEvent -= HandleParkour;
|
|
}
|
|
|
|
private void HandleParkour()
|
|
{
|
|
var hitData = environmentScanner.ObstacleCheck();
|
|
|
|
if (hitData.forwardHitFound)
|
|
{
|
|
StartCoroutine(DoParkourAction());
|
|
}
|
|
}
|
|
|
|
IEnumerator DoParkourAction()
|
|
{
|
|
inAction = true;
|
|
playerController.SetControl(false);
|
|
|
|
animator.CrossFade("Step Up", 0.1f);
|
|
yield return null;
|
|
|
|
var animationState = animator.GetNextAnimatorStateInfo(0);
|
|
|
|
yield return new WaitForSeconds(animationState.length);
|
|
|
|
playerController.SetControl(true);
|
|
inAction = false;
|
|
}
|
|
}
|
|
}
|