using System.Collections.Generic; using BlueWater.Items; using BlueWater.Maps; using DG.Tweening; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; namespace BlueWater.Uis { public class CombatUiManager : Singleton { [field: Title("UI")] [field: SerializeField] public Canvas MainCanvas { get; private set; } [field: SerializeField] public RectTransform MainCanvasRect { get; private set; } [field: SerializeField] public CombatSkillUi CombatSkillUi { get; private set; } [field: SerializeField] public FieldBossHealthPointUi FieldBossHealthPointUi { get; private set; } [field: SerializeField] public PlayerHealthPointUi PlayerHealthPointUi { get; private set; } [field: SerializeField] public ItemLootUi ItemLootUi { get; private set; } [field: SerializeField] public CombatItemInventoryUi CombatItemInventoryUi { get; private set; } [field: SerializeField] public GameOverPopupUi GameOverPopupUi { get; private set; } [field: SerializeField] public ClearPopupUi ClearPopupUi { get; private set; } [field: SerializeField] public MenuPopupUi CombatMenuPopupUi { get; private set; } [field: SerializeField] public CombatTutorialUi CombatTutorialUi { get; private set; } [field: SerializeField] public MenuPopupUi DevelopMenuPopupUi { get; private set; } [SerializeField] private Image _fadeImage; public List PopupUiList { get; private set; } protected override void OnAwake() { InitializeComponents(); } private void Start() { PopupUi.OnPopupUiOpenEvent += RegisterPopup; PopupUi.OnPopupUiCloseEvent += UnregisterPopup; EventManager.OnFadeInOut += FadeInOut; Invoke(nameof(StartTutorial), 0.1f); } private void StartTutorial() { CombatTutorialUi.ShowFirstTutorialUi(); } private void OnDestroy() { if (Quitting) return; PopupUi.OnPopupUiOpenEvent -= RegisterPopup; PopupUi.OnPopupUiCloseEvent -= UnregisterPopup; EventManager.OnFadeInOut -= FadeInOut; } [Button("셋팅 초기화")] private void InitializeComponents() { MainCanvas = GetComponent(); MainCanvasRect = MainCanvas.GetComponent(); CombatSkillUi = MainCanvas.transform.Find("CombatSkillUi").GetComponent(); FieldBossHealthPointUi = MainCanvas.transform.Find("FieldBossHealthPointUi").GetComponent(); PlayerHealthPointUi = MainCanvas.transform.Find("PlayerHealthPointUi").GetComponent(); ItemLootUi = MainCanvas.transform.Find("ItemLootUi").GetComponent(); CombatItemInventoryUi = MainCanvas.transform.Find("CombatItemInventoryUi").GetComponent(); GameOverPopupUi = MainCanvas.transform.Find("GameOverPopupUi").GetComponent(); ClearPopupUi = MainCanvas.transform.Find("ClearPopupUi").GetComponent(); CombatMenuPopupUi = MainCanvas.transform.Find("CombatMenuPopupUi").GetComponent(); CombatTutorialUi = MainCanvas.transform.Find("CombatTutorialUi").GetComponent(); DevelopMenuPopupUi = MainCanvas.transform.Find("DevelopMenuPopupUi").GetComponent(); _fadeImage = MainCanvas.transform.Find("FadeImage").GetComponent(); PopupUiList = new List(8); } private void RegisterPopup(PopupUi popup) { if (!PopupUiList.Contains(popup)) { PopupUiList.Add(popup); } } private void UnregisterPopup(PopupUi popup) { if (PopupUiList.Contains(popup)) { PopupUiList.Remove(popup); } } public void CloseLastPopup() { if (PopupUiList.Count <= 0) return; PopupUiList[^1].Close(); } public void CloseAllPopup() { var tempList = new List(PopupUiList); foreach (var popup in tempList) { popup.Close(); } PopupUiList.Clear(); } public void FadeInOut(float fadeInTime, float fadeOutTime, Color? fadeColor = null, float delayAfterFadeIn = 0f) { var newColor = new Color(1f, 1f, 1f, 0f); if (fadeColor != null) { newColor = (Color)fadeColor; } _fadeImage.color = newColor; _fadeImage.enabled = true; _fadeImage.DOFade(1f, fadeInTime).OnComplete(() => { DOVirtual.DelayedCall(delayAfterFadeIn, () => { _fadeImage.DOFade(0f, fadeOutTime).OnComplete(() => { _fadeImage.enabled = false; }); }); }); } public void HardResetAllMaps() { MapManager.Instance.HardResetAllMaps(); CloseAllPopup(); } public void RestartCurrentStage() { MapManager.Instance.RestartCurrentMap(); CloseAllPopup(); } public void MoveSelectStage(int stage) { MapManager.Instance.MoveSelectStage(stage); CloseAllPopup(); } public void MoveTitleScene() { PostProcessingManager.Instance.ToggleRendererFeature(RendererFeatureName.GrayscaleRenderPassFeature, false); VisualFeedbackManager.Instance.SetBaseTimeScale(1f); SceneManager.LoadScene("00.CombatTitle"); } public void QuitGame() { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else Application.Quit(); #endif } } }