HAARFTE/Assets/DemoGame/GameScript/Hotfix/UI/UIManager.cs

137 lines
3.4 KiB
C#
Raw Normal View History

2024-10-24 16:16:57 +08:00
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
namespace ZC
{
internal class UIManager : ManagerBase<UIManager>, IUIManager
{
private Stack<UIBase> _uis = new Stack<UIBase>();
private Dictionary<UIType, UIBase> _uiDic = new Dictionary<UIType, UIBase>();
2024-11-07 23:51:24 +08:00
// private Dictionary<UIType, Type> _types = new Dictionary<UIType, Type>();
2024-10-24 16:16:57 +08:00
public TMP_FontAsset font { get; set; }
public override void OnInit()
{
base.OnInit();
2024-11-07 23:51:24 +08:00
// var types = new List<(Type, UITypeAttribute)>();
// AssemblyManager.GetTypesInhertType<UITypeAttribute>(typeof(UIBase), types);
// foreach (var (type, uiTypeAttribute) in types)
// {
// _types.Add(uiTypeAttribute.UIType, type);
// }
2024-10-24 16:16:57 +08:00
}
public override void OnUpdate(float time)
{
base.OnUpdate(time);
foreach (var ui in _uis)
{
2024-11-07 23:51:24 +08:00
ui.OnUpdate(time);
2024-10-24 16:16:57 +08:00
}
}
public override void OnPause()
{
base.OnPause();
foreach (var ui in _uis)
{
ui.Pause();
}
}
public override void OnResume()
{
base.OnResume();
foreach (var ui in _uis)
{
ui.Resume();
}
}
public IUI CreateUI(UIType uiType, string path, UILayer uiLayer)
{
var gameObject = ResourcesLocalComponent.Instance.LoadUIGameObjectSync(path, uiLayer);
2024-11-07 23:51:24 +08:00
// if (!this._types.TryGetValue(uiType, out var type))
// {
// throw new InvalidOperationException();
// }
//
// if (Activator.CreateInstance(type, false) is not UIBase ui)
// throw new NullReferenceException();
// ui.SetGameObject(gameObject);
var uiBase = gameObject.GetComponent<UIBase>();
uiBase.Init();
uiBase.Close();
_uiDic.Add(uiType, uiBase);
2024-10-24 16:16:57 +08:00
//#if UNITY_EDITOR
// view
// var addComponent = gameObject.GetComponent<UIInfo>();
// addComponent.SetStart(ui, this.font);
//#endif
2024-11-07 23:51:24 +08:00
return uiBase;
2024-10-24 16:16:57 +08:00
}
public IUI ShowUI(UIType uiType)
{
if (_uiDic.TryGetValue(uiType, out var ui))
{
_uis.Push(ui);
ui.Open();
return ui;
}
return null;
}
public T GetUI<T>(UIType uiType) where T : UIBase
{
if (_uiDic.TryGetValue(uiType, out var ui))
{
if (ui is not T t)
throw new InvalidCastException();
return t;
}
return default;
}
public bool HideUI(UIType uiType)
{
if (_uiDic.TryGetValue(uiType, out var ui))
{
ui.Close();
return true;
}
return false;
}
public IUI CloseLast()
{
if (_uis.Count > 0)
{
var ui = _uis.Pop();
ui.Close();
return ui;
}
return null;
}
public void CloseAll()
{
while (_uis.Count > 0)
{
var ui = _uis.Pop();
ui.Close();
}
}
}
}