diff --git a/Assets/JAY/Scripts/PlayerController.cs b/Assets/JAY/Scripts/PlayerController.cs index 651f91bc..9742975c 100644 --- a/Assets/JAY/Scripts/PlayerController.cs +++ b/Assets/JAY/Scripts/PlayerController.cs @@ -26,6 +26,7 @@ public class PlayerController : CharacterBase, IObserver private WeaponController _weaponController; private float attackUpgradeLevel; private float moveSpeedUpgradeLevel; + private float dashCooldownUpgradeLevel; private IPlayerState _currentStateClass { get; set; } private IPlayerAction _currentAction; @@ -50,6 +51,13 @@ public class PlayerController : CharacterBase, IObserver public CharacterController CharacterController => _characterController; public bool IsBattle => _isBattle; public Transform DashEffectAnchor => dashEffectAnchor; + + // 대시 쿨타임 관련 + [SerializeField] private float dashCooldownDuration = 1.5f; + private float dashCooldownTimer = 0f; + public bool IsDashOnCooldown => dashCooldownTimer > 0f; + public float DashCooldownRatio => dashCooldownTimer / dashCooldownDuration; + private void Awake() { @@ -77,9 +85,11 @@ public class PlayerController : CharacterBase, IObserver //강화 적용 attackUpgradeLevel = 1 + (float)UpgradeManager.Instance.upgradeStat.CurrentUpgradeLevel(StatType.AttackPower)/2; moveSpeedUpgradeLevel = 1 + (float)UpgradeManager.Instance.upgradeStat.CurrentUpgradeLevel(StatType.MoveSpeed)/2; + dashCooldownUpgradeLevel = (float)UpgradeManager.Instance.upgradeStat.CurrentUpgradeLevel(StatType.DashCoolDown)/4; attackPower *= attackUpgradeLevel; moveSpeed *= moveSpeedUpgradeLevel; + dashCooldownDuration -= dashCooldownUpgradeLevel; } private void Update() @@ -89,6 +99,10 @@ public class PlayerController : CharacterBase, IObserver _playerStates[CurrentState].Update(); } + // 대시 쿨타임 진행 + if (dashCooldownTimer > 0f) + dashCooldownTimer -= Time.deltaTime; + // Hit 상태거나 게임 끝났을 땐 땐 입력 무시 if (CurrentState == PlayerState.Hit || CurrentState == PlayerState.Dead || CurrentState == PlayerState.Win) return; @@ -239,6 +253,13 @@ public class PlayerController : CharacterBase, IObserver { if (!_isBattle) return; + // 쿨타임 중이면 무시 + if (IsDashOnCooldown) + { + Debug.Log("대시 쿨타임 중"); + return; + } + // 만약 공격 중이면 강제로 공격 종료 if (_currentAction == _attackAction && _attackAction.IsActive) { @@ -252,6 +273,9 @@ public class PlayerController : CharacterBase, IObserver _currentAction = _actionDash; _actionDash.StartAction(this); + + // 쿨타임 시작 + dashCooldownTimer = dashCooldownDuration; } public void OnActionEnded(IPlayerAction action)