Exemplo n.º 1
0
        public static IEnumerator <CommandDelegate> CoroutineOne(Ref <float> val, int depth, Ref <int> calledCount)
        {
            if (depth > 0)
            {
                ++calledCount.Value;
                yield return(Cmd.ChangeTo(val, 5.0f, 4.0f));

                yield return(Cmd.WaitForSeconds(1.0f));

                yield return(Cmd.ChangeBy(val, -4.0f, 4.0f));

                yield return(null);        // Wait for a single frame

                yield return(Cmd.Coroutine(() => CoroutineOne(val, depth - 1, calledCount)));
            }
        }
Exemplo n.º 2
0
        public static void TestCoroutine()
        {
            float       floatVal = 0.0f;
            Ref <float> floatRef = new Ref <float>(
                () => floatVal,
                t => floatVal = t
                );
            int calledCount = 0;

            Ref <int> calledCountRef = new Ref <int>(
                () => calledCount,
                t => calledCount = t
                );

            CommandQueue queue = new CommandQueue();

            queue.Enqueue(
                Cmd.Repeat(2,
                           Cmd.Coroutine(() => CoroutineOne(floatRef, 2, calledCountRef))
                           )
                );

            Assert.AreEqual(calledCount, 0);
            queue.Update(2.0f);
            Assert.AreEqual(calledCount, 1);
            Assert.AreEqual(floatVal, 2.5f, 0.001f);
            queue.Update(5.0f);
            Assert.AreEqual(calledCount, 1);
            Assert.AreEqual(floatVal, 3.0f, 0.001f);
            queue.Update(2.0f);
            Assert.AreEqual(calledCount, 1);
            queue.Update(0.0f);     // yield return null;
            Assert.AreEqual(calledCount, 2);
            queue.Update(4.0f);
            Assert.AreEqual(calledCount, 2);
            Assert.AreEqual(floatVal, 5.0f, 0.001f);
            queue.Update(5.0f);
            Assert.AreEqual(calledCount, 2);
            queue.Update(0.0f);     // yield return null;
            Assert.AreEqual(calledCount, 3);
            queue.Update(4.0f);
            Assert.AreEqual(calledCount, 3);
            Assert.AreEqual(floatVal, 5.0f, 0.001f);
        }