From be9b90b282aa5c20ec307fe8795b4c4e2e0f4d32 Mon Sep 17 00:00:00 2001 From: Sehyeon Date: Tue, 22 Apr 2025 17:30:13 +0900 Subject: [PATCH] =?UTF-8?q?DEG-21=20[Feat]=20=EC=82=AC=EB=A7=9D=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EB=8D=98=EC=A0=84=20=EA=B3=B5=EB=9E=B5=20=EC=A2=85=EB=A3=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/KSH/DungeonLogic.cs | 97 +++++++++++++++++++++++ Assets/KSH/DungeonLogic.cs.meta | 11 +++ Assets/Scripts/Character/CharacterBase.cs | 3 + 3 files changed, 111 insertions(+) create mode 100644 Assets/KSH/DungeonLogic.cs create mode 100644 Assets/KSH/DungeonLogic.cs.meta diff --git a/Assets/KSH/DungeonLogic.cs b/Assets/KSH/DungeonLogic.cs new file mode 100644 index 00000000..9aabac44 --- /dev/null +++ b/Assets/KSH/DungeonLogic.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +// 던전 공략 성공 +// 나가기 (혹은 강화로 이동) +// 실패 로직 +// 일상 맵으로 씬 전환 (던전에서 쫓겨났다가 재도전) +// 재도전O: 추가 체력 +// (추가 체력해서 재도전 시 플레이어와 몬스터 초기화 필요) +public class DungeonLogic : MonoBehaviour +{ + public bool isCompleted = false; // 던전 클리어 여부 + public bool isFailed = false; // 던전 실패 여부 + + private PlayerController _player; + private EnemyController _enemy; + + // 던전 결과 이벤트 + public event Action OnDungeonSuccess; + public event Action OnDungeonFailure; + + private void Start() + { + // 죽음 이벤트 구독 + if (_player != null) + { + _player.OnDeath += OnPlayerDeath; + } + + if (_enemy != null) + { + _enemy.OnDeath += OnPlayerDeath; + } + } + + // 플레이어 사망 처리 + private void OnPlayerDeath(CharacterBase player) + { + Debug.Log("player name:" + player.characterName); + if (!isFailed) + { + FailDungeon(); + } + } + + // 적 사망 처리 + private void OnEnemyDeath(CharacterBase enemy) + { + Debug.Log("enemy name:" + enemy.characterName); + // 보스 처치 확인 + if (!isCompleted) + { + CompleteDungeon(); + } + } + + // 던전 성공 처리 + public void CompleteDungeon() + { + if (!isCompleted && !isFailed) + { + isCompleted = true; + OnDungeonSuccess?.Invoke(); + + // 성공 UI 표시 ?? 강화 표기 + } + } + + // 던전 실패 처리 + public void FailDungeon() + { + if (!isCompleted && !isFailed) + { + isFailed = true; + OnDungeonFailure?.Invoke(); + + // 실패 UI 표시 ? 일상 씬으로 이동 + } + } + + // 게임 오브젝트 제거 시 이벤트 구독 해제 + private void OnDestroy() + { + if (_player != null) + { + _player.OnDeath -= OnPlayerDeath; + } + + if (_enemy != null) + { + _enemy.OnDeath -= OnEnemyDeath; + } + } +} diff --git a/Assets/KSH/DungeonLogic.cs.meta b/Assets/KSH/DungeonLogic.cs.meta new file mode 100644 index 00000000..3aba7c5a --- /dev/null +++ b/Assets/KSH/DungeonLogic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecf4896d6eb9a514e8f83175d8a33a22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Character/CharacterBase.cs b/Assets/Scripts/Character/CharacterBase.cs index 9bfa4132..4a35b463 100644 --- a/Assets/Scripts/Character/CharacterBase.cs +++ b/Assets/Scripts/Character/CharacterBase.cs @@ -16,6 +16,8 @@ public abstract class CharacterBase : MonoBehaviour [Header("상태 이상")] public List statusEffects = new List(); + + public event System.Action OnDeath; // 사망 이벤트 protected virtual void Start() { @@ -38,6 +40,7 @@ public abstract class CharacterBase : MonoBehaviour { Debug.Log($"{characterName}이 사망했습니다."); // TODO: 사망 처리 + OnDeath?.Invoke(this); } // 상태이상 추가 메서드