protected MethodDelay Invoke(Action action, float seconds) { MethodDelay delay = new MethodDelay(); StartCoroutine(PInvoke(action, seconds, delay)); return(delay); }
protected MethodDelay InvokeRepeating(Action action, float seconds, int limit) { MethodDelay delay = new MethodDelay(true, limit); StartCoroutine(PInvoke(action, seconds, delay)); return(delay); }
public static MethodDelay InvokeRepeating(this MonoBehaviour mono, Action <MonoBehaviour> action, TimeSpan time, int limit = -1) { MethodDelay delay = new MethodDelay(limit, mono, time, action); delay.Run(); return(delay); }
/// <summary> /// End is always one. If <see cref="MethodDelay"/> is repeating, it'll be invoke after all. /// </summary> /// <param name="action"></param> public MethodDelay SetOnEnd(Action <MonoBehaviour> action, TimeSpan delay = default, int repeatingTime = 0) { MethodDelay methodDelay = new MethodDelay(repeatingTime, Mainer, delay, action); methodDelay.SetScaled(TimeScaled); onEndDelay.Add(methodDelay); return(methodDelay); }
public static MethodDelay Invoke(this MonoBehaviour mono, Action <MonoBehaviour> action, TimeSpan time) { MethodDelay delay = new MethodDelay(mono , time, action); delay.Run(); return(delay); }
/// <summary> /// Cloning is legal only when object hasn't started yet. /// </summary> /// <returns></returns> public MethodDelay Clone() { if (HasStarted) { throw new InvalidOperationException("It's impossible to clone object which has started"); } MethodDelay delay = (MethodDelay)base.MemberwiseClone(); return(delay); }
private IEnumerator PInvoke(Action action, float seconds, MethodDelay delay) { do { yield return(new WaitForSeconds(seconds)); if (delay.HasStopped == false) { action.Invoke(); } } while (delay.IsRepeating && ((delay.LimitedRepating == true && --delay.RepatingValue > 0) || delay.LimitedRepating == false) && delay.HasStopped == false); delay.InvokeOnEnd(); }