Ejemplo n.º 1
0
        public void CD_SharedCornerDoesntCollide()
        {
            var a = RectangleX.FromLTRB(0, 0, 10, 10).ToPolygon();
            var b = RectangleX.FromLTRB(10, 10, 20, 20).ToPolygon();

            collider.DoPolygonsIntersect(a, b).Should().BeFalse();
        }
Ejemplo n.º 2
0
        public void CD_RectsDontCollide()
        {
            var a = RectangleX.FromLTRB(0, 0, 10, 10).ToPolygon();
            var b = RectangleX.FromLTRB(8, 11, 20, 20).ToPolygon();

            collider.DoPolygonsIntersect(a, b).Should().BeFalse();
        }
Ejemplo n.º 3
0
        public void CD_RectsCollide()
        {
            var a = RectangleX.FromLTRB(0, 0, 10, 10).ToPolygon();
            var b = RectangleX.FromLTRB(9, 9, 20, 20).ToPolygon();

            collider.DoPolygonsIntersect(a, b).Should().BeTrue();
        }
Ejemplo n.º 4
0
        public void Poly_Rotate()
        {
            var a = RectangleX.FromLTRB(0, 0, 10, 5).ToPolygon();
            var b = a.RotateDegrees(90, new Vector2(10, 5));

            b.Count.Should().Be(4);

            b.Any(x => Vector2X.Equals(x, new Vector2(5, 5), 1e-5f)).Should().BeTrue();
            b.Any(x => Vector2X.Equals(x, new Vector2(10, 5), 1e-5f)).Should().BeTrue();
            b.Any(x => Vector2X.Equals(x, new Vector2(10, 15), 1e-5f)).Should().BeTrue();
            b.Any(x => Vector2X.Equals(x, new Vector2(5, 15), 1e-5f)).Should().BeTrue();
        }
Ejemplo n.º 5
0
        private void DrawImageFrame(BorderStyle border, Rectangle borderRect, Rectangle?maybeSrcRect)
        {
            var image = imageProvider.Load <Texture2D>(border.Image.File);

            var       slice     = border.ImageSlice;
            Rectangle outerRect = maybeSrcRect ?? new Rectangle(0, 0, image.Width, image.Height);
            Rectangle innerRect = RectangleX.FromLTRB(
                outerRect.Left + slice.Left,
                outerRect.Top + slice.Top,
                outerRect.Right - slice.Right,
                outerRect.Bottom - slice.Bottom);

            DrawFrame(SpriteBatch, borderRect, image, innerRect, outerRect, border.ImageScale);
        }
