feat: 무적 이상상태 기반 구르기 스킬 정리
- 무적 이상상태 데이터와 효과 에셋을 추가 - 구르기를 일반 스킬이 무적 상태를 부여하는 구조로 변경 - 대미지 처리와 플레이어 상태 판정이 무적 이상상태를 참조하도록 정리
This commit is contained in:
@@ -26,11 +26,13 @@ namespace Colosseum.Abnormalities
|
||||
// 제어 효과 상태
|
||||
private int stunCount;
|
||||
private int silenceCount;
|
||||
private int invincibleCount;
|
||||
private float slowMultiplier = 1f;
|
||||
|
||||
// 클라이언트 판정용 제어 효과 동기화 변수
|
||||
private NetworkVariable<int> syncedStunCount = new NetworkVariable<int>(0);
|
||||
private NetworkVariable<int> syncedSilenceCount = new NetworkVariable<int>(0);
|
||||
private NetworkVariable<int> syncedInvincibleCount = new NetworkVariable<int>(0);
|
||||
private NetworkVariable<float> syncedSlowMultiplier = new NetworkVariable<float>(1f);
|
||||
|
||||
// 네트워크 동기화용 데이터
|
||||
@@ -46,6 +48,11 @@ namespace Colosseum.Abnormalities
|
||||
/// </summary>
|
||||
public bool IsSilenced => GetCurrentSilenceCount() > 0;
|
||||
|
||||
/// <summary>
|
||||
/// 무적 상태 여부
|
||||
/// </summary>
|
||||
public bool IsInvincible => GetCurrentInvincibleCount() > 0;
|
||||
|
||||
/// <summary>
|
||||
/// 이동 속도 배율 (1.0 = 기본, 0.5 = 50% 감소)
|
||||
/// </summary>
|
||||
@@ -110,6 +117,7 @@ namespace Colosseum.Abnormalities
|
||||
|
||||
syncedStunCount.OnValueChanged += HandleSyncedStunChanged;
|
||||
syncedSilenceCount.OnValueChanged += HandleSyncedSilenceChanged;
|
||||
syncedInvincibleCount.OnValueChanged += HandleSyncedInvincibleChanged;
|
||||
syncedSlowMultiplier.OnValueChanged += HandleSyncedSlowChanged;
|
||||
|
||||
if (networkController != null)
|
||||
@@ -128,6 +136,7 @@ namespace Colosseum.Abnormalities
|
||||
syncedAbnormalities.OnListChanged -= OnSyncedAbnormalitiesChanged;
|
||||
syncedStunCount.OnValueChanged -= HandleSyncedStunChanged;
|
||||
syncedSilenceCount.OnValueChanged -= HandleSyncedSilenceChanged;
|
||||
syncedInvincibleCount.OnValueChanged -= HandleSyncedInvincibleChanged;
|
||||
syncedSlowMultiplier.OnValueChanged -= HandleSyncedSlowChanged;
|
||||
|
||||
if (networkController != null)
|
||||
@@ -418,6 +427,10 @@ namespace Colosseum.Abnormalities
|
||||
case ControlType.Slow:
|
||||
slowMultiplier = Mathf.Min(slowMultiplier, data.slowMultiplier);
|
||||
break;
|
||||
|
||||
case ControlType.Invincible:
|
||||
invincibleCount++;
|
||||
break;
|
||||
}
|
||||
|
||||
SyncControlEffects();
|
||||
@@ -438,6 +451,10 @@ namespace Colosseum.Abnormalities
|
||||
case ControlType.Slow:
|
||||
RecalculateSlowMultiplier();
|
||||
break;
|
||||
|
||||
case ControlType.Invincible:
|
||||
invincibleCount = Mathf.Max(0, invincibleCount - 1);
|
||||
break;
|
||||
}
|
||||
|
||||
SyncControlEffects();
|
||||
@@ -460,6 +477,8 @@ namespace Colosseum.Abnormalities
|
||||
|
||||
private int GetCurrentSilenceCount() => IsServer ? silenceCount : syncedSilenceCount.Value;
|
||||
|
||||
private int GetCurrentInvincibleCount() => IsServer ? invincibleCount : syncedInvincibleCount.Value;
|
||||
|
||||
private float GetCurrentSlowMultiplier() => IsServer ? slowMultiplier : syncedSlowMultiplier.Value;
|
||||
|
||||
private void SyncControlEffects()
|
||||
@@ -469,6 +488,7 @@ namespace Colosseum.Abnormalities
|
||||
|
||||
syncedStunCount.Value = stunCount;
|
||||
syncedSilenceCount.Value = silenceCount;
|
||||
syncedInvincibleCount.Value = invincibleCount;
|
||||
syncedSlowMultiplier.Value = slowMultiplier;
|
||||
}
|
||||
|
||||
@@ -541,6 +561,14 @@ namespace Colosseum.Abnormalities
|
||||
OnAbnormalitiesChanged?.Invoke();
|
||||
}
|
||||
|
||||
private void HandleSyncedInvincibleChanged(int oldValue, int newValue)
|
||||
{
|
||||
if (oldValue == newValue)
|
||||
return;
|
||||
|
||||
OnAbnormalitiesChanged?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 사망 시 활성 이상 상태를 모두 제거합니다.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user