示例#1
0
        public void firstSceneEndingTriggersLoopStart()
        {
            var firstScene = factory.CreateMock <Scene>(MockStyle.Stub);
            var lastScene  = factory.CreateMock <Scene>(MockStyle.Stub);
            var messagePromptCoordinator = new MessagePromptCoordinator(null, null);

            firstScene.Stub.Out.Method(_ => _.TimeLength()).WillReturn(0.0f);

            // emulate behavior of sceneFactory and return mock Scenes
            sceneFactory.Expects.AtLeastOne.Method(_ => _.PreloadAssets());
            sceneFactory.Expects.AtLeastOne.Method(_ => _.GetFirstScene()).WillReturn(firstScene.MockObject);
            sceneFactory.Expects.AtLeastOne.MethodWith(_ => _.isLastScene(firstScene.MockObject)).WillReturn(false);
            loopTracker.Expects.One.Method(_ => _.startPlaying());
            loopTracker.Expects.One.Method(_ => _.Rewind(0f)).WithAnyArguments();
            loopTracker.Expects.One.Method(_ => _.NextLoop(0f)).WithAnyArguments();
            loopTracker.Expects.One.Method(_ => _.Stop());
            sceneFactory.Expects.One.MethodWith(_ => _.GetSceneAfter(firstScene.MockObject)).WillReturn(lastScene.MockObject);
            sceneFactory.Expects.AtLeastOne.MethodWith(_ => _.isLastScene(lastScene.MockObject)).WillReturn(true);
            sceneFactory.Expects.AtLeastOne.Method(_ => _.Reset());

            var sceneManager = new SceneManager(sceneFactory.MockObject, loopTracker.MockObject, messagePromptCoordinator);

            sceneManager.NextScene();
            sceneManager.NextScene();
        }
示例#2
0
        public void failToTriggerAnyCallbackWhenTouchedOnSecondHintCall()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator (prompt, messageBox);

            var singleActionResponse = new Dictionary<Sprite, ActionResponsePair[]> {
                {mocks.DynamicMock<Sprite>(), new [] {new ActionResponsePair("action", new[] {"response"})}}
            };

            using (mocks.Ordered()) {
                Expect.Call (sensor.insideSprite (null, null, new[] {TouchInput.TouchPhase.Began}))
                    .Constraints(Rhino.Mocks.Constraints.Is.Anything(), Rhino.Mocks.Constraints.Is.Anything(), Rhino.Mocks.Constraints.Is.Equal(new[] {TouchInput.TouchPhase.Began}))
                    .Return (false);
                // touch on second tick
                Expect.Call (sensor.insideSprite (null, null, new[] {TouchInput.TouchPhase.Began}))
                    .Constraints(Rhino.Mocks.Constraints.Is.Anything(), Rhino.Mocks.Constraints.Is.Anything(), Rhino.Mocks.Constraints.Is.Equal(new[] {TouchInput.TouchPhase.Began}))
                    .Return (true);
                Expect.Call(sensor.hasTaps()).Return(true);
            }

            mocks.ReplayAll ();

            bool hintTriggered = false;
            bool secondHintTriggered = false;

            Action<Sprite> setHintTriggered =  GameObject => { hintTriggered = true; };
            Action<Sprite> setSecondHintTriggered =  GameObject => { secondHintTriggered = true; };

            messagePromptCoordinator.hintWhenTouched (
                setHintTriggered,
                sensor,
                beforeEverything,
                singleActionResponse
                );

            messagePromptCoordinator.Update (beforeEverything);

            messagePromptCoordinator.hintWhenTouched (
                setSecondHintTriggered,
                sensor,
                beforeMessageTime,
                singleActionResponse
                );

            messagePromptCoordinator.Update(beforeMessageTime);

            messagePromptCoordinator.hintWhenTouched (
                setSecondHintTriggered,
                sensor,
                afterMessageTime,
                singleActionResponse
                );

            messagePromptCoordinator.Update(afterMessageTime);

            Assert.That (hintTriggered, Is.False);
            Assert.That (secondHintTriggered, Is.False);

            mocks.VerifyAll ();
        }
