using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace TFramework { public interface IPanelData:IReference { } public class PanelData : IPanelData { public void Reset() { } } public class BasePanel { /// /// UI实体 /// public GameObject UIEntity { get; set; } protected Dictionary uiComponents; public virtual bool StickyTopic { get; protected set; } = false; public bool IsOpen { get; protected set; } /// /// 初始化 UI实体被创建时执行 /// public virtual void OnInit() { uiComponents = new Dictionary(); GetAllUIBehaviour(); } /// /// 界面显示时 /// public virtual void OnEnter(IPanelData args = null) { IsOpen = true; } /// /// 界面暂停 置于其它界面之下 /// public virtual void OnPause(IPanelData args = null) { } /// /// 界面继续 /// public virtual void OnResume(IPanelData args = null) { } /// /// 退出界面 界面关闭 /// public virtual void OnExit(IPanelData args = null) { IsOpen = false; } /// /// 获取所有UIBehaviour /// private void GetAllUIBehaviour() { foreach (var item in UIEntity.GetComponentsInChildren(true)) { if (uiComponents.ContainsKey(item.ID)) throw new UnityException($"在同一个Panel下发现相同的UIBehaviourID:{item.ID}"); else uiComponents.Add(item.ID, item); } } /// /// 获取UIBehaviour /// /// /// protected UIBehaviour GetUIBehaviour(string uiId) { if (uiComponents.ContainsKey(uiId)) return uiComponents[uiId]; else { Log.Error($"{UIEntity.name}下未找到ID为{uiId}的UIBehaviour!"); return null; } } protected T GetComponentInUIID(string uiId) where T: Component { return GetUIBehaviour(uiId)?.GetComponent(); } protected Component GetComponentInUIID(Type type, string uiId) { return GetUIBehaviour(uiId)?.GetComponent(type); } /// /// 切换语言 /// internal void ChangedWord() { foreach (var item in uiComponents.Values) { Text text = item.GetComponent(); if (!text) continue; string str = Main.GetMagr()?.GetLanguageText(text.text); if (string.IsNullOrEmpty(str)) continue; text.text = str; } } } }