UIViewLayerController.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Utility;
  5. namespace ProjectBase.UI
  6. {
  7. public class UIViewLayerController : MonoBehaviour
  8. {
  9. public UIViewLayer viewLayer;
  10. private const int viewSortOrderStep = 100;
  11. private int topSortOrder = 0;
  12. private List<BaseUIView> uiViews = new List<BaseUIView>();
  13. public void PushUIView(BaseUIView view)
  14. {
  15. if (view == null) return;
  16. if (view.viewLayerController != null && view.viewLayerController == this)
  17. {
  18. if (view.ViewSortOrder == topSortOrder)
  19. {
  20. return;
  21. }
  22. else
  23. {
  24. uiViews.Remove(view);
  25. uiViews.Add(view);
  26. topSortOrder += viewSortOrderStep;
  27. view.ViewSortOrder = topSortOrder;
  28. }
  29. }
  30. else
  31. {
  32. uiViews.Add(view);
  33. view.viewLayerController = this;
  34. view.transform.SetParent(transform);
  35. view.GetComponent<RectTransform>().Normalize();
  36. topSortOrder += viewSortOrderStep;
  37. view.ViewSortOrder = topSortOrder;
  38. view.OnPush();
  39. }
  40. }
  41. public void PopupUIView(BaseUIView view)
  42. {
  43. if (view == null) return;
  44. if (uiViews.Contains(view))
  45. {
  46. uiViews.Remove(view);
  47. view.ResetUIView();
  48. view.OnPopup();
  49. }
  50. RefreshTopSortOrder();
  51. }
  52. public void RefreshTopSortOrder()
  53. {
  54. topSortOrder = uiViews.Count == 0 ? 0 : uiViews[uiViews.Count - 1].ViewSortOrder;
  55. }
  56. public bool RefreshView(bool alreadycovered)
  57. {
  58. if (alreadycovered)
  59. {
  60. for(int i = uiViews.Count - 1; i >= 0; i--)
  61. {
  62. if (uiViews[i].uiViewConfig.alwaysUpdate)
  63. {
  64. uiViews[i].OnShow();
  65. }
  66. else
  67. {
  68. uiViews[i].OnHide();
  69. }
  70. }
  71. return true;
  72. }
  73. else
  74. {
  75. bool covered = false;
  76. for(int i = uiViews.Count - 1; i >= 0; i--)
  77. {
  78. if (uiViews[i].uiViewConfig.alwaysUpdate)
  79. {
  80. uiViews[i].OnShow();
  81. }
  82. else
  83. {
  84. if (covered)
  85. {
  86. uiViews[i].OnHide();
  87. }
  88. else
  89. {
  90. uiViews[i].OnShow();
  91. }
  92. }
  93. if (!covered)
  94. {
  95. covered = uiViews[i].uiViewConfig.coverScreen;
  96. }
  97. }
  98. return covered;
  99. }
  100. }
  101. }
  102. }