public void TweenedObjectConstructorTest()
        {
            var obj = new TweeningTestObject();
            var registeredPropertyTweens = new Dictionary <string, Type>();
            var target = new TweenedObject(obj, registeredPropertyTweens);

            Assert.AreSame(obj, target.Obj);
            Assert.AreSame(registeredPropertyTweens, target.RegisteredPropertyTweens);
        }
        public void AddTweenSharkTest()
        {
            Assert.Inconclusive("needs to be rewritten to prevent runtime errors");

            var obj = new TweeningTestObject();
            var registeredPropertyTweens = new Dictionary <string, Type>();

            registeredPropertyTweens.Add(typeof(SByte).FullName, typeof(SignedByteTweener));

            var target   = new TweenedObject(obj, registeredPropertyTweens);
            var param0   = new PrivateObject(target);
            var accessor = new TweenedObject_Accessor(param0);

            var tweenShark = new TweenShark(obj, 1, new TweenOps().PropTo("DoubleValue", 100).PropTo("FloatValue", 101));

            target.AddTweenShark(tweenShark);


            // check for count of tweens and tweened properties
            Assert.AreEqual(1, accessor._tweens.Count);
            Assert.AreEqual(2, accessor._propertyTweens.Count);
            // check for target values
            Assert.AreEqual(100, ((DoubleTweener)(accessor._propertyTweens["DoubleValue"])).GetTargetValue());
            Assert.AreEqual(101, ((FloatTweener)(accessor._propertyTweens["FloatValue"])).GetTargetValue());

            // when adding a tween on another object the number of tweens must not change, because we do not add the tween
            tweenShark = new TweenShark(new TweeningTestObject(), 1, new TweenOps());
            target.AddTweenShark(tweenShark);
            // check for count of tweens and tweened properties
            Assert.AreEqual(1, accessor._tweens.Count);
            Assert.AreEqual(2, accessor._propertyTweens.Count);

            // when adding a tween on the correct object but with another property the numbers must change
            tweenShark = new TweenShark(obj, 1, new TweenOps().PropTo("IntValue", 102));
            target.AddTweenShark(tweenShark);
            // check for count of tweens and tweened properties
            Assert.AreEqual(2, accessor._tweens.Count);
            Assert.AreEqual(3, accessor._propertyTweens.Count);
            // check for target values
            Assert.AreEqual(100, ((DoubleTweener)(accessor._propertyTweens["DoubleValue"])).GetTargetValue());
            Assert.AreEqual(101, ((FloatTweener)(accessor._propertyTweens["FloatValue"])).GetTargetValue());
            Assert.AreEqual(102, ((SignedInt32Tweener)(accessor._propertyTweens["IntValue"])).GetTargetValue());

            // but when we now add another tween that overrides tweened properties, only the number of tweens may change
            tweenShark = new TweenShark(obj, 1, new TweenOps().PropTo("DoubleValue", 200).PropTo("FloatValue", 201).PropTo("IntValue", 202));
            target.AddTweenShark(tweenShark);
            // check for count of tweens and tweened properties
            Assert.AreEqual(3, accessor._tweens.Count);
            Assert.AreEqual(3, accessor._propertyTweens.Count);
            // check for target values
            Assert.AreEqual(200, ((DoubleTweener)(accessor._propertyTweens["DoubleValue"])).GetTargetValue());
            Assert.AreEqual(201, ((FloatTweener)(accessor._propertyTweens["FloatValue"])).GetTargetValue());
            Assert.AreEqual(202, ((SignedInt32Tweener)(accessor._propertyTweens["IntValue"])).GetTargetValue());
        }
