Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.0KB

  1. using Svelto.DataStructures;
  2. using System;
  3. using System.Collections.Generic;
  4. namespace BetterWeakEvents
  5. {
  6. public class WeakEvent<T1, T2>
  7. {
  8. public static WeakEvent<T1, T2> operator+(WeakEvent<T1, T2> c1, Action<T1, T2> x)
  9. {
  10. c1._subscribers.Add(new WeakAction<T1, T2>(x));
  11. return c1;
  12. }
  13. public static WeakEvent<T1, T2> operator-(WeakEvent<T1, T2> c1, Action<T1, T2> x)
  14. {
  15. c1._subscribers.UnorderedRemove(new WeakAction<T1, T2>(x));
  16. return c1;
  17. }
  18. public void Invoke(T1 arg1, T2 arg2)
  19. {
  20. for (int i = 0; i < _subscribers.Count; i++)
  21. if (_subscribers[i].Invoke(arg1, arg2) == false)
  22. _subscribers.UnorderedRemoveAt(i--);
  23. }
  24. ~WeakEvent()
  25. {
  26. for (int i = 0; i < _subscribers.Count; i++)
  27. _subscribers[i].Release();
  28. }
  29. protected FasterList<WeakAction<T1, T2>> _subscribers = new FasterList<WeakAction<T1, T2>>();
  30. }
  31. }