示例#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)));
            }
        }
示例#2
0
        /// <summary>
        /// Pulsates a value.
        /// </summary>
        /// <param name="amount">The amount to increase the value by.</param>
        public static CommandDelegate PulsateScale(Ref <float> scale, float amount, double duration)
        {
            CheckArgumentNonNull(scale, "scale");
            CommandDelegate tweenBack = null;

            return(Cmd.Sequence(
                       Cmd.Do(() =>
            {
                // Because we don't know what the original scale is at this point,
                // we have to recreate the scale back tween every time.
                tweenBack = Cmd.ChangeTo(scale, scale.Value, duration / 2.0, Ease.Smooth());
            }),
                       Cmd.ChangeBy(scale, amount, duration / 2.0, Ease.Smooth()),
                       Cmd.Defer(() => tweenBack)
                       ));
        }
示例#3
0
        public static void TestChangeBy()
        {
            const float floatOffset = 4.8f;
            const float floatStart  = 1.2f;
            float       floatVal    = floatStart;
            Ref <float> floatRef    = new Ref <float>(
                () => floatVal,
                t => floatVal = t
                );

            const double doubleOffset = 3.2;
            const double doubleStart  = 9.2;
            double       doubleVal    = doubleStart;
            Ref <double> doubleRef    = new Ref <double>(
                () => doubleVal,
                t => doubleVal = t
                );

            Vector2       vec2Offset = new Vector2(9.5f, 2.0f);
            Vector2       vec2Start  = new Vector2(4.0f, 5.0f);
            Vector2       vec2Val    = vec2Start;
            Ref <Vector2> vec2Ref    = new Ref <Vector2>(
                () => vec2Val,
                t => vec2Val = t
                );

            Vector3       vec3Offset = new Vector3(4.0f, 19.0f, 2.0f);
            Vector3       vec3Start  = new Vector3(92.0f, 0.5f, 34.0f);
            Vector3       vec3Val    = vec3Start;
            Ref <Vector3> vec3Ref    = new Ref <Vector3>(
                () => vec3Val,
                t => vec3Val = t
                );

            Vector4       vec4Offset = new Vector4(92.0f, 0.5f, 14.0f, 7.0f);
            Vector4       vec4Start  = new Vector4(0.4f, 10.0f, 3.0f, 82.0f);
            Vector4       vec4Val    = vec4Start;
            Ref <Vector4> vec4Ref    = new Ref <Vector4>(
                () => vec4Val,
                t => vec4Val = t
                );

            CommandQueue queue = new CommandQueue();

            queue.Enqueue(
                Cmd.Repeat(2,
                           Cmd.Parallel(
                               Cmd.ChangeBy(floatRef, floatOffset, 1.0),
                               Cmd.ChangeBy(doubleRef, doubleOffset, 1.0),
                               Cmd.ChangeBy(vec2Ref, vec2Offset, 1.0),
                               Cmd.ChangeBy(vec3Ref, vec3Offset, 1.0),
                               Cmd.ChangeBy(vec4Ref, vec4Offset, 1.0)
                               )
                           )
                );

            queue.Update(0.3);
            // Check basic lerping works.
            Assert.AreEqual(floatVal, floatOffset * 0.3f + floatStart, 0.01);
            Assert.AreEqual(doubleVal, doubleOffset * 0.3 + doubleStart, 0.01);
            AreEqual(vec2Val, vec2Offset * 0.3f + vec2Start, 0.01f);
            AreEqual(vec3Val, vec3Offset * 0.3f + vec3Start, 0.01f);
            AreEqual(vec4Val, vec4Offset * 0.3f + vec4Start, 0.01f);
            queue.Update(0.7);
            // Completes the offset
            Assert.AreEqual(floatVal, floatOffset + floatStart, 0.01f);
            Assert.AreEqual(doubleVal, doubleOffset + doubleStart, 0.01);
            AreEqual(vec2Val, vec2Offset + vec2Start, 0.01f);
            AreEqual(vec3Val, vec3Offset + vec3Start, 0.01f);
            AreEqual(vec4Val, vec4Offset + vec4Start, 0.01f);
            queue.Update(0.3);
            // Check that it compounds the result
            Assert.AreEqual(floatVal, floatOffset * 1.3f + floatStart, 0.01f);
            Assert.AreEqual(doubleVal, doubleOffset * 1.3 + doubleStart, 0.01);
            AreEqual(vec2Val, vec2Offset * 1.3f + vec2Start, 0.01f);
            AreEqual(vec3Val, vec3Offset * 1.3f + vec3Start, 0.01f);
            AreEqual(vec4Val, vec4Offset * 1.3f + vec4Start, 0.01f);
            // Reset the vals to zero.
            floatVal  = 0.0f;
            doubleVal = 0.0;
            vec2Val   = Vector2.zero;
            vec3Val   = Vector3.zero;
            vec4Val   = Vector4.zero;
            queue.Update(0.7);
            // And check the offset continues.
            Assert.AreEqual(floatVal, floatOffset * 0.7f, 0.01f);
            Assert.AreEqual(doubleVal, doubleOffset * 0.7, 0.01);
            AreEqual(vec2Val, vec2Offset * 0.7f, 0.01f);
            AreEqual(vec3Val, vec3Offset * 0.7f, 0.01f);
            AreEqual(vec4Val, vec4Offset * 0.7f, 0.01f);
        }