public void Stop() { if (!Running) { return; } if (collection != null) { collection.HeapRemove(this); collection = null; collectionGroup = null; } IsFirstRun = false; Running = false; UpdateTags(); RemoveInvokerFromInvokersByUObject(); RemoveInvokerFromInvokersByMethod(); if (OnStopped != null) { OnStopped(this); } if (IsPooled) { InvokerPool.ReturnObject(this); } }
private static Invoker StartInvoker(object obj, InvokerHandlerType handlerType, Delegate handler, InvokerType type, ulong value, ulong repeatValue, CoroutineGroup group = CoroutineGroup.Tick, bool pool = PoolByDefault) { IntPtr world = IntPtr.Zero; UObject ownerObj = obj as UObject; if (ownerObj != null) { world = Native_UObject.GetWorld(ownerObj.Address); Debug.Assert(world != IntPtr.Zero, "UObject invokers must be objects with a UWorld reference (e.g. AActor) - " + "this is so that the invoker can be stopped when the world is destroyed."); } Invoker invoker = pool ? InvokerPool.GetObject() : new Invoker(); invoker.OwnerWorld = world; invoker.Owner = obj; invoker.SetHandler(handlerType, handler); switch (type) { case InvokerType.Delay: TimeSpan time = TimeSpan.FromTicks((long)value); TimeSpan repeatTime = TimeSpan.FromTicks((long)repeatValue); if (repeatTime != default(TimeSpan)) { invoker.SetTime(time, repeatTime); } else { invoker.SetTime(time); } break; case InvokerType.Ticks: if (repeatValue != default(ulong)) { invoker.SetTicks(value, repeatValue); } else { invoker.SetTicks(value); } break; case InvokerType.Frames: if (repeatValue != default(ulong)) { invoker.SetFrames(value, repeatValue); } else { invoker.SetFrames(value); } break; } invoker.SetGroup(group); invoker.Start(); return(invoker); }
private static Invoker StartInvoker(object obj, InvokerHandlerType handlerType, Delegate handler, InvokerType type, ulong value, ulong repeatValue, CoroutineGroup group = CoroutineGroup.Tick, bool pool = PoolByDefault) { Invoker invoker = pool ? InvokerPool.GetObject() : new Invoker(); invoker.SetHandler(handlerType, handler); switch (type) { case InvokerType.Delay: TimeSpan time = TimeSpan.FromTicks((long)value); TimeSpan repeatTime = TimeSpan.FromTicks((long)repeatValue); if (repeatTime != default(TimeSpan)) { invoker.SetTime(time, repeatTime); } else { invoker.SetTime(time); } break; case InvokerType.Ticks: if (repeatValue != default(ulong)) { invoker.SetTicks(value, repeatValue); } else { invoker.SetTicks(value); } break; case InvokerType.Frames: if (repeatValue != default(ulong)) { invoker.SetFrames(value, repeatValue); } else { invoker.SetFrames(value); } break; } invoker.SetGroup(group); invoker.Start(); return(invoker); }