using System.Collections; using System.Collections.Generic; using UnityEngine; using Utility; namespace ProjectBase.UI { public class UIViewLayerController : MonoBehaviour { public UIViewLayer viewLayer; private const int viewSortOrderStep = 100; private int topSortOrder = 0; private List uiViews = new List(); public void PushUIView(BaseUIView view) { if (view == null) return; if (view.viewLayerController != null && view.viewLayerController == this) { if (view.ViewSortOrder == topSortOrder) { return; } else { uiViews.Remove(view); uiViews.Add(view); topSortOrder += viewSortOrderStep; view.ViewSortOrder = topSortOrder; } } else { uiViews.Add(view); view.viewLayerController = this; view.transform.SetParent(transform); view.GetComponent().Normalize(); topSortOrder += viewSortOrderStep; view.ViewSortOrder = topSortOrder; view.OnPush(); } } public void PopupUIView(BaseUIView view) { if (view == null) return; if (uiViews.Contains(view)) { uiViews.Remove(view); view.ResetUIView(); view.OnPopup(); } RefreshTopSortOrder(); } public void RefreshTopSortOrder() { topSortOrder = uiViews.Count == 0 ? 0 : uiViews[uiViews.Count - 1].ViewSortOrder; } public bool RefreshView(bool alreadycovered) { if (alreadycovered) { for(int i = uiViews.Count - 1; i >= 0; i--) { if (uiViews[i].uiViewConfig.alwaysUpdate) { uiViews[i].OnShow(); } else { uiViews[i].OnHide(); } } return true; } else { bool covered = false; for(int i = uiViews.Count - 1; i >= 0; i--) { if (uiViews[i].uiViewConfig.alwaysUpdate) { uiViews[i].OnShow(); } else { if (covered) { uiViews[i].OnHide(); } else { uiViews[i].OnShow(); } } if (!covered) { covered = uiViews[i].uiViewConfig.coverScreen; } } return covered; } } } }