示例#3
0
        public void triggerFirstCallbackWhenTouchedOnFirstHintCall()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            var singleActionResponse = new Dictionary <GameObject, ActionResponsePair[]> {
                { gameObject.MockObject, new [] { new ActionResponsePair("action", new[] { "response" }) } }
            };

            using (factory.Ordered()) {
                // touch on first tick
                expectTouchWithinSprite(sprite.MockObject, true);
                sensor.Expects.One.MethodWith(_ => _.hasTaps()).WillReturn(true);
                // no touch on second tick
                expectTouchWithinSprite(sprite.MockObject, false);
            }


            bool hintTriggered       = false;
            bool secondHintTriggered = false;

            Action <GameObject> setHintTriggered = GameObject => {
                hintTriggered = true;
            };
            Action <GameObject> setSecondHintTriggered = GameObject => {
                secondHintTriggered = true;
            };

            messagePromptCoordinator.hintWhenTouched(
                setHintTriggered,
                sensor.MockObject,
                beforeEverything,
                singleActionResponse
                );

            messagePromptCoordinator.Update(beforeEverything);

            messagePromptCoordinator.hintWhenTouched(
                setSecondHintTriggered,
                sensor.MockObject,
                beforeMessageTime,
                singleActionResponse
                );

            messagePromptCoordinator.Update(beforeMessageTime);

            messagePromptCoordinator.hintWhenTouched(
                setSecondHintTriggered,
                sensor.MockObject,
                afterMessageTime,
                singleActionResponse
                );

            messagePromptCoordinator.Update(afterMessageTime);

            Assert.That(hintTriggered, Iz.True);
            Assert.That(secondHintTriggered, Iz.False);
        }
        public void failToTriggerAnyCallbackWhenTouchedOnSecondHintCall()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            var singleActionResponse = new Dictionary<GameObject, ActionResponsePair[]> {
                { gameObject.MockObject, new [] { new ActionResponsePair("action", new[] { "response" }) } }
            };

            using (factory.Ordered()) {
                expectTouchWithinSprite(sprite.MockObject, false);
                // touch on second tick
                expectTouchWithinSprite(sprite.MockObject, true);
                sensor.Expects.One.MethodWith(_ => _.hasTaps()).WillReturn(true);
            }

            bool hintTriggered = false;
            bool secondHintTriggered = false;

            Action<GameObject> setHintTriggered = GameObject => {
                hintTriggered = true;
            };
            Action<GameObject> setSecondHintTriggered = GameObject => {
                secondHintTriggered = true;
            };

            messagePromptCoordinator.hintWhenTouched(
                setHintTriggered,
                sensor.MockObject,
                beforeEverything,
                singleActionResponse
            );

            messagePromptCoordinator.Update(beforeEverything);

            messagePromptCoordinator.hintWhenTouched(
                setSecondHintTriggered,
                sensor.MockObject,
                beforeMessageTime,
                singleActionResponse
            );

            messagePromptCoordinator.Update(beforeMessageTime);

            messagePromptCoordinator.hintWhenTouched(
                setSecondHintTriggered,
                sensor.MockObject,
                afterMessageTime,
                singleActionResponse
            );

            messagePromptCoordinator.Update(afterMessageTime);

            Assert.That(hintTriggered, Iz.False);
            Assert.That(secondHintTriggered, Iz.False);
        }
示例#5
0
    public SceneManager(AbstractSceneFactory sceneFactory, AbstractLoopTracker loopTracker, MessagePromptCoordinator messagePromptCoordinator)
    {
        if(sceneFactory == null) {
            sceneFactory = new SceneFactory(this);
        }
        this.sceneFactory = sceneFactory;
        this.loopTracker = loopTracker;
        this.messagePromptCoordinator = messagePromptCoordinator;

        StartGame();
    }
