public void NextFrameTest(LoopingStyle looping, int loops, int currentFrame, int currentLoop, bool runningBackwards, int expectedFrame, int expectedLoop, bool expectedBackwards) { AGSAnimationConfiguration config = new AGSAnimationConfiguration { Looping = looping, Loops = loops, DelayBetweenFrames = 0 }; AGSAnimationState state = new AGSAnimationState { CurrentFrame = currentFrame, CurrentLoop = currentLoop, RunningBackwards = runningBackwards, TimeToNextFrame = currentFrame * 2 }; AGSAnimation animation = new AGSAnimation(config, state); for (int i = 0; i < 5; i++) { animation.Frames.Add(getFrame(i * 2)); } animation.NextFrame(); Assert.AreEqual(expectedFrame, state.CurrentFrame); Assert.AreEqual(expectedLoop, state.CurrentLoop); Assert.AreEqual(expectedBackwards, state.RunningBackwards); Assert.AreEqual(expectedFrame * 2, state.TimeToNextFrame); }
public void SetupAnimationTest(LoopingStyle looping, int expectedFrame, bool expectedBackwards) { AGSAnimationConfiguration config = new AGSAnimationConfiguration { Looping = looping, DelayBetweenFrames = 0 }; AGSAnimationState state = new AGSAnimationState(); AGSAnimation animation = new AGSAnimation(config, state); for (int i = 0; i < 5; i++) { animation.Frames.Add(getFrame(i * 2)); } animation.Setup(); Assert.AreEqual(expectedFrame, state.CurrentFrame); Assert.AreEqual(0, state.CurrentLoop); Assert.AreEqual(expectedBackwards, state.RunningBackwards); Assert.AreEqual(expectedFrame * 2, state.TimeToNextFrame); }
public static IEnumerable <IObject> GetImplementors(Mocks mocks, Mock <IGameState> stateMock, IGameState state = null) { if (state == null && stateMock != null) { state = stateMock.Object; } mocks.Game().Setup(g => g.State).Returns(state); stateMock?.Setup(s => s.UI).Returns(new AGSConcurrentHashSet <IObject>()); Mock <IInput> input = new Mock <IInput>(); Resolver resolver = GetResolver(); input.Setup(i => i.KeyUp).Returns(new Mock <IEvent <KeyboardEventArgs> >().Object); input.Setup(i => i.KeyDown).Returns(new Mock <IEvent <KeyboardEventArgs> >().Object); input.Setup(i => i.MouseDown).Returns(new Mock <IEvent <MouseButtonEventArgs> >().Object); if (stateMock != null) { stateMock.Setup(s => s.Cutscene).Returns(mocks.Cutscene().Object); } Mock <IUIEvents> uiEvents = new Mock <IUIEvents>(); Mock <IEvent <MouseButtonEventArgs> > buttonEvent = new Mock <IEvent <MouseButtonEventArgs> >(); Mock <IEvent <MouseClickEventArgs> > buttonClickEvent = new Mock <IEvent <MouseClickEventArgs> >(); Mock <IEvent <MousePositionEventArgs> > mouseEvent = new Mock <IEvent <MousePositionEventArgs> >(); uiEvents.Setup(u => u.MouseClicked).Returns(buttonClickEvent.Object); uiEvents.Setup(u => u.MouseDown).Returns(buttonEvent.Object); uiEvents.Setup(u => u.MouseUp).Returns(buttonEvent.Object); uiEvents.Setup(u => u.LostFocus).Returns(buttonEvent.Object); uiEvents.Setup(u => u.MouseEnter).Returns(mouseEvent.Object); uiEvents.Setup(u => u.MouseLeave).Returns(mouseEvent.Object); uiEvents.Setup(u => u.MouseMove).Returns(mouseEvent.Object); Mock <IGraphicsFactory> graphicsFactory = new Mock <IGraphicsFactory>(); Func <ISprite> getSprite = () => new AGSSprite(resolver, mocks.MaskLoader().Object); graphicsFactory.Setup(g => g.GetSprite()).Returns(() => getSprite()); AGSAnimationComponent animationComponent = new AGSAnimationComponent(); Mock <IImage> image = new Mock <IImage>(); Mock <IButtonComponent> buttonComponent = new Mock <IButtonComponent>(); var animation = new AGSAnimation(new AGSAnimationConfiguration { Loops = 1 }, new AGSAnimationState(), 1); animation.Frames.Add(new AGSAnimationFrame(getSprite()) { Delay = -1 }); buttonComponent.Setup(b => b.HoverAnimation).Returns(new ButtonAnimation(animation)); buttonComponent.Setup(b => b.IdleAnimation).Returns(new ButtonAnimation(animation)); buttonComponent.Setup(b => b.PushedAnimation).Returns(new ButtonAnimation(animation)); Mock <IALAudioSystem> audioSystem = new Mock <IALAudioSystem>(); Mock <IRuntimeSettings> settings = mocks.Settings(); Mock <IRenderThread> renderThread = new Mock <IRenderThread>(); Mock <IUpdateThread> updateThread = new Mock <IUpdateThread>(); renderThread.Setup(u => u.RunBlocking(It.IsAny <Action>())).Callback <Action>(a => a()); updateThread.Setup(u => u.RunBlocking(It.IsAny <Action>())).Callback <Action>(a => a()); var walkComponent = new Mock <IWalkComponent>(); resolver.Builder.RegisterInstance(input.Object); resolver.Builder.RegisterInstance(state); resolver.Builder.RegisterInstance(uiEvents.Object); resolver.Builder.RegisterInstance(animationComponent).As <IAnimationComponent>(); resolver.Builder.RegisterInstance(buttonComponent.Object); resolver.Builder.RegisterInstance(audioSystem.Object); resolver.Builder.RegisterInstance(new Mock <IRenderMessagePump>().Object); resolver.Builder.RegisterInstance(new Mock <IUpdateMessagePump>().Object); resolver.Builder.RegisterInstance(renderThread.Object); resolver.Builder.RegisterInstance(updateThread.Object); resolver.Builder.RegisterInstance(walkComponent.Object); resolver.Builder.RegisterInstance(new Mock <ITexture>().Object); resolver.Builder.RegisterInstance(mocks.MaskLoader().Object).As <IMaskLoader>(); resolver.Builder.RegisterInstance(settings.Object).As <IGameSettings>(); resolver.Builder.RegisterInstance(settings.Object).As <IRuntimeSettings>(); resolver.Builder.RegisterInstance(mocks.Game().Object); resolver.Build(); Func <IObject> baseObj = () => new AGSObject("Test" + Guid.NewGuid(), resolver); mocks.Game().Setup(g => g.Events).Returns(resolver.Container.Resolve <IGameEvents>()); mocks.Game().Setup(g => g.Factory).Returns(resolver.Container.Resolve <IGameFactory>()); Mock <IOutfit> outfit = new Mock <IOutfit>(); Func <IPanel> basePanel = () => new AGSPanel("Panel" + Guid.NewGuid(), resolver) { Image = image.Object }; Func <ILabel> baseLabel = () => new AGSLabel("Label" + Guid.NewGuid(), resolver) { LabelRenderSize = new SizeF(100f, 50f) }; var button = new AGSButton("Button" + Guid.NewGuid(), resolver) { LabelRenderSize = new SizeF(100f, 50f) }; List <IObject> implmentors = new List <IObject> { baseObj().Hotspot("Object"), new AGSCharacter("Character" + Guid.NewGuid(), resolver, outfit.Object).Hotspot("Character"), basePanel().Hotspot("Panel"), baseLabel().Hotspot("Label"), button.Hotspot("Button"), new AGSInventoryWindow("Inventory" + Guid.NewGuid(), resolver, image.Object).Hotspot("Inventory"), (new AGSSlider("Slider" + Guid.NewGuid(), resolver) { Image = image.Object }).Hotspot("Slider"), new AGSCheckBox("Checkbox" + Guid.NewGuid(), resolver), new AGSTextbox("Textbox" + Guid.NewGuid(), resolver), new AGSComboBox("Combobox" + Guid.NewGuid(), resolver) }; return(implmentors); }