public void StackPanelCenteredOnAGrid_Works() { // < Grid Style = "BaseScreenStyle" > //< StackPanel > // < Image // Size = ".8,.18" // Content = "Images/LogoTile" /> var container = new VarmintWidgetGrid() { Size = new Vector2(10, 20), HorizontalContentAlignment = HorizontalContentAlignment.Center }; var panel = new VarmintWidgetStackPanel() { }; var panelChild1 = new VarmintWidgetGrid() { Size = new Vector2(6, 1) }; panel.AddChild(panelChild1); container.AddChild(panel); container.Prepare(null); Assert.AreEqual(new Vector2(2, 0), panel.Offset); Assert.AreEqual(new Vector2(0, 0), panelChild1.Offset); }
public void StretchParamter_WorksWithGridlikeItems() { var container = new TestWidget() { Size = new Vector2(10, 20) }; var grid = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; container.AddChild(grid); // starting out with no stretch container.Prepare(null); Assert.AreEqual(new Vector2(1, 1), grid.Size); // Horizontal only grid.Stretch = new VarmintWidget.StretchParameter("1"); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(10, 1), grid.Size); Assert.AreEqual(new Vector2(0, 0), grid.Offset); // Vertical only grid.Stretch = new VarmintWidget.StretchParameter(",1"); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 20), grid.Size); Assert.AreEqual(new Vector2(0, 0), grid.Offset); // With Margins grid.Margin = new VarmintWidget.WidgetMargin("2,2"); grid.Stretch = new VarmintWidget.StretchParameter(); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid.Size); Assert.AreEqual(new Vector2(2, 2), grid.Offset); grid.Stretch = new VarmintWidget.StretchParameter("1,1");; container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(8, 18), grid.Size); Assert.AreEqual(new Vector2(2, 2), grid.Offset); // Two children, both should stretch to the same dimensions var grid2 = new VarmintWidgetGrid() { Size = new Vector2(2, 2) }; grid2.Stretch = new VarmintWidget.StretchParameter("1,1");; container.AddChild(grid2); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(8, 18), grid.Size); Assert.AreEqual(new Vector2(2, 2), grid.Offset); Assert.AreEqual(new Vector2(10, 20), grid2.Size); Assert.AreEqual(new Vector2(0, 0), grid2.Offset); }
public void StretchParameter_Works_WhenPanelIsStretchedToParent() { var container = new VarmintWidgetGrid() { Size = new Vector2(30, 20) }; var panel = new VarmintWidgetStackPanel() { Stretch = new VarmintWidget.StretchParameter("1,1") }; var panelChild1 = new VarmintWidgetGrid() { Size = new Vector2(1, 1), Stretch = new VarmintWidget.StretchParameter("1,1") }; panel.AddChild(panelChild1); container.AddChild(panel); container.Prepare(null); Assert.AreEqual(new Vector2(30, 20), panel.Size); Assert.AreEqual(new Vector2(30, 20), panelChild1.Size); }
public void StretchParameter_ExpandsChildren_Vertical() { var container = new VarmintWidgetStackPanel() { Size = new Vector2(10, 100) }; var grid1 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; var grid2 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; var grid3 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; var grid4 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; container.AddChild(grid1); container.AddChild(grid2); container.AddChild(grid3); container.AddChild(grid4); container.Prepare(null); // starting out with no stretch container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(1, 1), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(0, 1), grid2.Offset); Assert.AreEqual(new Vector2(0, 2), grid3.Offset); Assert.AreEqual(new Vector2(0, 3), grid4.Offset); // Horizontal only grid2.Stretch = new VarmintWidget.StretchParameter("1"); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(10, 1), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(0, 1), grid2.Offset); Assert.AreEqual(new Vector2(0, 2), grid3.Offset); Assert.AreEqual(new Vector2(0, 3), grid4.Offset); // Vertical only grid2.Stretch = new VarmintWidget.StretchParameter(",1"); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(1, 97), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(0, 1), grid2.Offset); Assert.AreEqual(new Vector2(0, 98), grid3.Offset); Assert.AreEqual(new Vector2(0, 99), grid4.Offset); // With Margins grid2.Margin = new VarmintWidget.WidgetMargin("2,2"); grid2.Stretch = new VarmintWidget.StretchParameter(); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(1, 1), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(2, 3), grid2.Offset); Assert.AreEqual(new Vector2(0, 4), grid3.Offset); Assert.AreEqual(new Vector2(0, 5), grid4.Offset); // Two children, Stretch both proportionally grid2.Stretch = new VarmintWidget.StretchParameter("1,1");; grid4.Stretch = new VarmintWidget.StretchParameter("3,3");; container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(8, 24), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(10, 72), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(2, 3), grid2.Offset); Assert.AreEqual(new Vector2(0, 27), grid3.Offset); Assert.AreEqual(new Vector2(0, 28), grid4.Offset); }
public void StretchParameter_ExpandsChildren_Horizontal() { var container = new VarmintWidgetStackPanel() { Size = new Vector2(100, 10) }; container.Orientation = Orientation.Horizontal; var grid1 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; var grid2 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; var grid3 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; var grid4 = new VarmintWidgetGrid() { Size = new Vector2(1, 1) }; container.AddChild(grid1); container.AddChild(grid2); container.AddChild(grid3); container.AddChild(grid4); container.Prepare(null); // starting out with no stretch container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(1, 1), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(1, 0), grid2.Offset); Assert.AreEqual(new Vector2(2, 0), grid3.Offset); Assert.AreEqual(new Vector2(3, 0), grid4.Offset); // Veritcal only grid2.Stretch = new VarmintWidget.StretchParameter(",1"); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(1, 10), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(1, 0), grid2.Offset); Assert.AreEqual(new Vector2(2, 0), grid3.Offset); Assert.AreEqual(new Vector2(3, 0), grid4.Offset); // Horizontal only grid2.Stretch = new VarmintWidget.StretchParameter("1"); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(97, 1), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(1, 0), grid2.Offset); Assert.AreEqual(new Vector2(98, 0), grid3.Offset); Assert.AreEqual(new Vector2(99, 0), grid4.Offset); // With Margins grid2.Margin = new VarmintWidget.WidgetMargin("2,2"); grid2.Stretch = new VarmintWidget.StretchParameter(); container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(1, 1), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(1, 1), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(3, 2), grid2.Offset); Assert.AreEqual(new Vector2(4, 0), grid3.Offset); Assert.AreEqual(new Vector2(5, 0), grid4.Offset); // Two children, Stretch both proportionally grid2.Stretch = new VarmintWidget.StretchParameter("1,1");; grid4.Stretch = new VarmintWidget.StretchParameter("3,3");; container.UpdateChildFormatting(); Assert.AreEqual(new Vector2(1, 1), grid1.Size); Assert.AreEqual(new Vector2(24, 8), grid2.Size); Assert.AreEqual(new Vector2(1, 1), grid3.Size); Assert.AreEqual(new Vector2(72, 10), grid4.Size); Assert.AreEqual(new Vector2(0, 0), grid1.Offset); Assert.AreEqual(new Vector2(3, 2), grid2.Offset); Assert.AreEqual(new Vector2(27, 0), grid3.Offset); Assert.AreEqual(new Vector2(28, 0), grid4.Offset); }
//----------------------------------------------------------------------------------------------- // StartGame - This creates a new game state and the UI around it. The code inside this // method could be its own class if you want. It's a matter of style/preference. //----------------------------------------------------------------------------------------------- public void StartGame() { _controller.SetScreen(_controller.GetScreen("GameScreen", this)); var holder = _controller.GetVisibleWidgetByName("GameContainer"); var gameWindow = new VarmintWidgetGrid(); gameWindow.Renderer = _controller; gameWindow.Size = holder.Size; holder.AddChild(gameWindow); _currentGame = new GameState(); _controller.SoundEffectVolume = 1; // Hook up events on the game for playing sounds, showing UI, etc. _currentGame.OnpassBunny += () => { _controller.PlaySound("Sounds/Cowbell"); }; _currentGame.OnFInishJump += () => { _controller.PlaySound("Sounds/Thump"); }; _currentGame.OnStartJump += () => { _controller.PlaySound("Sounds/Jump"); }; // Hook up the tap event on the game window for jumping gameWindow.OnTap += (widget, location) => { _currentGame.Jump(); return(VarmintWidget.EventHandledState.Handled); }; // Set up a render method to visualize the objects in the game. This // is essentially the code to draw a frame gameWindow.SetCustomRender((GameTime gameTime, VarmintWidget widget) => { // draw the sky _controller.DrawBox(widget.AbsoluteOffset, widget.Size, new Color(Color.SkyBlue, widget.AbsoluteOpacity)); // Helper to easily draw a scolling object Action <string, float> drawScrollingThing = (glyphName, relativeSize) => { float offset = ((_currentGame.MonsterPosition.X / relativeSize) % 1.0f) * widget.Size.X; _controller.DrawGlyph(glyphName, widget.AbsoluteOffset - new Vector2(offset, 0), widget.Size, widget.RenderGraphicColor); _controller.DrawGlyph(glyphName, widget.AbsoluteOffset + new Vector2(widget.Size.X - offset, 0), widget.Size, widget.RenderGraphicColor); }; // draw the far scrolling background drawScrollingThing("Images/Mountains", 30); // draw the near scrolling background drawScrollingThing("Images/Trees", 3); // draw the bunny var monsterDelta = .1f; var bunnyDelta = _currentGame.BunnyPosition.X + monsterDelta - _currentGame.MonsterPosition.X; var bunnyDrawPosition = widget.AbsoluteOffset; bunnyDrawPosition.X += bunnyDelta * widget.Size.X; bunnyDrawPosition.Y = widget.Size.Y * .82f; _controller.DrawSprite("Images/Bunny", (_controller.CurrentFrameNumber / 10) % 2, bunnyDrawPosition, new Vector2(.1f), widget.RenderGraphicColor); // Draw the monster var monsterDrawPosition = widget.AbsoluteOffset; monsterDrawPosition.X += monsterDelta * widget.Size.X; monsterDrawPosition.Y = widget.Size.Y * .65f + _currentGame.MonsterPosition.Y * widget.Size.Y; _controller.DrawSprite("Images/Monster", (_controller.CurrentFrameNumber / 10) % 4, monsterDrawPosition, new Vector2(.2f), widget.RenderGraphicColor); // Draw the ground drawScrollingThing("Images/Ground", 1); }); }