feat: 회피 상태와 스킬 시작 판정 분리

- CanEvade를 제거하고 IsEvading 상태와 CanStartSkill 판정으로 정리
- 침묵 중 회피 상태 유지와 회피 스킬 차단 규칙을 반영
- 자동 검증 러너와 디버그 HUD에 회피 상호작용 검증을 추가
This commit is contained in:
2026-03-19 18:51:41 +09:00
parent 975dea8b93
commit 0c26853b2a
7 changed files with 118 additions and 26 deletions

View File

@@ -55,6 +55,12 @@ namespace Colosseum.Player
/// </summary>
public SkillData CurrentSkill => skillController != null ? skillController.CurrentSkill : null;
/// <summary>
/// 현재 시전 중인 스킬이 회피 스킬일 때의 회피 상태 여부.
/// 침묵은 회피 상태 자체를 끊지 않으며, 회피 스킬의 신규 사용만 막습니다.
/// </summary>
public bool IsEvading => IsCastingSkill && CurrentSkill != null && CurrentSkill.IsEvadeSkill;
/// <summary>
/// 입력을 받아도 되는지 여부
/// </summary>
@@ -71,14 +77,27 @@ namespace Colosseum.Player
public bool CanJump => CanReceiveInput && !IsStunned && !BlocksJumpForCurrentSkill();
/// <summary>
/// 스킬 사용 가능 여부
/// 일반 스킬 시작 가능 여부
/// </summary>
public bool CanUseSkills => CanReceiveInput && !IsStunned && !IsSilenced && !BlocksSkillUseForCurrentSkill();
public bool CanUseSkills => CanReceiveInput && !IsStunned && !IsSilenced && !IsEvading && !BlocksSkillUseForCurrentSkill();
/// <summary>
/// 회피 사용 가능 여부
/// 특정 스킬의 시작 가능 여부.
/// 회피 스킬도 일반 스킬과 같은 시작 판정을 사용하되, 현재 시전 중인 스킬의 회피 차단 정책을 따릅니다.
/// </summary>
public bool CanEvade => CanReceiveInput && !IsStunned && !IsSilenced && !BlocksEvadeForCurrentSkill();
public bool CanStartSkill(SkillData skill)
{
if (skill == null)
return false;
if (!CanReceiveInput || IsStunned || IsSilenced || IsEvading)
return false;
if (skill.IsEvadeSkill)
return !BlocksEvadeForCurrentSkill();
return !BlocksSkillUseForCurrentSkill();
}
/// <summary>
/// 현재 이동 속도 배율