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(); }
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(); }
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(); }
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(); }
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); }
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; } } } }
/// <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")); }
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(); }
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); }
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); } }
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); }