示例#6
0
    public SceneManager(AbstractSceneFactory sceneFactory, AbstractLoopTracker loopTracker, MessagePromptCoordinator messagePromptCoordinator)
    {
        if (sceneFactory == null)
        {
            sceneFactory = new SceneFactory(this);
        }
        this.sceneFactory             = sceneFactory;
        this.loopTracker              = loopTracker;
        this.messagePromptCoordinator = messagePromptCoordinator;

        StartGame();
    }
        public void doesNotTriggerWhenNotTouched()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            messagePromptCoordinator.hintWhenTouched(
                GameObject => Assert.Fail(),
                sensor.MockObject,
                beforeEverything,
                new Dictionary<GameObject, ActionResponsePair[]> { }
            );
            messagePromptCoordinator.Update(beforeEverything);
        }
示例#8
0
        public void doesNotTriggerWhenNotTouched()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            messagePromptCoordinator.hintWhenTouched(
                GameObject => Assert.Fail(),
                sensor.MockObject,
                beforeEverything,
                new Dictionary <GameObject, ActionResponsePair[]> {
            }
                );
            messagePromptCoordinator.Update(beforeEverything);
        }
示例#9
0
        public void triggerWhenTouchedAndTimeElapsed()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            var singleActionResponse = new Dictionary <GameObject, ActionResponsePair[]> {
                { gameObject.MockObject, new [] { new ActionResponsePair("action", new[] { "response" }) } }
            };

            using (factory.Ordered()) {
                expectTouchWithinSprite(sprite.MockObject, true);
                expectTouchWithinSprite(sprite.MockObject, false);
            }

            bool hintTriggered = false;

            messagePromptCoordinator.hintWhenTouched(
                GameObject => {
                hintTriggered = true;
            },
                sensor.MockObject,
                beforeEverything,
                singleActionResponse
                );

            messagePromptCoordinator.Update(beforeEverything);

            Assert.That(hintTriggered, Iz.False);

            messagePromptCoordinator.hintWhenTouched(
                GameObject => {
                hintTriggered = true;
            },
                sensor.MockObject,
                afterMessageTime,
                singleActionResponse
                );

            messagePromptCoordinator.Update(afterMessageTime);

            Assert.That(hintTriggered, Iz.True);
        }
示例#10
0
        public void firstSceneEndingTriggersLoopStart()
        {
            var firstScene = factory.CreateMock<Scene>(MockStyle.Stub);
            var lastScene = factory.CreateMock<Scene>(MockStyle.Stub);
            var messagePromptCoordinator = new MessagePromptCoordinator(null, null);

            firstScene.Stub.Out.Method(_ => _.TimeLength()).WillReturn(0.0f);

            // emulate behavior of sceneFactory and return mock Scenes
            sceneFactory.Expects.AtLeastOne.Method(_ => _.PreloadAssets());
            sceneFactory.Expects.AtLeastOne.Method(_ => _.GetFirstScene()).WillReturn(firstScene.MockObject);
            sceneFactory.Expects.AtLeastOne.MethodWith(_ => _.isLastScene(firstScene.MockObject)).WillReturn(false);
            loopTracker.Expects.One.Method(_ => _.startPlaying());
            loopTracker.Expects.One.Method(_ => _.Rewind(0f)).WithAnyArguments();
            loopTracker.Expects.One.Method(_ => _.NextLoop(0f)).WithAnyArguments();
            loopTracker.Expects.One.Method(_ => _.Stop());
            sceneFactory.Expects.One.MethodWith(_ => _.GetSceneAfter(firstScene.MockObject)).WillReturn(lastScene.MockObject);
            sceneFactory.Expects.AtLeastOne.MethodWith(_ => _.isLastScene(lastScene.MockObject)).WillReturn(true);
            sceneFactory.Expects.AtLeastOne.Method(_ => _.Reset());

            var sceneManager = new SceneManager(sceneFactory.MockObject, loopTracker.MockObject, messagePromptCoordinator);
            sceneManager.NextScene();
            sceneManager.NextScene();
        }
