feat: 무적 이상상태 기반 구르기 스킬 정리
- 무적 이상상태 데이터와 효과 에셋을 추가 - 구르기를 일반 스킬이 무적 상태를 부여하는 구조로 변경 - 대미지 처리와 플레이어 상태 판정이 무적 이상상태를 참조하도록 정리
This commit is contained in:
@@ -104,9 +104,9 @@ namespace Colosseum.Player
|
||||
Verify("초기 상태: 사망 아님", !networkController.IsDead);
|
||||
Verify("초기 상태: 이동 가능", actionState.CanMove);
|
||||
Verify("초기 상태: 스킬 사용 가능", actionState.CanUseSkills);
|
||||
Verify("초기 상태: 회피 상태 아님", !actionState.IsEvading);
|
||||
Verify("초기 상태: 무적 상태 아님", !actionState.IsDamageImmune);
|
||||
|
||||
yield return RunEvadeVerification();
|
||||
yield return RunInvincibilitySkillVerification();
|
||||
|
||||
abnormalityManager.ApplyAbnormality(stunData, gameObject);
|
||||
yield return new WaitForSeconds(settleDelay);
|
||||
@@ -234,48 +234,46 @@ namespace Colosseum.Player
|
||||
#endif
|
||||
}
|
||||
|
||||
private IEnumerator RunEvadeVerification()
|
||||
private IEnumerator RunInvincibilitySkillVerification()
|
||||
{
|
||||
SkillData evadeSkill = skillInput != null ? skillInput.GetSkill(6) : null;
|
||||
if (evadeSkill == null)
|
||||
SkillData invincibilitySkill = skillInput != null ? skillInput.GetSkill(6) : null;
|
||||
if (invincibilitySkill == null)
|
||||
{
|
||||
AppendLine("[SKIP] 회피 검증: 회피 슬롯 스킬이 없습니다.");
|
||||
AppendLine("[SKIP] 무적 스킬 검증: 7번 슬롯 스킬이 없습니다.");
|
||||
yield break;
|
||||
}
|
||||
|
||||
if (skillController == null || !skillController.ExecuteSkill(evadeSkill))
|
||||
if (skillController == null || !skillController.ExecuteSkill(invincibilitySkill))
|
||||
{
|
||||
Verify("회피 검증: 스킬 실행 성공", false);
|
||||
Verify("무적 스킬 검증: 스킬 실행 성공", false);
|
||||
yield break;
|
||||
}
|
||||
|
||||
yield return WaitForConditionOrTimeout(() => actionState.IsDamageImmune, GetSkillDuration(invincibilitySkill) + 0.5f);
|
||||
|
||||
float healthBeforeDamage = networkController.Health;
|
||||
|
||||
Verify("무적 적용: IsDamageImmune", actionState.IsDamageImmune);
|
||||
networkController.TakeDamageRpc(15f);
|
||||
yield return new WaitForSeconds(settleDelay);
|
||||
|
||||
Verify("회피 적용: IsEvading", actionState.IsEvading);
|
||||
Verify("회피 적용: 이동 불가", !actionState.CanMove);
|
||||
Verify("회피 적용: 점프 불가", !actionState.CanJump);
|
||||
Verify("회피 적용: 일반 스킬 사용 불가", !actionState.CanUseSkills);
|
||||
Verify("회피 적용: 회피 스킬 연속 사용 불가", !actionState.CanStartSkill(evadeSkill));
|
||||
Verify("무적 적용: 대미지 무시", Mathf.Approximately(networkController.Health, healthBeforeDamage));
|
||||
|
||||
if (silenceData != null)
|
||||
{
|
||||
abnormalityManager.ApplyAbnormality(silenceData, gameObject);
|
||||
yield return WaitForConditionOrTimeout(() => actionState.IsSilenced, settleDelay + 0.5f);
|
||||
|
||||
Verify("회피 중 침묵 적용: IsSilenced", actionState.IsSilenced);
|
||||
Verify("회피 중 침묵 적용: 회피 상태 유지", actionState.IsEvading);
|
||||
Verify("회피 중 침묵 적용: 회피 스킬 신규 사용 불가", !actionState.CanStartSkill(evadeSkill));
|
||||
Verify("무적 중 침묵 적용: IsSilenced", actionState.IsSilenced);
|
||||
Verify("무적 중 침묵 적용: 무적 상태 유지", actionState.IsDamageImmune);
|
||||
Verify("무적 중 침묵 적용: 스킬 신규 사용 불가", !actionState.CanStartSkill(invincibilitySkill));
|
||||
|
||||
abnormalityManager.RemoveAbnormality(silenceData);
|
||||
yield return new WaitForSeconds(settleDelay);
|
||||
}
|
||||
|
||||
yield return WaitForConditionOrTimeout(() => !actionState.IsEvading, GetSkillDuration(evadeSkill) + 1.5f);
|
||||
yield return WaitForConditionOrTimeout(() => !actionState.IsDamageImmune, GetSkillDuration(invincibilitySkill) + 1.5f);
|
||||
|
||||
Verify("회피 해제: IsEvading false", !actionState.IsEvading);
|
||||
Verify("회피 해제: 이동 가능 복구", actionState.CanMove);
|
||||
Verify("회피 해제: 스킬 사용 가능 복구", actionState.CanUseSkills);
|
||||
Verify("회피 해제: 회피 스킬 재사용 가능 복구", actionState.CanStartSkill(evadeSkill));
|
||||
Verify("무적 해제: IsDamageImmune false", !actionState.IsDamageImmune);
|
||||
}
|
||||
|
||||
private float GetSkillDuration(SkillData skill)
|
||||
|
||||
Reference in New Issue
Block a user