示例#3
0
        public void To(TweenShark tweenShark)
        {
            if (tweenShark.Obj == null)
            {
                TweenShark.Logger.Error("given object is null!");
                return;
            }

            TweenedObject tweenedObject;

            if (!_objects.TryGetValue(tweenShark.Obj, out tweenedObject))
            {
                tweenedObject = new TweenedObject(tweenShark.Obj, _registeredPropertyTweeners);
                _objectsTweenedObjects.Add(tweenedObject);
                _objects[tweenShark.Obj] = tweenedObject;
            }

            // TODO: clone the tweenShark given or make some other class containing all the tweeners
            //- für die interne Verarbeitung brauchen wir Kopien der Tweens
            //	-> so kann der User seine TweenShark instanzen aufheben und wieder benutzen
            //	-> ohne die Kopie bekommt der Nutzer aus seiner Instanz die einzelnen Tweener rausgelöscht, wenn es zu einen overwrite kommt

            tweenedObject.AddTweenShark(tweenShark);
        }
        /// <summary>
        /// We are testing three tweens, that endure 1, 3 and 5 seconds. Ever Tween has onStart, onComplete, onUpdate callbacks set.
        /// To ensure that ticks is working the way it should we count how oftern the callbacks are called for each Tweens.
        /// In the end we check if the the values where tweened correctly.
        /// </summary>
        private void TestSimpleTickScenario()
        {
            var obj = new TweeningTestObject();
            var registeredPropertyTweens = new Dictionary <string, Type>();

            // register tweener for ints
            registeredPropertyTweens.Add(typeof(SByte).FullName, typeof(SignedByteTweener));
            registeredPropertyTweens.Add(typeof(Int16).FullName, typeof(SignedInt16Tweener));
            registeredPropertyTweens.Add(typeof(Int32).FullName, typeof(SignedInt32Tweener));
            registeredPropertyTweens.Add(typeof(Int64).FullName, typeof(SignedInt64Tweener));
            // register tweener for unsigned ints
            registeredPropertyTweens.Add(typeof(Byte).FullName, typeof(UnsignedByteTweener));
            registeredPropertyTweens.Add(typeof(UInt16).FullName, typeof(UnsignedInt16Tweener));
            registeredPropertyTweens.Add(typeof(UInt32).FullName, typeof(UnsignedInt32Tweener));
            registeredPropertyTweens.Add(typeof(UInt64).FullName, typeof(UnsignedInt64Tweener));
            // register tweener for floats
            registeredPropertyTweens.Add(typeof(Single).FullName, typeof(FloatTweener));
            // register tweener for doubles
            registeredPropertyTweens.Add(typeof(Double).FullName, typeof(DoubleTweener));

            var target = new TweenedObject(obj, registeredPropertyTweens); // TODO: Passenden Wert initialisieren

            var onStartTweens          = new Dictionary <TweenShark, int>();
            TweenSharkCallback onStart = tween => onStartTweens[tween]++;

            var onUpdateTweens          = new Dictionary <TweenShark, int>();
            TweenSharkCallback onUpdate = tween => onUpdateTweens[tween]++;

            var onCompleteTweens          = new Dictionary <TweenShark, int>();
            TweenSharkCallback onComplete = tween => onCompleteTweens[tween]++;

            // first tween takes ONE second
            var tween1 = new TweenShark(obj, 1, new TweenOps()
                                        .PropTo("DoubleValue", 100).PropTo("FloatValue", 200)
                                        .OnStart(onStart).OnUpdate(onUpdate).OnComplete(onComplete));

            onStartTweens[tween1]    = 0;
            onUpdateTweens[tween1]   = 0;
            onCompleteTweens[tween1] = 0;
            target.AddTweenShark(tween1);

            // second tween takes THREE seconds
            var tween2 = new TweenShark(obj, 3, new TweenOps()
                                        .PropTo("IntValue", 300).PropTo("UintValue", 400)
                                        .OnStart(onStart).OnUpdate(onUpdate).OnComplete(onComplete));

            onStartTweens[tween2]    = 0;
            onUpdateTweens[tween2]   = 0;
            onCompleteTweens[tween2] = 0;
            target.AddTweenShark(tween2);

            // third tween takes FIVE seconds
            var tween3 = new TweenShark(obj, 5, new TweenOps()
                                        .PropTo("LongValue", 500).PropTo("UlongValue", 600)
                                        .OnStart(onStart).OnUpdate(onUpdate).OnComplete(onComplete));

            onStartTweens[tween3]    = 0;
            onUpdateTweens[tween3]   = 0;
            onCompleteTweens[tween3] = 0;
            target.AddTweenShark(tween3);

            //////////////////////////////////////////////////////////////////////////////////////////
            // do one tick now
            long currentTicks = DateTime.Now.Ticks;
            bool actual       = target.Tick(currentTicks);

            Assert.AreEqual(true, actual);

            // oStart must be called 3 times now, each one time
            Assert.AreEqual(3, onStartTweens.Values.Sum());
            Assert.AreEqual(1, onStartTweens[tween1]);
            Assert.AreEqual(1, onStartTweens[tween2]);
            Assert.AreEqual(1, onStartTweens[tween3]);
            // onUpdate must also be called that often
            Assert.AreEqual(3, onUpdateTweens.Values.Sum());
            Assert.AreEqual(1, onUpdateTweens[tween1]);
            Assert.AreEqual(1, onUpdateTweens[tween2]);
            Assert.AreEqual(1, onUpdateTweens[tween3]);
            // onComplete must not have been called yet
            Assert.AreEqual(0, onCompleteTweens.Values.Sum());
            Assert.AreEqual(0, onCompleteTweens[tween1]);
            Assert.AreEqual(0, onCompleteTweens[tween2]);
            Assert.AreEqual(0, onCompleteTweens[tween3]);

            //////////////////////////////////////////////////////////////////////////////////////////
            System.Threading.Thread.Sleep(200);
            //////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////////////////////
            // do one tick now
            currentTicks = DateTime.Now.Ticks;
            actual       = target.Tick(currentTicks);
            Assert.AreEqual(true, actual);

            // oStart must not be changed
            Assert.AreEqual(3, onStartTweens.Values.Sum());
            Assert.AreEqual(1, onStartTweens[tween1]);
            Assert.AreEqual(1, onStartTweens[tween2]);
            Assert.AreEqual(1, onStartTweens[tween3]);
            // onUpdate must be called again for every tween
            Assert.AreEqual(3 + 3, onUpdateTweens.Values.Sum());
            Assert.AreEqual(1 + 1, onUpdateTweens[tween1]);
            Assert.AreEqual(1 + 1, onUpdateTweens[tween2]);
            Assert.AreEqual(1 + 1, onUpdateTweens[tween3]);
            // onComplete must not have been called yet
            Assert.AreEqual(0, onCompleteTweens.Values.Sum());
            Assert.AreEqual(0, onCompleteTweens[tween1]);
            Assert.AreEqual(0, onCompleteTweens[tween2]);
            Assert.AreEqual(0, onCompleteTweens[tween3]);

            //////////////////////////////////////////////////////////////////////////////////////////
            System.Threading.Thread.Sleep(1000);
            //////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////////////////////
            // do one tick now
            currentTicks = DateTime.Now.Ticks;
            actual       = target.Tick(currentTicks);
            Assert.AreEqual(true, actual);

            // oStart must not be changed
            Assert.AreEqual(3, onStartTweens.Values.Sum());
            Assert.AreEqual(1, onStartTweens[tween1]);
            Assert.AreEqual(1, onStartTweens[tween2]);
            Assert.AreEqual(1, onStartTweens[tween3]);
            // onUpdate must be called again for every tween
            Assert.AreEqual(3 + 3 + 3, onUpdateTweens.Values.Sum());
            Assert.AreEqual(1 + 1 + 1, onUpdateTweens[tween1]);
            Assert.AreEqual(1 + 1 + 1, onUpdateTweens[tween2]);
            Assert.AreEqual(1 + 1 + 1, onUpdateTweens[tween3]);
            // onComplete be called for the first and second tween
            Assert.AreEqual(1, onCompleteTweens.Values.Sum());
            Assert.AreEqual(1, onCompleteTweens[tween1]);
            Assert.AreEqual(0, onCompleteTweens[tween2]);
            Assert.AreEqual(0, onCompleteTweens[tween3]);

            //////////////////////////////////////////////////////////////////////////////////////////
            System.Threading.Thread.Sleep(2000);
            //////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////////////////////
            // do one tick now
            currentTicks = DateTime.Now.Ticks;
            actual       = target.Tick(currentTicks);
            Assert.AreEqual(true, actual);

            // oStart must not be changed
            Assert.AreEqual(3, onStartTweens.Values.Sum());
            Assert.AreEqual(1, onStartTweens[tween1]);
            Assert.AreEqual(1, onStartTweens[tween2]);
            Assert.AreEqual(1, onStartTweens[tween3]);
            // onUpdate must be called again for every tween, but the first one
            Assert.AreEqual(3 + 3 + 3 + 2, onUpdateTweens.Values.Sum());
            Assert.AreEqual(1 + 1 + 1, onUpdateTweens[tween1]);
            Assert.AreEqual(1 + 1 + 1 + 1, onUpdateTweens[tween2]);
            Assert.AreEqual(1 + 1 + 1 + 1, onUpdateTweens[tween3]);
            // onComplete be called for all tweens
            Assert.AreEqual(2, onCompleteTweens.Values.Sum());
            Assert.AreEqual(1, onCompleteTweens[tween1]);
            Assert.AreEqual(1, onCompleteTweens[tween2]);
            Assert.AreEqual(0, onCompleteTweens[tween3]);

            //////////////////////////////////////////////////////////////////////////////////////////
            System.Threading.Thread.Sleep(2000);
            //////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////////////////////
            // do one tick now
            currentTicks = DateTime.Now.Ticks;
            actual       = target.Tick(currentTicks);
            // there is no pending tween left, so we expect false as return value of Tick()
            Assert.AreEqual(false, actual);

            // oStart must not be changed
            Assert.AreEqual(3, onStartTweens.Values.Sum());
            Assert.AreEqual(1, onStartTweens[tween1]);
            Assert.AreEqual(1, onStartTweens[tween2]);
            Assert.AreEqual(1, onStartTweens[tween3]);
            // onUpdate must be called again for every tween, but the first and second one
            Assert.AreEqual(3 + 3 + 3 + 2 + 1, onUpdateTweens.Values.Sum());
            Assert.AreEqual(1 + 1 + 1, onUpdateTweens[tween1]);
            Assert.AreEqual(1 + 1 + 1 + 1, onUpdateTweens[tween2]);
            Assert.AreEqual(1 + 1 + 1 + 1 + 1, onUpdateTweens[tween3]);
            // onComplete be called for all tweens
            Assert.AreEqual(3, onCompleteTweens.Values.Sum());
            Assert.AreEqual(1, onCompleteTweens[tween1]);
            Assert.AreEqual(1, onCompleteTweens[tween2]);
            Assert.AreEqual(1, onCompleteTweens[tween3]);

            //////////////////////////////////////////////////////////////////////////////////////////
            // test the results
            Assert.AreEqual(obj.DoubleValue, 100);
            Assert.AreEqual(obj.FloatValue, 200);
            Assert.AreEqual(obj.IntValue, 300);
            Assert.AreEqual(obj.UintValue, 400U);
            Assert.AreEqual(obj.LongValue, 500L);
            Assert.AreEqual(obj.UlongValue, 600UL);

            //////////////////////////////////////////////////////////////////////////////////////////
            System.Threading.Thread.Sleep(1000);
            //////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////////////////////////////////////////////////////////
            // the last tick... nothing can change, since there is no tween left
            currentTicks = DateTime.Now.Ticks;
            actual       = target.Tick(currentTicks);
            // there is no pending tween left, so we expect false as return value of Tick()
            Assert.AreEqual(false, actual);

            // oStart must not be changed
            Assert.AreEqual(3, onStartTweens.Values.Sum());
            Assert.AreEqual(1, onStartTweens[tween1]);
            Assert.AreEqual(1, onStartTweens[tween2]);
            Assert.AreEqual(1, onStartTweens[tween3]);
            // onUpdate must not be changed
            Assert.AreEqual(3 + 3 + 3 + 2 + 1, onUpdateTweens.Values.Sum());
            Assert.AreEqual(1 + 1 + 1, onUpdateTweens[tween1]);
            Assert.AreEqual(1 + 1 + 1 + 1, onUpdateTweens[tween2]);
            Assert.AreEqual(1 + 1 + 1 + 1 + 1, onUpdateTweens[tween3]);
            // onUpdate must not be changed
            Assert.AreEqual(3, onCompleteTweens.Values.Sum());
            Assert.AreEqual(1, onCompleteTweens[tween1]);
            Assert.AreEqual(1, onCompleteTweens[tween2]);
            Assert.AreEqual(1, onCompleteTweens[tween3]);
        }