using Godot; /// <summary> /// ui管理类 /// </summary> public static partial class UiManager { private static bool _init = false; private static CanvasLayer _bottomLayer; private static CanvasLayer _middleLayer; private static CanvasLayer _heightLayer; private static CanvasLayer _popLayer; public static void Init() { if (_init) { return; } _init = true; //创建ui层 //Bottom _bottomLayer = new CanvasLayer(); _bottomLayer.Name = "BottomLayer"; _bottomLayer.Layer = 5; GameApplication.Instance.AddChild(_bottomLayer); //Middle _middleLayer = new CanvasLayer(); _middleLayer.Name = "MiddleLayer"; _middleLayer.Layer = 15; GameApplication.Instance.AddChild(_middleLayer); //Height _heightLayer = new CanvasLayer(); _heightLayer.Name = "HeightLayer"; _heightLayer.Layer = 25; GameApplication.Instance.AddChild(_heightLayer); //Pop _popLayer = new CanvasLayer(); _popLayer.Name = "PopLayer"; _popLayer.Layer = 35; GameApplication.Instance.AddChild(_popLayer); } /// <summary> /// 获取指定的Ui层根节点 /// </summary> public static CanvasLayer GetUiLayer(UiLayer uiLayer) { switch (uiLayer) { case UiLayer.Bottom: return _bottomLayer; case UiLayer.Middle: return _middleLayer; case UiLayer.Height: return _heightLayer; case UiLayer.Pop: return _popLayer; } return null; } private static UiBase InstantiateUi(string resourcePath) { var packedScene = ResourceManager.Load<PackedScene>(resourcePath); var uiBase = packedScene.Instantiate<UiBase>(); return uiBase; } /// <summary> /// 根据Ui资源路径打开Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承<see cref="UiBase"/> /// </summary> public static UiBase OpenUi(string resourcePath, params object[] args) { var uiBase = InstantiateUi(resourcePath); var canvasLayer = GetUiLayer(uiBase.Layer); canvasLayer.AddChild(uiBase); uiBase.OnCreateUi(); uiBase.ShowUi(args); return uiBase; } /// <summary> /// 根据Ui资源路径打开Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承<see cref="UiBase"/> /// </summary> public static T OpenUi<T>(string resourcePath, params object[] args) where T : UiBase { return (T)OpenUi(resourcePath, args); } /// <summary> /// 销毁指定Ui /// </summary> public static void DisposeUi(UiBase uiBase) { uiBase.DisposeUi(); } }