public void Detach <A>(RoutineListener <A> listener) where A : T { if (!routines.ContainsKey(listener._type)) { return; } routines[listener._type].Detach(listener._delegate); }
public IEnumerator Post <A>(A _args) where A : T { if (actions != null && actions.ContainsKey(typeof(A))) { ActionListContainer <A> action_list = actions[typeof(A)] as ActionListContainer <A>; List <Listener> temp = new List <Listener>(action_list); for (int i = 0; i < temp.Count; i++) { Listener it = temp[i]; if (it == null) { continue; } (it._delegate as System.Action <A>)(_args); } } if (routines != null && routines.ContainsKey(typeof(A))) { RoutineListContainer <A> routine_list = routines[typeof(A)] as RoutineListContainer <A>; //Extensions.RunInfo inf = null; List <RoutineListener <A> > temp = new List <RoutineListener <A> >(routine_list); for (int i = 0; i < temp.Count; i++) { RoutineListener <A> it = temp[i]; if (it == null) { continue; } /* * if (routine_list.parallel) * { * inf = it._delegate(_args).ParallelCoroutine(typeof(A).ToString()); * } * else */ yield return(it._delegate(_args)); } /* if (routine_list.parallel) * { * while (inf.count > 0) yield return null; * } */ } }
public RoutineListener <A> Attach <A>(int priority, Func <A, IEnumerator> ienum) where A : T { //TODO: check if this routine has been attached already if (!routines.ContainsKey(typeof(A))) { routines[typeof(A)] = new RoutineListContainer <A>(); } if ((routines[typeof(A)] as RoutineListContainer <A>).Find(c => c._delegate == ienum) != null) { return((routines[typeof(A)] as RoutineListContainer <A>).Find(c => c._delegate == ienum)); } RoutineListener <A> final = new RoutineListener <A>(typeof(A), ienum, priority); routines[typeof(A)].Add(final, priority); return(final); }