public override void Publish(DarkLightEventArgs de) { if (EventDict[de.Type] != null) { EventDict[de.Type](de); } }
internal static EventDict GenerateLookup() { var lookup = new EventDict(); foreach (Type type in Assembly.GetAssembly(typeof(BaseEvent)).GetTypes()) { if (!type.IsClass || type.IsAbstract || !type.IsSubclassOf(typeof(BaseEvent)) || type.IsEquivalentTo(typeof(UnknownEvent))) { continue; } var tmp = (BaseEvent)Activator.CreateInstance(type); var id = tmp.ID; if (lookup.ContainsKey(id)) { throw new Exception("ID already in lookup map"); } var lambda = Expression.Lambda <Func <BaseEvent> >( Expression.New(type), Array.Empty <ParameterExpression>() ).Compile(); lookup.Add(id, lambda); } return(lookup); }
public void EventTrigger <T>(string objName, string eventName, T eventParam) { if (objDict.ContainsKey(objName)) { EventDict <T> eventDict = (EventDict <T>)objDict[objName]; eventDict.EventTrriger(eventName, eventParam); } }
public void RemoveEvent <T>(string objName, string eventName, UnityAction <T> _event) { if (objDict.ContainsKey(objName)) { EventDict <T> eventDict = (EventDict <T>)objDict[objName]; eventDict.RemoveEvent(eventName, _event); } }
private static IEvent CreateEvent(byte rawID) { var id = (EventID)rawID; if (!Lookup.ContainsKey(id)) { throw new IOException("Unknow event ID!"); } return(Lookup[id]()); }
/// <summary> /// 添加对象及对应的事件名、事件的字典。 /// </summary> /// <param name="objName">对象的名称</param> /// <param name="eventName">事件的名称</param> /// <param name="_event">事件方法</param> /* public void AddEvent(string objName,string eventName,UnityAction<object> _event) * { * if(objDict.ContainsKey(objName)) * { * if(objDict[objName].ContainsKey(eventName)) * { * objDict[objName][eventName] += _event; * } * else * { * objDict[objName].Add(eventName, _event); * } * } * else * { * objDict.Add(objName, new Dictionary<string, UnityAction<object>>()); * objDict[objName].Add(eventName, _event); * } * } * * public void RemoveEvent(string objName, string eventName, UnityAction<object> _event) * { * if (objDict.ContainsKey(objName)) * { * if (objDict[objName].ContainsKey(eventName)) * { * objDict[objName][eventName] -= _event; * if(objDict[objName][eventName]==null) * { * objDict[objName].Remove(eventName); * } * } * if(objDict[objName].Count==0) * { * objDict.Remove(objName); * } * } * } * public void Clean() * { * * objDict.Clear(); * } * * public void EventTrigger(string objName,string eventName,object obj) * { * if(objDict.ContainsKey(objName)) * { * if(objDict[objName].ContainsKey(eventName)) * { * objDict[objName][eventName](obj); * } * } * }*/ public void AddEvent <T>(string objName, string eventName, UnityAction <T> _event) { if (objDict.ContainsKey(objName)) { EventDict <T> eventDict = (EventDict <T>)objDict[objName]; eventDict.AddEvent(eventName, _event); } else { EventDict <T> eventDict = new EventDict <T>(); objDict.Add(objName, eventDict); eventDict.AddEvent(eventName, _event); } }
private static EventDict GenerateLookup() { var lookup = new EventDict(); foreach (Type type in Assembly.GetAssembly(typeof(IEvent)).GetTypes()) { if (!type.IsClass || type.IsAbstract || type.IsInterface || !typeof(IEvent).IsAssignableFrom(type)) { continue; } var tmp = (IEvent)Activator.CreateInstance(type); var id = tmp.ID; if (lookup.ContainsKey(id)) { throw new Exception("ID already in lookup map"); } var lambda = Expression.Lambda <Func <IEvent> >( Expression.New(type), Array.Empty <ParameterExpression>() ).Compile(); lookup.Add(id, lambda); } return(lookup); }