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(); }
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 (); }
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); }
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 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); }
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); }
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); }
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(); }
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); }
public void hintWhenTouched(Action <GameObject> onCompleted, MessagePromptCoordinator messagePromptCoordinator, TouchSensor touch) { messagePromptCoordinator.hintWhenTouched(onCompleted, touch, Time.time, interactions); }
public SceneManager(LoopTracker loopTracker, MessagePromptCoordinator messagePromptCoordinator) { this.loopTracker = loopTracker; this.messagePromptCoordinator = messagePromptCoordinator; }
public SceneManager(LoopTracker loopTracker, MessagePromptCoordinator messagePromptCoordinator) : this(null, loopTracker, messagePromptCoordinator) { }
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)); }
public void hintWhenTouched(Action<GameObject> onCompleted, MessagePromptCoordinator messagePromptCoordinator, TouchSensor touch) { messagePromptCoordinator.hintWhenTouched(onCompleted, touch, Time.time, interactions); }
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); }
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)); }