using Svelto.DataStructures; using System; namespace BetterWeakEvents { public class WeakEvent { public static WeakEvent operator+(WeakEvent c1, Action x) { c1._subscribers.Add(new WeakAction(x)); return c1; } public static WeakEvent operator-(WeakEvent c1, Action x) { c1._subscribers.UnorderredRemove(new WeakAction(x)); return c1; } public void Invoke(T1 arg1, T2 arg2) { for (int i = 0; i < _subscribers.Count; i++) if (_subscribers[i].Invoke(arg1, arg2) == false) _subscribers.UnorderredRemoveAt(i--); } ~WeakEvent() { for (int i = 0; i < _subscribers.Count; i++) _subscribers[i].Release(); } protected FasterList> _subscribers = new FasterList>(); } }