public IEnumerator LockObjectBehavior()
        {
            // Given a training with LockObjectBehavior
            TrainingSceneObject trainingSceneObject = TestingUtils.CreateSceneObject("TestObject");

            ICourse training1 = new LinearTrainingBuilder("Training")
                                .AddChapter(new LinearChapterBuilder("Chapter")
                                            .AddStep(new BasicStepBuilder("Step")
                                                     .AddBehavior(new LockObjectBehavior(trainingSceneObject))))
                                .Build();

            // When we serialize and deserialize it
            ICourse training2 = Serializer.CourseFromByteArray(Serializer.CourseToByteArray(training1));


            // Then that's behavior target is still the same.
            LockObjectBehavior behavior1 = training1.Data.FirstChapter.Data.FirstStep.Data.Behaviors.Data.Behaviors.First() as LockObjectBehavior;
            LockObjectBehavior behavior2 = training2.Data.FirstChapter.Data.FirstStep.Data.Behaviors.Data.Behaviors.First() as LockObjectBehavior;

            Assert.IsNotNull(behavior1);
            Assert.IsNotNull(behavior2);
            Assert.AreEqual(behavior1.Data.Target.Value, behavior2.Data.Target.Value);

            // Cleanup
            TestingUtils.DestroySceneObject(trainingSceneObject);

            return(null);
        }
Beispiel #2
0
        public IEnumerator LockBehaviorOnLockedObject()
        {
            // Given a LockObjectBehavior, an locked game object, and a full training step,
            GameObject          gameObject   = new GameObject("Test");
            TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>();

            Step       step       = new Step("TestStep");
            Transition transition = new Transition();

            step.Data.Transitions.Data.Transitions.Add(transition);

            LockObjectBehavior lockBehavior = new LockObjectBehavior(targetObject);

            step.Data.Behaviors.Data.Behaviors.Add(lockBehavior);

            step.Configure(RuntimeConfigurator.Configuration.GetCurrentMode());

            targetObject.SetLocked(true);

            // When we fulfill the step,
            bool isLockedInitially = targetObject.IsLocked;

            step.LifeCycle.Activate();

            while (step.LifeCycle.Stage != Stage.Active)
            {
                yield return(null);

                step.Update();
            }

            bool isLockedDuringStep = targetObject.IsLocked;

            step.LifeCycle.Deactivate();

            while (step.LifeCycle.Stage != Stage.Inactive)
            {
                yield return(null);

                step.Update();
            }

            bool isLockedInEnd = targetObject.IsLocked;

            // Then the game object was locked initially, locked during step execution, and locked after the completion.
            Assert.IsTrue(isLockedInitially, "Object should be locked initially");
            Assert.IsTrue(isLockedDuringStep, "Object should be locked during step");
            Assert.IsTrue(isLockedInEnd, "Object should be locked in the end");

            yield break;
        }
Beispiel #3
0
        public IEnumerator FastForwardActivatingBehavior()
        {
            // Given a LockObjectBehavior, an unlocked game object, and an activated full training step,
            GameObject          gameObject   = new GameObject("Test");
            TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>();

            Step       step       = new Step("TestStep");
            Transition transition = new Transition();

            step.Data.Transitions.Data.Transitions.Add(transition);

            LockObjectBehavior behavior = new LockObjectBehavior(targetObject);

            step.Data.Behaviors.Data.Behaviors.Add(behavior);

            step.Configure(RuntimeConfigurator.Configuration.GetCurrentMode());

            bool isLockedInitially = targetObject.IsLocked;

            step.LifeCycle.Activate();

            yield return(null);

            step.Update();

            // When we mark the behavior to fast-forward,
            behavior.LifeCycle.MarkToFastForward();

            // Then it should work without any differences because the behavior is done immediately anyways.
            bool isLockedDuringStep = targetObject.IsLocked;

            step.LifeCycle.Deactivate();

            while (step.LifeCycle.Stage != Stage.Inactive)
            {
                yield return(null);

                step.Update();
            }

            bool isLockedInEnd = targetObject.IsLocked;

            Assert.IsFalse(isLockedInitially, "Object should not be locked initially");
            Assert.IsTrue(isLockedDuringStep, "Object should be locked during step");
            Assert.IsFalse(isLockedInEnd, "Object should not be locked in the end");

            yield break;
        }
Beispiel #4
0
        public IEnumerator CreateLockBehavior()
        {
            // Given an game object with a changed unique name,
            GameObject          gameObject   = new GameObject("Test");
            TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>();

            targetObject.ChangeUniqueName(targetName);

            // When we reference it by reference or unique name in the LockObjectBehavior,
            LockObjectBehavior lock1 = new LockObjectBehavior(targetObject);
            LockObjectBehavior lock2 = new LockObjectBehavior(targetName);

            // Then it is the same object.
            Assert.AreEqual(targetObject, lock1.Data.Target.Value);
            Assert.AreEqual(targetObject, lock2.Data.Target.Value);

            yield break;
        }
Beispiel #5
0
        public IEnumerator FastForwardInactiveBehavior()
        {
            // Given a LockObjectBehavior and an unlocked game object,
            GameObject          gameObject   = new GameObject("Test");
            TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>();

            LockObjectBehavior behavior = new LockObjectBehavior(targetObject);

            // When we mark the behavior to fast-forward,
            behavior.LifeCycle.MarkToFastForward();

            // Then it is still in PendingActivation state because it hasn't been activated yet.
            Assert.AreEqual(Stage.Inactive, behavior.LifeCycle.Stage);

            // Cleanup created game objects.
            Object.DestroyImmediate(gameObject);

            yield break;
        }