using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; namespace WIFramework.UI { public static class WIBehaviourExtenstion { static Dictionary canvasTable = new Dictionary(); static Dictionary> panelTable = new Dictionary>(); public static T GetCanvas(this Transform root) where T : CanvasBase { var canvasType = typeof(T); if (canvasTable.TryGetValue(canvasType, out var result)) return result as T; var finding = GameObject.FindObjectOfType(); if (finding == null) return null; canvasTable.Add(canvasType, finding); return finding; } public static bool GetPanel(this Transform root, out T result) where T : PanelBase { result = null; GetPanels(root, out var panels); if (panels == null || panels.Count == 0) return false; if (panels.Count >= 1) { foreach(var p in panels) { if(p.transform.IsChildOf(root)) { result = p; return true; } } } result = panels[0]; return true; } public static bool GetPanels(this Transform root, out List result) where T : PanelBase { var panelType = typeof(T); if (panelTable.TryGetValue(panelType, out var list)) { result = list.ConvertAll(new Converter(PanelTypeConvertor)); return true; } var finding = GameObject.FindObjectsOfType().ToList(); if (finding == null || finding.Count == 0) { result = null; return false; } result = finding; var data = finding.ConvertAll(new Converter(PanelTypeConvertor)); panelTable.Add(panelType, data); return false; } public static T2 PanelTypeConvertor(T origin) where T : WIBehaviour where T2 : WIBehaviour { return origin as T2; } } }