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);
}
}
}
}