/// <summary> /// Subscribe to start recieving Update calls /// </summary> /// <param name="obj"></param> public static void Subscribe(IUnityEvents obj #if ORDERED_GENERICS , int executionOrder = 0 #endif ) { if (obj == null || Contains(obj)) { return; } try { obj.OnSubscribe(); } catch (Exception e) { Debug.LogError(e.ToString()); } #if ORDERED_GENERICS Wrapper w = new Wrapper(obj, executionOrder); Add(w, s_generics); #else s_generics.Add(obj); #endif }
/// <summary> /// Unsubscribe to stop recieving Update calls /// </summary> /// <param name="obj"></param> public static void UnSubscribe(IUnityEvents obj) { if (obj == null || !Contains(obj)) { return; } try { obj.OnUnSubscribe(); } catch (Exception e) { Debug.LogError(e.ToString()); } //Currently in a foreach loop so we cannot edit the data types yet. if (s_looping) { s_toRemove.Enqueue(obj); return; } #if ORDERED_GENERICS Remove(obj, s_generics); #else s_generics.Remove(obj); #endif }
private static bool Contains(IUnityEvents obj) { #if ORDERED_GENERICS foreach (var e in s_generics) { if (e.Equals(obj)) { return(true); } } return(false); #else return(s_generics.Contains(obj)); #endif }
/// <summary> /// Queues for Awake & Start calls before subscribing for Update calls /// </summary> /// <param name="obj"></param> public static void Instantiate(IUnityEvents obj #if ORDERED_GENERICS , int executionOrder = 0 #endif ) { if (obj == null || Contains(obj)) { return; } obj.OnSubscribe(); #if ORDERED_GENERICS Wrapper w = new Wrapper(obj, executionOrder); Add(w, s_toInitialize); #else s_toInitialize.Add(obj); #endif }
public bool Equals(IUnityEvents other) => obj == other;
public Wrapper(IUnityEvents i, int order) { obj = i; executionOrder = order; }
private static void Remove(IUnityEvents w, List <Wrapper> list) { list.RemoveAll((wrapper) => wrapper.Equals(w)); }