feat: 보스 패턴 페이즈 제한을 애셋 기반 minPhase로 통합
- BossPatternData에 minPhase 필드 추가 (기본값 1, Inspector 설정 가능) - BossCombatBehaviorContext의 signatureMinPhase를 minPhase로 대체 - IsPatternReady와 CheckPatternReadyActionBase에 Phase 체크 통합 - BT 경로와 Update 경로 모두 일관되게 Phase 제한 적용 - 집행개시 패턴 minPhase=3, 점프 패턴 minPhase=2 설정
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
%YAML 1.1
|
%YAML 1.1
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
--- !u!114 &11400000
|
--- !u!114 &11400000
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@@ -24,4 +24,4 @@ MonoBehaviour:
|
|||||||
Skill: {fileID: 11400000, guid: 16321efbd1f2498458683bac7605b054, type: 2}
|
Skill: {fileID: 11400000, guid: 16321efbd1f2498458683bac7605b054, type: 2}
|
||||||
Duration: 0
|
Duration: 0
|
||||||
cooldown: 1
|
cooldown: 1
|
||||||
|
minPhase: 2
|
||||||
|
|||||||
@@ -21,3 +21,4 @@ MonoBehaviour:
|
|||||||
Skill: {fileID: 0}
|
Skill: {fileID: 0}
|
||||||
Duration: 0
|
Duration: 0
|
||||||
cooldown: 45
|
cooldown: 45
|
||||||
|
minPhase: 3
|
||||||
|
|||||||
@@ -29,6 +29,12 @@ public abstract partial class CheckPatternReadyActionBase : Action
|
|||||||
return Status.Failure;
|
return Status.Failure;
|
||||||
|
|
||||||
BossPatternData pattern = context.GetPattern(PatternRole);
|
BossPatternData pattern = context.GetPattern(PatternRole);
|
||||||
|
if (pattern == null)
|
||||||
|
return Status.Failure;
|
||||||
|
|
||||||
|
if (context.CurrentPatternPhase < pattern.MinPhase)
|
||||||
|
return Status.Failure;
|
||||||
|
|
||||||
return UsePatternAction.IsPatternReady(GameObject, pattern) ? Status.Success : Status.Failure;
|
return UsePatternAction.IsPatternReady(GameObject, pattern) ? Status.Success : Status.Failure;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,14 @@ namespace Colosseum.AI
|
|||||||
[Tooltip("패턴 완료 후 다시 사용 가능해지기까지의 시간")]
|
[Tooltip("패턴 완료 후 다시 사용 가능해지기까지의 시간")]
|
||||||
[SerializeField] private float cooldown = 5f;
|
[SerializeField] private float cooldown = 5f;
|
||||||
|
|
||||||
|
[Header("페이즈 제한")]
|
||||||
|
[Min(1)]
|
||||||
|
[Tooltip("이 패턴을 사용하기 시작하는 최소 페이즈 (1=Phase 1부터)")]
|
||||||
|
[SerializeField] private int minPhase = 1;
|
||||||
|
|
||||||
public string PatternName => patternName;
|
public string PatternName => patternName;
|
||||||
public IReadOnlyList<PatternStep> Steps => steps;
|
public IReadOnlyList<PatternStep> Steps => steps;
|
||||||
public float Cooldown => cooldown;
|
public float Cooldown => cooldown;
|
||||||
|
public int MinPhase => minPhase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,9 +91,6 @@ namespace Colosseum.Enemy
|
|||||||
[Min(1)] [SerializeField] protected int phase3SecondaryInterval = 2;
|
[Min(1)] [SerializeField] protected int phase3SecondaryInterval = 2;
|
||||||
|
|
||||||
[Header("Signature Pattern")]
|
[Header("Signature Pattern")]
|
||||||
[Tooltip("시그니처 패턴을 사용하기 시작하는 최소 페이즈")]
|
|
||||||
[Min(1)] [SerializeField] protected int signatureMinPhase = 2;
|
|
||||||
|
|
||||||
[Tooltip("시그니처 패턴 차단에 필요한 누적 피해 비율")]
|
[Tooltip("시그니처 패턴 차단에 필요한 누적 피해 비율")]
|
||||||
[Range(0f, 1f)] [SerializeField] protected float signatureRequiredDamageRatio = 0.1f;
|
[Range(0f, 1f)] [SerializeField] protected float signatureRequiredDamageRatio = 0.1f;
|
||||||
|
|
||||||
@@ -497,16 +494,13 @@ namespace Colosseum.Enemy
|
|||||||
if (IsBehaviorSuppressed)
|
if (IsBehaviorSuppressed)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (CurrentPatternPhase < signatureMinPhase)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (activePatternCoroutine != null || isSignaturePatternActive)
|
if (activePatternCoroutine != null || isSignaturePatternActive)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (bossEnemy.IsDead || bossEnemy.IsTransitioning || skillController.IsPlayingAnimation)
|
if (bossEnemy.IsDead || bossEnemy.IsTransitioning || skillController.IsPlayingAnimation)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return UsePatternAction.IsPatternReady(gameObject, signaturePattern);
|
return IsPatternReady(signaturePattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -692,6 +686,9 @@ namespace Colosseum.Enemy
|
|||||||
if (pattern == null || pattern.Steps == null || pattern.Steps.Count == 0)
|
if (pattern == null || pattern.Steps == null || pattern.Steps.Count == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (CurrentPatternPhase < pattern.MinPhase)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!patternCooldownTracker.TryGetValue(pattern, out float readyTime))
|
if (!patternCooldownTracker.TryGetValue(pattern, out float readyTime))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user