示例#11
0
 public void hintWhenTouched(Action<Sprite> onCompleted, MessagePromptCoordinator messagePromptCoordinator, TouchSensor touch)
 {
     if (interactions == null) {
         interactions = new Dictionary<Sprite, ActionResponsePair[]> {
             {clipBoard, new [] {new ActionResponsePair("look at chart", new [] {"even the doctors don't understand the test results"})}},
             {zzz,       new [] {new ActionResponsePair("catch z", new [] {"that's not going to wake him up"})}},
             {heartRate, new [] {new ActionResponsePair("look at monitor", new []{"things are stable, for now"})}},
             {cover,     new [] {new ActionResponsePair("prod him", new[] {"He doesn't want to wake up"}),
                                 new ActionResponsePair("prod him until he wakes up", new [] {"OK"}),
                                 new ActionResponsePair("expose him to the cold",
                                     new [] {
                                     "you remove the blankets, security and otherwise.",
                                     "there are now two distinct halves.",
                                     "are they the same person?"}),
                 }},
         };
     }
     messagePromptCoordinator.hintWhenTouched(onCompleted, touch, Time.time, interactions);
 }
示例#12
0
 public void hintWhenTouched(Action <GameObject> onCompleted, MessagePromptCoordinator messagePromptCoordinator, TouchSensor touch)
 {
     messagePromptCoordinator.hintWhenTouched(onCompleted, touch, Time.time, interactions);
 }
示例#13
0
 public SceneManager(LoopTracker loopTracker, MessagePromptCoordinator messagePromptCoordinator)
 {
     this.loopTracker = loopTracker;
     this.messagePromptCoordinator = messagePromptCoordinator;
 }
示例#14
0
 public SceneManager(LoopTracker loopTracker, MessagePromptCoordinator messagePromptCoordinator) : this(null, loopTracker, messagePromptCoordinator)
 {
 }
示例#15
0
        public void triggersFrontMostObjectWhenObjectsOverlap()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            var first = factory.CreateMock <GameObject>();

            first.Expects.Any.Method(_ => _.GetComponent <Sprite>()).WillReturn(sprite.MockObject);
            var second = factory.CreateMock <GameObject>();

            second.Expects.Any.Method(_ => _.GetComponent <Sprite>()).WillReturn(sprite.MockObject);

            var back          = new Vector3(0, 0, 0);
            var backTransform = new Transform()
            {
                position = back
            };
            var front          = new Vector3(0, 0, -1);
            var frontTransform = new Transform()
            {
                position = front
            };

            // if you think this looks weird, it is. we can't mock bareback public fields, and Unity is full of them.
            first.MockObject.transform  = backTransform;
            second.MockObject.transform = frontTransform;

            var frontObjectResponse = "front object response";
            var frontObjectAction   = "action2";
            var actionResponses     = new Dictionary <GameObject, ActionResponsePair[]> {
                { first.MockObject, new [] { new ActionResponsePair("action", new[] { "response" }) } },
                { second.MockObject, new [] { new ActionResponsePair(frontObjectAction, new[] { frontObjectResponse }) } }
            };

            using (factory.Ordered()) {
                expectTouchWithinSprite(sprite.MockObject, true);
                expectTouchWithinSprite(sprite.MockObject, false);
                expectTouchWithinSprite(sprite.MockObject, true);
            }

            messagePromptCoordinator.hintWhenTouched(
                GameObject => {
            },
                sensor.MockObject,
                beforeEverything,
                actionResponses
                );

            messagePromptCoordinator.Update(beforeEverything);

            GameObject triggeredObject = null;

            messageBox.Expects.One.Method(_ => _.setMessage("")).With(Is.EqualTo(frontObjectResponse));
            messageBox.Expects.One.Method(_ => _.hide());
            messageBox.Expects.One.Method(_ => _.show());

            prompt.Expects.One.Method(_ => _.setText("")).With(Is.EqualTo(frontObjectAction));
            prompt.Expects.One.Method(_ => _.hide());
            prompt.Expects.One.Method(_ => _.show());

            messagePromptCoordinator.hintWhenTouched(
                gameObject => {
                triggeredObject = gameObject;
            },
                sensor.MockObject,
                afterMessageTime,
                actionResponses
                );

            messageBox.Expects.One.Method(_ => _.hide());
            messagePromptCoordinator.Update(afterMessageTime + MessagePromptCoordinator.promptTime + 0.1f);

            Assert.That(triggeredObject, Iz.EqualTo(second.MockObject));
        }
示例#16
0
 public void hintWhenTouched(Action<GameObject> onCompleted, MessagePromptCoordinator messagePromptCoordinator, TouchSensor touch)
 {
     messagePromptCoordinator.hintWhenTouched(onCompleted, touch, Time.time, interactions);
 }
