Projext/Assets/Scripts/Obsession/BossPatternPhases.cs
2026-02-10 17:04:33 +09:00

123 lines
3.9 KiB
C#

using UnityEngine;
public class BossPatternPhases : MonoBehaviour
{
// [Header]는 유니티 Inspector 창에서 폴더처럼 보이게 해줌
[Header("🔧 패턴 설정")]
[SerializeField] private int totalPhases = 3; // 전체 패턴 구간 수 (Inspector에서 조절 가능)
[Header("💎 XP 설정")]
[SerializeField] private int phaseClearXP = 10; // 한 구간 통과 시 주는 XP
[SerializeField] private int fullClearBonus = 30; // 모든 구간 통과 시 보너스 XP
[SerializeField] private int hitPenalty = -5; // 피격 시 감점 XP (0으로 하면 감점 없음)
// [SerializeField]는 인스펙터에서 실시간으로 볼 수 있게 해줌
[Header("🚩 상태 확인용")]
[SerializeField] private int currentPhase = 0; // 현재 진행 중인 구간 (0: 시작 전)
[SerializeField] private bool isPatternActive = false; // 패턴이 진행 중인지
[SerializeField] private bool wasHitThisPhase = false; // 이번 구간 중 피격당했는지
// ★ 초기화
private void Start()
{
ResetPattern();
}
// ★ 패턴 전체 리셋 (새로운 패턴 시작 시 호출)
public void ResetPattern()
{
currentPhase = 0;
wasHitThisPhase = false;
isPatternActive = false;
Debug.Log("[보스] 패턴 초기화 완료!");
}
// ★ 패턴 시작 (보스 AI에서 호출)
public void StartPattern()
{
if (currentPhase >= totalPhases)
{
Debug.Log("이미 모든 패턴을 완료했어요!");
return;
}
isPatternActive = true;
wasHitThisPhase = false;
Debug.Log($"🔔 [페이즈 {currentPhase + 1}] 시작! 회피하세요!");
// ★ ★ ★ 여기서 보스의 애니메이션/이펙트 시작하면 됨 ★ ★ ★
}
// ★ 플레이어가 피격당했을 때 호출 (PlayerHealth에서 연결)
public void OnPlayerHit()
{
if (!isPatternActive) return;
wasHitThisPhase = true;
Debug.Log($"💥 [페이즈 {currentPhase + 1}] 중 피격당함! (XP 감점)");
// 피격 시 감점 처리 (필요하면)
if (hitPenalty != 0 && ObsessionSystem.instance != null)
{
ObsessionSystem.instance.AddRunXP(hitPenalty);
}
}
// ★ 현재 구간을 성공적으로 통과했을 때 호출 (보스 AI에서 호출)
public void ClearCurrentPhase()
{
if (!isPatternActive) return;
// 피격당했는지 확인
if (wasHitThisPhase)
{
Debug.Log($"❌ [페이즈 {currentPhase + 1}] 실패... 다음 구간 진행");
}
else
{
// ★ 성공 시 XP 지급
if (ObsessionSystem.instance != null)
{
ObsessionSystem.instance.AddRunXP(phaseClearXP);
Debug.Log($"✅ [페이즈 {currentPhase + 1}] 성공! +{phaseClearXP}XP");
}
}
// 다음 구간으로
currentPhase++;
wasHitThisPhase = false;
// 모든 구간을 완료했는가?
if (currentPhase >= totalPhases)
{
Debug.Log("🎉 모든 패턴 완료!");
FullClearBonus();
isPatternActive = false;
}
}
// ★ 모든 구간 통과 시 보너스
private void FullClearBonus()
{
if (ObsessionSystem.instance != null)
{
ObsessionSystem.instance.AddRunXP(fullClearBonus);
Debug.Log($"🌟 전체 패턴 클리어 보너스 +{fullClearBonus}XP!");
}
}
// ★ 디버그용: 현재 상태를 콘솔에 출력
private void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
Debug.Log($"[패턴 상태] 현재 구간: {currentPhase + 1}/{totalPhases}, 활성: {isPatternActive}");
}
}
// BossPatternPhases.cs에 추가
public bool IsPatternActive()
{
return isPatternActive;
}
}