Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / ui / UiManager.cs
@lijincheng lijincheng on 15 Mar 2023 2 KB ui嵌套打开与关闭
  1.  
  2. using System;
  3. using Godot;
  4.  
  5. /// <summary>
  6. /// ui管理类
  7. /// </summary>
  8. public static partial class UiManager
  9. {
  10. private static bool _init = false;
  11.  
  12. private static CanvasLayer _bottomLayer;
  13. private static CanvasLayer _middleLayer;
  14. private static CanvasLayer _heightLayer;
  15. private static CanvasLayer _popLayer;
  16. public static void Init()
  17. {
  18. if (_init)
  19. {
  20. return;
  21. }
  22.  
  23. _init = true;
  24. //创建ui层
  25. //Bottom
  26. _bottomLayer = new CanvasLayer();
  27. _bottomLayer.Name = "BottomLayer";
  28. _bottomLayer.Layer = 5;
  29. GameApplication.Instance.AddChild(_bottomLayer);
  30. //Middle
  31. _middleLayer = new CanvasLayer();
  32. _middleLayer.Name = "MiddleLayer";
  33. _middleLayer.Layer = 15;
  34. GameApplication.Instance.AddChild(_middleLayer);
  35. //Height
  36. _heightLayer = new CanvasLayer();
  37. _heightLayer.Name = "HeightLayer";
  38. _heightLayer.Layer = 25;
  39. GameApplication.Instance.AddChild(_heightLayer);
  40. //Pop
  41. _popLayer = new CanvasLayer();
  42. _popLayer.Name = "PopLayer";
  43. _popLayer.Layer = 35;
  44. GameApplication.Instance.AddChild(_popLayer);
  45. }
  46.  
  47. /// <summary>
  48. /// 获取指定的Ui层根节点
  49. /// </summary>
  50. public static CanvasLayer GetUiLayer(UiLayer uiLayer)
  51. {
  52. switch (uiLayer)
  53. {
  54. case UiLayer.Bottom:
  55. return _bottomLayer;
  56. case UiLayer.Middle:
  57. return _middleLayer;
  58. case UiLayer.Height:
  59. return _heightLayer;
  60. case UiLayer.Pop:
  61. return _popLayer;
  62. }
  63.  
  64. return null;
  65. }
  66.  
  67. private static UiBase InstantiateUi(string resourcePath)
  68. {
  69. var packedScene = ResourceManager.Load<PackedScene>(resourcePath);
  70. var uiBase = packedScene.Instantiate<UiBase>();
  71. return uiBase;
  72. }
  73.  
  74. /// <summary>
  75. /// 根据Ui资源路径打开Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承<see cref="UiBase"/>
  76. /// </summary>
  77. public static UiBase OpenUi(string resourcePath, params object[] args)
  78. {
  79. var uiBase = InstantiateUi(resourcePath);
  80. var canvasLayer = GetUiLayer(uiBase.Layer);
  81. canvasLayer.AddChild(uiBase);
  82. uiBase.OnCreateUi();
  83. uiBase.ShowUi(args);
  84. return uiBase;
  85. }
  86.  
  87. /// <summary>
  88. /// 根据Ui资源路径打开Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承<see cref="UiBase"/>
  89. /// </summary>
  90. public static T OpenUi<T>(string resourcePath, params object[] args) where T : UiBase
  91. {
  92. return (T)OpenUi(resourcePath, args);
  93. }
  94.  
  95. /// <summary>
  96. /// 销毁指定Ui
  97. /// </summary>
  98. public static void DisposeUi(UiBase uiBase)
  99. {
  100. uiBase.DisposeUi();
  101. }
  102. }