diff --git a/Assets/KSH/DungeonLogic.cs b/Assets/KSH/DungeonLogic.cs index 1bc28af7..ee321abf 100644 --- a/Assets/KSH/DungeonLogic.cs +++ b/Assets/KSH/DungeonLogic.cs @@ -15,10 +15,6 @@ public class DungeonLogic : MonoBehaviour private PlayerController _player; private EnemyController _enemy; - - // 던전 결과 이벤트 - public event Action OnDungeonSuccess; - public event Action OnDungeonFailure; private void Awake() { diff --git a/Assets/KSH/PlayerStats.cs b/Assets/KSH/PlayerStats.cs index ea614d58..435a86eb 100644 --- a/Assets/KSH/PlayerStats.cs +++ b/Assets/KSH/PlayerStats.cs @@ -50,6 +50,7 @@ public class PlayerStats : MonoBehaviour private SpeechBubbleFollower _speechBubbleFollower; private bool _isActiveBubble; private bool _hasShownBubbleToday; // 하루에 말풍선 하나만 표시하기 + private InteractionAnimationPanelController _interactionAnimation; // 상호작용 패널 Active 여부 확인 private int _mealCount; public int MealCount => _mealCount; @@ -142,8 +143,7 @@ public class PlayerStats : MonoBehaviour ShowBubble(); } } - - private InteractionAnimationPanelController _interactionAnimation; + public void SetInteractionPanelController(InteractionAnimationPanelController panelController) { _interactionAnimation = panelController; @@ -151,7 +151,7 @@ public class PlayerStats : MonoBehaviour public void ShowBubble() { - if (_interactionAnimation.IsPanelActive()) return; + if (_interactionAnimation != null && _interactionAnimation.IsPanelActive()) return; if(_isActiveBubble) _speechBubbleFollower.ShowMessage(); diff --git a/Assets/Scripts/Common/Dialogue/ChatWindowController.cs b/Assets/Scripts/Common/Dialogue/ChatWindowController.cs index 428cd556..8e4c61be 100644 --- a/Assets/Scripts/Common/Dialogue/ChatWindowController.cs +++ b/Assets/Scripts/Common/Dialogue/ChatWindowController.cs @@ -35,8 +35,9 @@ public enum GamePhase // 단계별로 출력되는 대화가 달라짐 { Intro, // 인트로 설명문 Gameplay, // 게임 진행 팁? 등 - End, // 엔딩 대화 - ZeroEnd + End, // 회고 엔딩 + ZeroEnd, // 평판 0 엔딩 + FailEnd // 같은 스테이지 3회 실패 엔딩 } public class ChatWindowController : MonoBehaviour, IPointerClickHandler diff --git a/Assets/Scripts/Common/Dialogue/FairyDialogueManager.cs b/Assets/Scripts/Common/Dialogue/FairyDialogueManager.cs index 65fc370e..ad16eb22 100644 --- a/Assets/Scripts/Common/Dialogue/FairyDialogueManager.cs +++ b/Assets/Scripts/Common/Dialogue/FairyDialogueManager.cs @@ -90,7 +90,11 @@ public class FairyDialogueManager else if (phase == GamePhase.ZeroEnd) { StartPhaseDialogue("zero"); - } + } + else if (phase == GamePhase.FailEnd) + { + StartPhaseDialogue("fail"); + } } // 단계별 시작 대화 찾기 및 시작 diff --git a/Assets/Scripts/Common/GameManager.cs b/Assets/Scripts/Common/GameManager.cs index 871d1795..f87bffd2 100644 --- a/Assets/Scripts/Common/GameManager.cs +++ b/Assets/Scripts/Common/GameManager.cs @@ -13,6 +13,9 @@ public partial class GameManager : Singleton private int stageLevel = 1; // 스테이지 정보 public int StageLevel => stageLevel; + + private int tryStageCount = 0; + public int TryStageCount => tryStageCount; // 날짜 변경 이벤트, 추후에 UI 상의 날짜를 변경할 때 사용 public event Action OnDayChanged; @@ -79,6 +82,7 @@ public partial class GameManager : Singleton public void ChangeToGameScene() { + tryStageCount++; // 던전 시도 횟수 증가 SceneManager.LoadScene("ReDungeon"); // 던전 Scene HandleSceneAudio("Dungeon"); } @@ -86,6 +90,12 @@ public partial class GameManager : Singleton public void ChangeToHomeScene() { SceneManager.LoadScene("ReHousing"); // Home Scene + + if (tryStageCount >= 3) // 엔딩 + { + FailEnd(); + } + HandleSceneAudio("Housing"); } diff --git a/Assets/Scripts/Common/GameUtility/EndingLogic.cs b/Assets/Scripts/Common/GameUtility/EndingLogic.cs index 8e77c8a8..9e144159 100644 --- a/Assets/Scripts/Common/GameUtility/EndingLogic.cs +++ b/Assets/Scripts/Common/GameUtility/EndingLogic.cs @@ -16,51 +16,24 @@ public partial class GameManager public void ClearStage() { + tryStageCount = 0; // 시도 횟수 초기화 stageLevel++; } - private void ZeroReputationEnd() + private void ZeroReputationEnd() // 평판 0 엔딩 { - // npc와의 대화 출력, Phase = zero StartNPCDialogue(GamePhase.ZeroEnd); } + + private void FailEnd() // 같은 스테이지 3회 도전 실패 엔딩 + { + StartNPCDialogue(GamePhase.FailEnd); + } - // 엔딩 관련 메서드. 7일차에 실행 + // 회고 엔딩. 7일차에 실행 private void TriggerTimeEnding() { // npc와의 마지막 대화 출력 StartNPCDialogue(GamePhase.End); - - // 플레이어 상태에 따라 엔딩 판별 - // EndingType endingType = DetermineEnding(); - - // 엔딩 타입에 따라 다른 씬이나 UI 표시 - /*switch (endingType) - { - case EndingType.Normal: - Debug.Log("던전 공략 성공"); - // TODO: 엔딩 관련 패널 띄우기 - break; - case EndingType.Bad: - Debug.Log("던전 공략 실패"); - - break; - case EndingType.Happy: - Debug.Log("던전 공략 성공과 훌륭한 평판 작"); - - break; - }*/ - } - - // 던전 스테이지와 평판 수치로 엔딩 판별 - private EndingType DetermineEnding() - { - if (stageLevel < GameConstants.maxStage) // 현재 스테이지 1 혹은 2 - return EndingType.Bad; - - if (PlayerStats.Instance.ReputationStat >= happyEndReputation) // 평판이 일정 수치 이상 - return EndingType.Happy; - - return EndingType.Normal; } } \ No newline at end of file