123 lines
3.9 KiB
C#
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;
|
|||
|
|
}
|
|||
|
|
}
|