using System.Collections.Generic; using BlueWater.Tycoons; using DG.Tweening; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.UI; namespace BlueWater.Uis { public class TycoonUiManager : Singleton { // Variables #region Variables [field: SerializeField] public Canvas MainCanvas { get; private set; } [field: SerializeField] public GoldUi GoldUi { get; private set; } [field: SerializeField] public TycoonUpgradeUi TycoonUpgradeUi { get; private set; } [field: SerializeField] public TycoonManagementUi TycoonManagementUi { get; private set; } [field: SerializeField] public TycoonStageUi TycoonStageUi { get; private set; } // [field: SerializeField] // public BrewingUi BrewingUi { get; private set; } [SerializeField] private Image _fadeImage; // Variables public List PopupUiList { get; private set; } #endregion // Unity events #region Unity events protected override void OnAwake() { InitializeComponents(); } private void Start() { PopupUi.OnPopupUiOpenEvent += RegisterPopup; PopupUi.OnPopupUiCloseEvent += UnregisterPopup; TycoonManager.Instance.OnTycoonOpenedEvent += TycoonOpenEvent; TycoonManager.Instance.OnTycoonClosedEvent += TycoonClosedEvent; GlobalEvents.FadeInOut += FadeInOut; } private void OnDestroy() { if (Quitting) return; PopupUi.OnPopupUiOpenEvent -= RegisterPopup; PopupUi.OnPopupUiCloseEvent -= UnregisterPopup; TycoonManager.Instance.OnTycoonOpenedEvent -= TycoonOpenEvent; TycoonManager.Instance.OnTycoonClosedEvent -= TycoonClosedEvent; GlobalEvents.FadeInOut -= FadeInOut; } #endregion // Initialize methods #region Initialize methods [Button("셋팅 초기화")] private void InitializeComponents() { MainCanvas = GetComponent(); GoldUi = transform.Find("GoldUi").GetComponent(); TycoonUpgradeUi = GetComponentInChildren(true); TycoonManagementUi = GetComponentInChildren(true); TycoonStageUi = GetComponentInChildren(true); //BrewingUi = GetComponentInChildren(true); _fadeImage = MainCanvas.transform.Find("FadeImage").GetComponent(); PopupUiList = new List(8); } #endregion // Methods #region Methods 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 bool IsPopupListEmpty() => PopupUiList.Count == 0; private void TycoonOpenEvent() { TycoonStageUi.TycoonOpenUi(); } private void TycoonClosedEvent() { TycoonStageUi.TycoonClosedUi(); TycoonManagementUi.CookMenuUi.CookUi.TycoonClosed(); TycoonManagementUi.CookMenuUi.DailyFoodMenuUi.TycoonClosed(); } 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; }); }); }); } #endregion } }