Пример #1
0
 public static void Clean(string ignoreName = "", object target = null, object targetMethod = null)
 {
     foreach (var eventListener in Events.listeners)
     {
         string eventName   = eventListener.name;
         object eventTarget = eventListener.target;
         object eventMethod = eventListener.method;
         bool   duplicate   = eventName != ignoreName && eventTarget == target && eventMethod.Equals(targetMethod);
         bool   invalid     = eventTarget.IsNull() || eventMethod.IsNull() || (!eventListener.isStatic && ((Delegate)eventMethod).Target.IsNull());
         if (duplicate || invalid)
         {
             UtilityCall.Delay(() => Events.listeners.Remove(eventListener));
             if (Events.HasDebug("Remove"))
             {
                 string messageType = eventMethod.IsNull() ? "empty method" : "duplicate method";
                 string message     = "[Events] Removing " + messageType + " from -- " + eventTarget + "/" + eventName;
                 Log.Show(message, target);
             }
         }
     }
     foreach (var current in Events.callers)
     {
         object scope = current.Key;
         if (scope.IsNull())
         {
             UtilityCall.Delay(() => Events.callers.Remove(scope));
         }
     }
 }
Пример #2
0
 public static void DelayCall(object target, object key, string name, float delay = 0.5f, params object[] values)
 {
     if (target.IsNull())
     {
         return;
     }
     UtilityCall.Delay(key, () => Events.Call(target, name, values), delay);
 }
Пример #3
0
 static Events()
 {
     Events.callers.Clear();
     Events.cache.Clear();
     Events.listeners.RemoveAll(x => x.name != "On Events Reset" && (!x.permanent || x.occurrences == 0));
     UtilityCall.Delay(Events.Repair);
     Events.Add("On Destroy", () => UtilityCall.Delay(Events.Repair));
     foreach (var listener in Events.listeners)
     {
         var scope = Events.cache.AddNew(listener.target).AddNew(listener.name);
         scope[listener.method] = listener;
     }
     Events.Call("On Events Reset");
 }
Пример #4
0
 public static void Remove(string name, object method, params object[] targets)
 {
     if (Events.HasDisabled("Add"))
     {
         return;
     }
     targets = Events.VerifyAll(targets);
     foreach (var target in targets)
     {
         var removals = Events.listeners.Where(x => x.method == method && x.target == target && x.name == name).ToList();
         removals.ForEach(x => x.Remove());
     }
     UtilityCall.Delay(Events.OnEventsChanged);
 }
Пример #5
0
 public static void RemoveAll(params object[] targets)
 {
     if (Events.HasDisabled("Add"))
     {
         return;
     }
     targets = Events.VerifyAll(targets);
     foreach (var target in targets)
     {
         var removals = Events.listeners.Where(x => x.target == target || x.method.As <Delegate>().Target == target).ToList();
         removals.ForEach(x => x.Remove());
         Events.cache.AddNew(target).SelectMany(x => x.Value).Select(x => x.Value).ToList().ForEach(x => x.Remove());
         Events.cache.Remove(target);
     }
     UtilityCall.Delay(Events.OnEventsChanged);
 }
Пример #6
0
        public static EventListener Add(string name, object method, int amount, params object[] targets)
        {
            if (Events.HasDisabled("Add"))
            {
                Log.Warning("[Events] : Add attempted while Events disabled. " + name);
                return(null);
            }
            targets = Events.VerifyAll(targets);
            var listener = Events.emptyListener;

            foreach (object current in targets)
            {
                var target = current;
                if (target.IsNull())
                {
                    continue;
                }
                if (Events.unique.ContainsKey(target) && Events.unique[target].ContainsKey(name))
                {
                    listener = Events.unique[target][name];
                    continue;
                }
                if (!Events.cache.AddNew(target).AddNew(name).ContainsKey(method))
                {
                    listener = new EventListener();
                    if (Events.HasDebug("Add"))
                    {
                        var info = (Delegate)method;
                        Log.Show("[Events] : Adding event -- " + Events.GetMethodName(info) + " -- " + name, target);
                    }
                    Events.listeners.Add(listener);
                    UtilityCall.Delay(Events.OnEventsChanged);
                }
                else
                {
                    listener = Events.cache[target][name].AddNew(method);
                }
                listener.name        = name;
                listener.method      = method;
                listener.target      = target;
                listener.occurrences = amount;
                listener.isStatic    = ((Delegate)method).Target.IsNull();
                Events.cache.AddNew(target).AddNew(listener.name)[listener.method]     = listener;
                Events.cache.AddNew(Events.all).AddNew(listener.name)[listener.method] = listener;
            }
            return(listener);
        }