示例#1
0
        protected MethodDelay Invoke(Action action, float seconds)
        {
            MethodDelay delay = new MethodDelay();

            StartCoroutine(PInvoke(action, seconds, delay));
            return(delay);
        }
示例#2
0
        protected MethodDelay InvokeRepeating(Action action, float seconds, int limit)
        {
            MethodDelay delay = new MethodDelay(true, limit);

            StartCoroutine(PInvoke(action, seconds, delay));
            return(delay);
        }
示例#3
0
        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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        public static MethodDelay Invoke(this MonoBehaviour mono, Action <MonoBehaviour> action, TimeSpan time)
        {
            MethodDelay delay = new MethodDelay(mono
                                                , time, action);

            delay.Run();
            return(delay);
        }
示例#6
0
        /// <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);
        }
示例#7
0
        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();
        }