using System; using System.Collections.Generic; using UnityEngine; namespace ET.Client { /// /// 管理所有UI GameObject 以及UI事件 /// [FriendOf(typeof(UIEventComponent))] public static class UIEventComponentSystem { [ObjectSystem] public class UIEventComponentAwakeSystem : AwakeSystem { protected override void Awake(UIEventComponent self) { UIEventComponent.Instance = self; GameObject uiRoot = GameObject.Find("/Global/UI"); ReferenceCollector referenceCollector = uiRoot.GetComponent(); self.UILayers.Add((int)UILayer.Hidden, referenceCollector.Get(UILayer.Hidden.ToString()).transform); self.UILayers.Add((int)UILayer.Low, referenceCollector.Get(UILayer.Low.ToString()).transform); self.UILayers.Add((int)UILayer.Mid, referenceCollector.Get(UILayer.Mid.ToString()).transform); self.UILayers.Add((int)UILayer.High, referenceCollector.Get(UILayer.High.ToString()).transform); var uiEvents = EventSystem.Instance.GetTypes(typeof (UIEventAttribute)); foreach (Type type in uiEvents) { object[] attrs = type.GetCustomAttributes(typeof(UIEventAttribute), false); if (attrs.Length == 0) { continue; } UIEventAttribute uiEventAttribute = attrs[0] as UIEventAttribute; AUIEvent aUIEvent = Activator.CreateInstance(type) as AUIEvent; self.UIEvents.Add(uiEventAttribute.UIType, aUIEvent); } } } public static async ETTask OnCreate(this UIEventComponent self, UIComponent uiComponent, string uiType, UILayer uiLayer) { try { UI ui = await self.UIEvents[uiType].OnCreate(uiComponent, uiLayer); return ui; } catch (Exception e) { throw new Exception($"on create ui error: {uiType}", e); } } public static Transform GetLayer(this UIEventComponent self, int layer) { return self.UILayers[layer]; } public static void OnRemove(this UIEventComponent self, UIComponent uiComponent, string uiType) { try { self.UIEvents[uiType].OnRemove(uiComponent); } catch (Exception e) { throw new Exception($"on remove ui error: {uiType}", e); } } } }