169 lines
5.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace ZXKFramework
{
public class UIManager : IUIManager
{
public GameObject canvas { get; set; }
public string curPanelName { get; set; }
private Dictionary<string, UIBase> allUI { get; set; } = new Dictionary<string, UIBase>();
private string uiDir = "";
IRes resManager;
public void SetResType(IRes res)
{
resManager = res;
}
public void Init(GameObject canvas, string uiDirPath)
{
this.canvas = canvas;
uiDir = uiDirPath;
}
public void AddUI<T>(Action callBack = null) where T : UIBase
{
string tipType = typeof(T).Name;
if (canvas == null) return;
if (!allUI.ContainsKey(tipType))
{
GameObject loUi = null;
if (!Game.Instance.canvasTransformFindUI)
{
string path = string.IsNullOrEmpty(uiDir) ? tipType : uiDir + "/" + tipType;
resManager?.Load<GameObject>(path, ui =>
{
if (null == ui) return;
loUi = GameObject.Instantiate<GameObject>(ui);
RectTransform rect = loUi.GetOrAddComponent<RectTransform>();
rect.anchoredPosition3D = Vector3.zero;
rect.anchoredPosition = Vector2.zero;
allUI.Add(tipType, AddUI<T>(loUi));
callBack?.Invoke();
});
}
else
{
loUi = canvas.FindFirst(tipType);
if (null == loUi) return;
allUI.Add(tipType, AddUI<T>(loUi));
callBack?.Invoke();
}
}
else
{
callBack?.Invoke();
}
}
T AddUI<T>(GameObject loUi) where T : UIBase
{
loUi.transform.parent = canvas.transform;
loUi.transform.localPosition = Vector3.zero;
T uibase = loUi.GetOrAddComponent<T>();
uibase.Init(this);
uibase.SetActive(false);
//ע<>ᵽMVC
MVC.RegisterView(uibase);
return uibase;
}
public void ShowUI<T>(Action<UIBase> callBack = null, params object[] obj) where T : UIBase
{
string tipType = typeof(T).Name;
if (canvas == null) return;
AddUI<T>(() =>
{
if (!allUI.ContainsKey(tipType)) return;
allUI[tipType].ShowData(obj);//<2F><><EFBFBD><EFBFBD>չʾ<D5B9><CABE><EFBFBD><EFBFBD>
allUI[tipType].SetActive(true);
curPanelName = tipType;
callBack?.Invoke(allUI[tipType]);
});
}
public void ShowUIAndCloseOther<T>(Action<UIBase> callBack = null, params object[] obj) where T : UIBase
{
ShowUI<T>(loUIBase =>
{
if (loUIBase != null)
{
foreach (UIBase uiTem in allUI.Values)
{
if (uiTem != loUIBase && uiTem.GroupName == loUIBase.GroupName)
{
uiTem.SetActive(false);
}
}
callBack?.Invoke(loUIBase);
}
}, obj);
}
public void CloseUI<T>() where T : UIBase
{
string tipType = typeof(T).Name;
if (canvas == null || !allUI.ContainsKey(tipType)) return;
Debug.Log("CloseUI " + tipType);
allUI[tipType].SetActive(false);
}
public T GetUI<T>() where T : UIBase
{
string tipType = typeof(T).Name;
if (canvas == null || !allUI.ContainsKey(tipType)) return null;
return allUI[tipType] as T;
}
public void CloseGroup(string parentName)
{
foreach (UIBase uiTem in allUI.Values)
{
if (uiTem.GroupName == parentName && uiTem.gameObject.activeInHierarchy)
{
uiTem.SetActive(false);
}
}
}
public void CloseGroup()
{
foreach (UIBase uiTem in allUI.Values)
{
if (uiTem.gameObject.activeInHierarchy)
{
uiTem.SetActive(false);
}
}
}
public void Clean()
{
allUI.Clear();
canvas = null;
}
public void OnUpdate()
{
foreach (var uiBase in allUI.Values)
{
uiBase?.OnUpdate();
}
}
public void Destroy()
{
foreach (var uiBase in allUI.Values)
{
uiBase?.Destroy();
}
Clean();
}
}
}