コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        //-----------------------------------------------------------------------------------------------
        // 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);
            });
        }