DEG-143-대시 쿨타임 적용

This commit is contained in:
99jamin 2025-05-13 13:25:55 +09:00
parent bb8a9aea3f
commit 88839f28a5

View File

@ -26,6 +26,7 @@ public class PlayerController : CharacterBase, IObserver<GameObject>
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<GameObject>
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<GameObject>
//강화 적용
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<GameObject>
_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<GameObject>
{
if (!_isBattle) return;
// 쿨타임 중이면 무시
if (IsDashOnCooldown)
{
Debug.Log("대시 쿨타임 중");
return;
}
// 만약 공격 중이면 강제로 공격 종료
if (_currentAction == _attackAction && _attackAction.IsActive)
{
@ -252,6 +273,9 @@ public class PlayerController : CharacterBase, IObserver<GameObject>
_currentAction = _actionDash;
_actionDash.StartAction(this);
// 쿨타임 시작
dashCooldownTimer = dashCooldownDuration;
}
public void OnActionEnded(IPlayerAction action)