Ejemplo n.º 6
0
        private void ColorOrcs()
        {
            if (Story.DefeatedOrcs == false)
            {
                Rectangle area = RectangleX.FromLTRB(66, 0, TheMap.Width, 68);

                foreach (var guard in TheMap.Guards)
                {
                    if (area.Contains(guard.Location))
                    {
                        guard.Color = XleColor.Blue;
                    }
                }
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Creates a new instance of ShootTraps
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        public ShootTraps(int width, int height, IContentProvider content)
        {
            if (width <= 0 || height <= 0)
            {
                throw new ArgumentOutOfRangeException();
            }

            gunImage = content.Load <Texture2D>("barrel");
            gunBolt  = content.Load <Texture2D>("barrel-hex");

            mGameObjects = new List <GameObject>();
            mRandom      = new Random();

            mGroundY = height - 10;

            // choose a y velocity (pixels / second) that will get the
            // traps nearly to the top of the screen
            mTrapVYScale = (int)Math.Sqrt(2 * GameObject.Gravity * (height - 10));

            double timeInAir = mTrapVYScale * 2 / GameObject.Gravity;

            // choose a minimum x velocity so that the trap will make it at least 1/3
            // the way across the field.
            mTrapMaxVX = mTrapVYScale / 2;
            mTrapMinVX = (int)(width / (3.0 * timeInAir));

            gunPosition = new Vector2(width / 2, mGroundY);

            mLaunchX = new int[4];

            // area of screen where traps are launched from.
            int launchScale = width / 2 - 50;

            mLaunchX[0] = width / 2 - launchScale;
            mLaunchX[1] = width / 2 - launchScale + 40;

            mLaunchX[2] = width - mLaunchX[1];
            mLaunchX[3] = width - mLaunchX[0];

            GameObject.FieldArea = RectangleX.FromLTRB(-10, -20, width + 10, (int)gunPosition.Y);

            Bullet.Image = content.Load <Texture2D>("bullet");
            Trap.Image   = content.Load <Texture2D>("enemy");
            Particle.Images.Add(content.Load <Texture2D>("splatter-1"));
            Particle.Images.Add(content.Load <Texture2D>("splatter-2"));
            Particle.Images.Add(content.Load <Texture2D>("splatter-3"));
            Particle.Images.Add(content.Load <Texture2D>("splatter-4"));
        }
Ejemplo n.º 8
0
        public void CD_ConcavePolygonsDontCollide()
        {
            var a = new Polygon
            {
                { 0, 0 },
                { 5, 0 },
                { 5, 4 },
                { 4, 4 },
                { 4, 1 },
                { 1, 1 },
                { 1, 4 },
                { 0, 4 },
            };

            var b = RectangleX.FromLTRB(2, 2, 3, 3).ToPolygon();

            collider.DoPolygonsIntersect(a, b).Should().BeFalse();
        }
Ejemplo n.º 9
0
        private void DrawClipped(Texture2D image, Point dest, Rectangle clipRect, Rectangle?maybeSrcRect)
        {
            Rectangle srcRect  = maybeSrcRect ?? new Rectangle(0, 0, image.Width, image.Height);
            Rectangle destRect = new Rectangle(dest.X, dest.Y, srcRect.Width, srcRect.Height);

            if (clipRect.Contains(destRect) == false)
            {
                int lc = 0, tc = 0, rc = 0, bc = 0;

                if (destRect.Left < clipRect.Left)
                {
                    lc = clipRect.Left - destRect.Left;
                }
                if (destRect.Top < clipRect.Top)
                {
                    tc = clipRect.Top - destRect.Top;
                }
                if (destRect.Right > clipRect.Right)
                {
                    rc = clipRect.Right - destRect.Right;
                }
                if (destRect.Bottom > clipRect.Bottom)
                {
                    bc = clipRect.Bottom - destRect.Bottom;
                }

                destRect = RectangleX.FromLTRB(destRect.Left + lc, destRect.Top + tc, destRect.Right + rc, destRect.Bottom + bc);
                srcRect  = RectangleX.FromLTRB(srcRect.Left + lc, srcRect.Top + tc, srcRect.Right + rc, srcRect.Bottom + bc);

                if (destRect.Width == 0 || destRect.Height == 0)
                {
                    return;
                }
            }

            SpriteBatch.Draw(image, destRect, srcRect, Color.White);
        }
Ejemplo n.º 10
0
        public void Draw(SpriteBatch spriteBatch)
        {
            if (GameState == null)
            {
                return;
            }

            DrawTextAreaBackColor(spriteBatch, GameState.Map.ColorScheme);

            Player player = GameState.Player;
            XleMap map    = GameState.Map;

            int   i          = 0;
            Color boxColor   = map.ColorScheme.FrameColor;
            Color innerColor = map.ColorScheme.FrameHighlightColor;
            int   horizLine  = 18 * 16;
            int   vertLine   = (38 - map.ColorScheme.MapAreaWidth) * 16;

            Screen.FontColor = map.ColorScheme.TextColor;
            Color menuColor = map.ColorScheme.TextColor;

            if (commands.IsLeftMenuActive)
            {
                menuColor = XleColor.Yellow;
            }

            DrawFrame(spriteBatch, boxColor);

            DrawFrameLine(spriteBatch, vertLine, 0, 0, horizLine + 12, boxColor);
            DrawFrameLine(spriteBatch, 0, horizLine, 1, GameAreaSize.Width, boxColor);

            DrawFrameHighlight(spriteBatch, innerColor);

            DrawInnerFrameHighlight(spriteBatch, vertLine, 0, 0, horizLine + 12, innerColor);
            DrawInnerFrameHighlight(spriteBatch, 0, horizLine, 1, GameAreaSize.Width, innerColor);

            Rectangle mapRect = RectangleX.FromLTRB
                                    (vertLine + 16, 16, GameAreaSize.Width - 16, horizLine);

            MapRenderer.Draw(spriteBatch, player.Location, player.FaceDirection, mapRect);

            i = 0;
            int cursorPos = 0;

            foreach (var cmd in commands.Items.ToList())
            {
                WriteText(spriteBatch, 48, 16 * (i + 1), cmd.Name, menuColor);

                if (cmd == commands.CurrentCommand)
                {
                    cursorPos = i;
                }

                i++;
            }

            WriteText(spriteBatch, 32, 16 * (cursorPos + 1), "`", menuColor);

            Color hpColor = statsDisplay.HPColor;

            WriteText(spriteBatch, 48, 16 * 15, "H.P. " + statsDisplay.HP, hpColor);
            WriteText(spriteBatch, 48, 16 * 16, "Food " + statsDisplay.Food, hpColor);
            WriteText(spriteBatch, 48, 16 * 17, "Gold " + statsDisplay.Gold, hpColor);

            TextAreaRenderer.Draw(spriteBatch, TextArea);

            if (map.AutoDrawPlayer)
            {
                DrawRafts(spriteBatch, mapRect);

                if (player.IsOnRaft == false)
                {
                    DrawCharacter(spriteBatch, playerAnimator.Animating, playerAnimator.AnimFrame, vertLine);
                }
            }

            if (Screen.PromptToContinue)
            {
                FillRect(spriteBatch, 192, 384, 17 * 16, 16, XleColor.Black);
                WriteText(spriteBatch, 208, 384, "(Press to Cont)", XleColor.Yellow);
            }
        }
Ejemplo n.º 11
0
        public void DrawFrame(SpriteBatch spriteBatch, Rectangle destOuterRect, Texture2D frameTexture,
                              Rectangle frameSourceInner, Rectangle frameSourceOuter,
                              ImageScale borderScale)
        {
            this.SpriteBatch = spriteBatch;

            Rectangle destInnerRect = destOuterRect;
            Size      delta         = new Size(frameSourceInner.X - frameSourceOuter.X, frameSourceInner.Y - frameSourceOuter.Y);

            destInnerRect.X      += delta.Width;
            destInnerRect.Y      += delta.Height;
            destInnerRect.Width  -= (delta.Width) * 2;
            destInnerRect.Height -= (delta.Height) * 2;

            Rectangle src, dest;
            Rectangle outer = frameSourceOuter, inner = frameSourceInner;

            // top left
            src  = RectangleX.FromLTRB(outer.Left, outer.Top, inner.Left, inner.Top);
            dest = RectangleX.FromLTRB(destOuterRect.Left, destOuterRect.Top, destInnerRect.Left, destInnerRect.Top);

            SpriteBatch.Draw(frameTexture, dest, src, Color.White);

            // top
            src  = RectangleX.FromLTRB(inner.Left, outer.Top, inner.Right, inner.Top);
            dest = RectangleX.FromLTRB(destInnerRect.Left, destOuterRect.Top, destInnerRect.Right, destInnerRect.Top);

            ScaleSurface(frameTexture, src, dest, borderScale);

            // top right
            src  = RectangleX.FromLTRB(inner.Right, outer.Top, outer.Right, inner.Top);
            dest = RectangleX.FromLTRB(destInnerRect.Right, destOuterRect.Top, destOuterRect.Right, destInnerRect.Top);

            SpriteBatch.Draw(frameTexture, dest, src, Color.White);

            // left
            src  = RectangleX.FromLTRB(outer.Left, inner.Top, inner.Left, inner.Bottom);
            dest = RectangleX.FromLTRB(destOuterRect.Left, destInnerRect.Top, destInnerRect.Left, destInnerRect.Bottom);

            ScaleSurface(frameTexture, src, dest, borderScale);

            // right
            src  = RectangleX.FromLTRB(inner.Right, inner.Top, outer.Right, inner.Bottom);
            dest = RectangleX.FromLTRB(destInnerRect.Right, destInnerRect.Top, destOuterRect.Right, destInnerRect.Bottom);

            ScaleSurface(frameTexture, src, dest, borderScale);

            // bottom left
            src  = RectangleX.FromLTRB(outer.Left, inner.Bottom, inner.Left, outer.Bottom);
            dest = RectangleX.FromLTRB(destOuterRect.Left, destInnerRect.Bottom, destInnerRect.Left, destOuterRect.Bottom);

            SpriteBatch.Draw(frameTexture, dest, src, Color.White);

            // bottom
            src  = RectangleX.FromLTRB(inner.Left, inner.Bottom, inner.Right, outer.Bottom);
            dest = RectangleX.FromLTRB(destInnerRect.Left, destInnerRect.Bottom, destInnerRect.Right, destOuterRect.Bottom);

            ScaleSurface(frameTexture, src, dest, borderScale);

            // bottom right
            src  = RectangleX.FromLTRB(inner.Right, inner.Bottom, outer.Right, outer.Bottom);
            dest = RectangleX.FromLTRB(destInnerRect.Right, destInnerRect.Bottom, destOuterRect.Right, destOuterRect.Bottom);

            SpriteBatch.Draw(frameTexture, dest, src, Color.White);
        }