Files
aibis-dream/Assets/Scripts/UI/UIManager.cs
T
dingyuntian 9f20ef52d8 UI工具翻新
1. 增加UI工具
2. 增加设置页面
3. GameLoop更新
4. 导入ActionKit工具
2025-04-21 18:53:30 +08:00

116 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using AibisDream.Framework;
using UnityEngine;
namespace AibisDream
{
public class UIManager : Kit.Singleton<UIManager>, IUIManager
{
#region 索引
private Dictionary<Type, IUIPanel> _panelPool;
public RectTransform Canvas { get; private set; }
public Vector2 Resolution { get; set; }
#endregion
public override void OnSingletonInit()
{
InitRefs();
}
private void InitRefs()
{
// 获取Canvas
Canvas = transform.Find("UI Canvas").GetComponent<RectTransform>();
// 获取Panel
var panels = Canvas.GetComponentsInChildren<IUIPanel>(true);
_panelPool = new Dictionary<Type, IUIPanel>();
foreach (var panel in panels)
{
_panelPool[panel.GetType()] = panel;
}
EnumEventSystem.Global.Register(GameLoopEnum.AppStart, OnAppStart);
EnumEventSystem.Global.Register(GameLoopEnum.GameStart, OnGameStart);
EnumEventSystem.Global.Register(GameLoopEnum.GameQuit, OnGameQuit);
}
private void OnAppStart()
{
// 游戏打开
ShowPanel<StartPanel>();
ShowPanel<PlayToolPanel>();
HidePanel<MainPanel>();
HidePanel<SettingPanel>();
HidePanel<RecordPanel>();
HidePanel<EndPanel>();
}
private void OnGameStart()
{
// 开始游戏
HidePanel<StartPanel>();
ShowPanel<MainPanel>();
}
private void OnGameQuit()
{
HidePanel<MainPanel>();
ShowPanel<StartPanel>();
}
public void ShowPanel<T>(Action<T> call = null) where T : class, IUIPanel
{
var type = typeof(T);
// 从缓存中检查panel
if (_panelPool.TryGetValue(type, out var panel))
{
if (panel.IsOpen) return;
panel.Show();
call?.Invoke(panel as T);
}
else
{
Debug.Log($"panel {type} 未注册");
}
}
public void HidePanel<T>() where T : IUIPanel
{
var type = typeof(T);
// 从缓存中检查panel
if (_panelPool.TryGetValue(type, out var panel))
{
if (!panel.IsOpen) return;
panel.Hide();
}
else
{
Debug.Log($"panel {type} 未注册");
}
}
public T GetPanel<T>() where T : class, IUIPanel
{
return _panelPool.TryGetValue(typeof(T), out var ui) ? ui as T : null;
}
}
public interface IUIManager
{
void ShowPanel<T>(Action<T> call = null) where T : class, IUIPanel;
void HidePanel<T>() where T : IUIPanel;
T GetPanel<T>() where T : class, IUIPanel;
RectTransform Canvas { get; }
Vector2 Resolution { get; set; }
// 还没想好要不要用栈
// UIPanel Pop();
// void Push<T>(T panel) where T : UIPanel;
}
}