示例#17
0
 public SceneManager(LoopTracker loopTracker, MessagePromptCoordinator messagePromptCoordinator)
     : this(null, loopTracker, messagePromptCoordinator)
 {
 }
示例#18
0
        public void triggerWhenTouchedAndTimeElapsed()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            var singleActionResponse = new Dictionary<GameObject, ActionResponsePair[]> {
                { gameObject.MockObject, new [] { new ActionResponsePair("action", new[] { "response" }) } }
            };

            using (factory.Ordered()) {
                expectTouchWithinSprite(sprite.MockObject, true);
                expectTouchWithinSprite(sprite.MockObject, false);
            }

            bool hintTriggered = false;

            messagePromptCoordinator.hintWhenTouched(
                GameObject => {
                    hintTriggered = true;
                },
                sensor.MockObject,
                beforeEverything,
                singleActionResponse
            );

            messagePromptCoordinator.Update(beforeEverything);

            Assert.That(hintTriggered, Iz.False);

            messagePromptCoordinator.hintWhenTouched(
                GameObject => {
                    hintTriggered = true;
                },
                sensor.MockObject,
                afterMessageTime,
                singleActionResponse
            );

            messagePromptCoordinator.Update(afterMessageTime);

            Assert.That(hintTriggered, Iz.True);
        }
示例#19
0
        public void triggersFrontMostObjectWhenObjectsOverlap()
        {
            var messagePromptCoordinator = new MessagePromptCoordinator(prompt.MockObject, messageBox.MockObject);

            var first = factory.CreateMock<GameObject>();
            first.Expects.Any.Method(_ => _.GetComponent<Sprite>()).WillReturn(sprite.MockObject);
            var second = factory.CreateMock<GameObject>();
            second.Expects.Any.Method(_ => _.GetComponent<Sprite>()).WillReturn(sprite.MockObject);

            var back = new Vector3(0, 0, 0);
            var backTransform = new Transform() {
                position = back
            };
            var front = new Vector3(0, 0, -1);
            var frontTransform = new Transform() {
                position = front
            };

            // if you think this looks weird, it is. we can't mock bareback public fields, and Unity is full of them.
            first.MockObject.transform = backTransform;
            second.MockObject.transform = frontTransform;

            var frontObjectResponse = "front object response";
            var frontObjectAction = "action2";
            var actionResponses = new Dictionary<GameObject, ActionResponsePair[]> {
                { first.MockObject, new [] { new ActionResponsePair("action", new[] { "response" }) } },
                { second.MockObject, new [] { new ActionResponsePair(frontObjectAction, new[] { frontObjectResponse }) } }
            };

            using (factory.Ordered()) {
                expectTouchWithinSprite(sprite.MockObject, true);
                expectTouchWithinSprite(sprite.MockObject, false);
                expectTouchWithinSprite(sprite.MockObject, true);
            }

            messagePromptCoordinator.hintWhenTouched(
                GameObject => {
                },
                sensor.MockObject,
                beforeEverything,
                actionResponses
            );

            messagePromptCoordinator.Update(beforeEverything);

            GameObject triggeredObject = null;

            messageBox.Expects.One.Method(_ => _.setMessage("")).With(Is.EqualTo(frontObjectResponse));
            messageBox.Expects.One.Method(_ => _.hide());
            messageBox.Expects.One.Method(_ => _.show());

            prompt.Expects.One.Method(_ => _.setText("")).With(Is.EqualTo(frontObjectAction));
            prompt.Expects.One.Method(_ => _.hide());
            prompt.Expects.One.Method(_ => _.show());

            messagePromptCoordinator.hintWhenTouched(
                gameObject => {
                    triggeredObject = gameObject;
                },
                sensor.MockObject,
                afterMessageTime,
                actionResponses
            );

            messageBox.Expects.One.Method(_ => _.hide());
            messagePromptCoordinator.Update(afterMessageTime + MessagePromptCoordinator.promptTime + 0.1f);

            Assert.That(triggeredObject, Iz.EqualTo(second.MockObject));
        }