using UnityEngine; public class RoomManager : MonoBehaviour { [Header("이 방에 있는 몬스터들")] [Tooltip("이 방에 속한 몬스터들을 전부 등록하세요.")] public MonsterClass[] monstersInRoom; // 인스펙터에서 드래그해서 채우기 [Header("보상 설정")] [SerializeField] private int clearXP = 20; // 방 클리어 기본 XP [SerializeField] private int noHitBonusXP = 10; // 무피격 보너스 XP private bool roomCleared = false; private bool playerTookDamageThisRoom = false; // 이 방에서 플레이어가 한 번이라도 맞았는지 private void Start() { roomCleared = false; playerTookDamageThisRoom = false; } private void Update() { if (roomCleared) return; // [테스트용] C 키를 누르면 몬스터가 없어도 강제로 방 클리어! if (Input.GetKeyDown(KeyCode.C)) { Debug.Log("[Room Test] 몬스터 무시하고 강제 클리어(C키)"); ClearRoom(); // 복잡한 코드 싹 지우고 그냥 함수를 직접 부릅니다! return; // 클리어 했으니 아래 로직은 실행 안 함 } // 몬스터가 등록되어 있지 않으면 아래의 '몬스터 죽음 체크'를 할 필요가 없음 if (monstersInRoom == null || monstersInRoom.Length == 0) return; // 모든 몬스터가 죽었는지 체크 bool allDead = true; foreach (var mob in monstersInRoom) { if (mob != null && !mob.IsDead) { allDead = false; break; } } if (allDead) { ClearRoom(); } } // 이 방을 클리어했을 때 한 번만 호출 // 이 방을 클리어했을 때 한 번만 호출 private void ClearRoom() { roomCleared = true; Debug.Log($"[Room] {gameObject.name} 클리어!"); if (ObsessionSystem.instance != null) { // ⭐ 1) 방 클리어 전용 XP 바구니에 넣기 ObsessionSystem.instance.AddStageClearXP(clearXP); // ⭐ 2) 무피격 보너스 전용 XP 바구니에 넣기 if (!playerTookDamageThisRoom) { ObsessionSystem.instance.AddPerfectClearXP(noHitBonusXP); Debug.Log($"[Room] 무피격 클리어! +{noHitBonusXP}XP"); } // 3) 방 클리어 카운트 증가 (사망 보너스용) ObsessionSystem.instance.NotifyRoomCleared(); } } // TODO: 여기서 문 열기, 포탈 활성화, 다음 방 트리거나 연출 넣으면 됨 // ex) if (door != null) door.Open(); // PlayerHealth에서 호출할 함수: 이 방에서 플레이어가 데미지를 처음 입었을 때 public void NotifyPlayerDamaged() { playerTookDamageThisRoom = true; } } // TODO: 여기서 문 열기, 포탈 활성화, 다음 방 트리거나 연출 넣으면 됨 // ex) if (door != null) door.Open();