using System; using System.Collections.Generic; namespace Model { [ObjectEvent] public class EventComponentEvent : ObjectEvent, IAwake, ILoad { public void Awake() { this.Get().Awake(); } public void Load() { this.Get().Load(); } } public class EventComponent : Component { private Dictionary> allEvents; public void Awake() { this.Load(); } public void Load() { this.allEvents = new Dictionary>(); Type[] types = DllHelper.GetMonoTypes(); foreach (Type type in types) { object[] attrs = type.GetCustomAttributes(typeof(EventAttribute), false); foreach (object attr in attrs) { EventAttribute aEventAttribute = (EventAttribute)attr; object obj = Activator.CreateInstance(type); if (!this.allEvents.ContainsKey((EventIdType)aEventAttribute.Type)) { this.allEvents.Add((EventIdType)aEventAttribute.Type, new List()); } this.allEvents[(EventIdType)aEventAttribute.Type].Add(obj); } } } public void Run(EventIdType type) { List iEvents; if (!this.allEvents.TryGetValue(type, out iEvents)) { return; } foreach (object obj in iEvents) { try { IEvent iEvent = (IEvent)obj; iEvent.Run(); } catch (Exception e) { Log.Error(e.ToString()); } } } public void Run(EventIdType type, A a) { List iEvents; if (!this.allEvents.TryGetValue(type, out iEvents)) { return; } foreach (object obj in iEvents) { try { IEvent iEvent = (IEvent)obj; iEvent.Run(a); } catch (Exception err) { Log.Error(err.ToString()); } } } public void Run(EventIdType type, A a, B b) { List iEvents; if (!this.allEvents.TryGetValue(type, out iEvents)) { return; } foreach (object obj in iEvents) { try { IEvent iEvent = (IEvent)obj; iEvent.Run(a, b); } catch (Exception err) { Log.Error(err.ToString()); } } } public void Run(EventIdType type, A a, B b, C c) { List iEvents; if (!this.allEvents.TryGetValue(type, out iEvents)) { return; } foreach (object obj in iEvents) { try { IEvent iEvent = (IEvent)obj; iEvent.Run(a, b, c); } catch (Exception err) { Log.Error(err.ToString()); } } } } }