예제 #1
0
 public override void Publish(DarkLightEventArgs de)
 {
     if (EventDict[de.Type] != null)
     {
         EventDict[de.Type](de);
     }
 }
예제 #2
0
        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);
     }
 }
예제 #5
0
        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);
        }
    }
예제 #7
0
        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);
        }