Example #1
0
        public IEnumerator Periodic() => UniTask.ToCoroutine(async() =>
        {
            var raisedTime = new List <DateTime>();
            var count      = 0;
            var complete   = new UniTaskCompletionSource();

            PlayerLoopTimer timer = null;
            timer = PlayerLoopTimer.StartNew(TimeSpan.FromSeconds(1), true, DelayType.DeltaTime, PlayerLoopTiming.Update, CancellationToken.None, _ =>
            {
                raisedTime.Add(DateTime.UtcNow);
                count++;
                if (count == 3)
                {
                    complete.TrySetResult();
                    timer.Dispose();
                }
            }, null);

            var start = DateTime.UtcNow;
            await complete.Task;

            Between(TimeSpan.FromSeconds(0.9), raisedTime[0] - start, TimeSpan.FromSeconds(1.1));
            Between(TimeSpan.FromSeconds(1.9), raisedTime[1] - start, TimeSpan.FromSeconds(2.1));
            Between(TimeSpan.FromSeconds(2.9), raisedTime[2] - start, TimeSpan.FromSeconds(3.1));
        });
Example #2
0
        public IEnumerator StandardTicks() => UniTask.ToCoroutine(async() =>
        {
            foreach (var delay in new[] { DelayType.DeltaTime, DelayType.Realtime, DelayType.UnscaledDeltaTime })
            {
                var raisedTimeout = new UniTaskCompletionSource();
                PlayerLoopTimer.StartNew(TimeSpan.FromSeconds(1), false, delay, PlayerLoopTiming.Update, CancellationToken.None, _ =>
                {
                    raisedTimeout.TrySetResult();
                }, null);


                var sw = Stopwatch.StartNew();
                await raisedTimeout.Task;
                sw.Stop();

                Between(TimeSpan.FromSeconds(0.9), sw.Elapsed, TimeSpan.FromSeconds(1.1));
            }
        });