public bool Intersects(Rectangle theRectangle) { BaseObject o = new BaseObject(theRectangle, 0.0f); o.CalculateCorners(); return(Intersects(o)); }
void clampCameraToMap() { cameraView.Width = (int)(worldViewport.Width / camera.Zoom); cameraView.Height = (int)(worldViewport.Height / camera.Zoom); cameraView.CenterPoint = camera.Pos; cameraView.Rotation = -camera.Rotation; cameraView.CalculateCorners(); // upper left corner if (cameraView.UpperLeftCorner.X < 0) { cameraView.X += (int)Math.Round(-cameraView.UpperLeftCorner.X * (float)Math.Cos(0)); cameraView.CalculateCorners(); } if (cameraView.UpperLeftCorner.Y < 0) { cameraView.Y += (int)Math.Round(-cameraView.UpperLeftCorner.Y * (float)Math.Sin(MathHelper.PiOver2)); cameraView.CalculateCorners(); } if (cameraView.UpperLeftCorner.X > actualMapWidth) { cameraView.X += (int)Math.Round((cameraView.UpperLeftCorner.X - actualMapWidth) * (float)Math.Cos(Math.PI)); cameraView.CalculateCorners(); } if (cameraView.UpperLeftCorner.Y > actualMapHeight) { cameraView.Y += (int)Math.Round((cameraView.UpperLeftCorner.Y - actualMapHeight) * (float)Math.Sin(-MathHelper.PiOver2)); cameraView.CalculateCorners(); } // lower left corner if (cameraView.LowerLeftCorner.X < 0) { cameraView.X += (int)Math.Round(-cameraView.LowerLeftCorner.X * (float)Math.Cos(0)); cameraView.CalculateCorners(); } if (cameraView.LowerLeftCorner.Y < 0) { cameraView.Y += (int)Math.Round(-cameraView.LowerLeftCorner.Y * (float)Math.Sin(MathHelper.PiOver2)); cameraView.CalculateCorners(); } if (cameraView.LowerLeftCorner.X > actualMapWidth) { cameraView.X += (int)Math.Round((cameraView.LowerLeftCorner.X - actualMapWidth) * (float)Math.Cos(Math.PI)); cameraView.CalculateCorners(); } if (cameraView.LowerLeftCorner.Y > actualMapHeight) { cameraView.Y += (int)Math.Round((cameraView.LowerLeftCorner.Y - actualMapHeight) * (float)Math.Sin(-MathHelper.PiOver2)); cameraView.CalculateCorners(); } // upper right corner if (cameraView.UpperRightCorner.X < 0) { cameraView.X += (int)Math.Round(-cameraView.UpperRightCorner.X * (float)Math.Cos(0)); cameraView.CalculateCorners(); } if (cameraView.UpperRightCorner.Y < 0) { cameraView.Y += (int)Math.Round(-cameraView.UpperRightCorner.Y * (float)Math.Sin(MathHelper.PiOver2)); cameraView.CalculateCorners(); } if (cameraView.UpperRightCorner.X > actualMapWidth) { cameraView.X += (int)Math.Round((cameraView.UpperRightCorner.X - actualMapWidth) * (float)Math.Cos(Math.PI)); cameraView.CalculateCorners(); } if (cameraView.UpperRightCorner.Y > actualMapHeight) { cameraView.Y += (int)Math.Round((cameraView.UpperRightCorner.Y - actualMapHeight) * (float)Math.Sin(-MathHelper.PiOver2)); cameraView.CalculateCorners(); } // lower right corner if (cameraView.LowerRightCorner.X < 0) { cameraView.X += (int)Math.Round(-cameraView.LowerRightCorner.X * (float)Math.Cos(0)); cameraView.CalculateCorners(); } if (cameraView.LowerRightCorner.Y < 0) { cameraView.Y += (int)Math.Round(-cameraView.LowerRightCorner.Y * (float)Math.Sin(MathHelper.PiOver2)); cameraView.CalculateCorners(); } if (cameraView.LowerRightCorner.X > actualMapWidth) { cameraView.X += (int)Math.Round((cameraView.LowerRightCorner.X - actualMapWidth) * (float)Math.Cos(Math.PI)); cameraView.CalculateCorners(); } if (cameraView.LowerRightCorner.Y > actualMapHeight) { cameraView.Y += (int)Math.Round((cameraView.LowerRightCorner.Y - actualMapHeight) * (float)Math.Sin(-MathHelper.PiOver2)); cameraView.CalculateCorners(); } camera.Pos = cameraView.CenterPoint; if (cameraView.Width > map.Width * map.TileSize) { camera.Pos = new Vector2(map.Width / 2 * map.TileSize, camera.Pos.Y); } if (cameraView.Height > map.Height * map.TileSize) { camera.Pos = new Vector2(map.Height / 2 * map.TileSize, camera.Pos.X); } /*float cameraLeftBound = camera.Pos.X + (GraphicsDevice.Viewport.Width / 2 * (float)Math.Cos((float)Math.PI + camera.Rotation)); * float cameraRightBound = camera.Pos.X + (GraphicsDevice.Viewport.Width / 2 * (float)Math.Cos(camera.Rotation)); * float cameraTopBound = camera.Pos.Y + (GraphicsDevice.Viewport.Height / 2 * (float)Math.Sin(-MathHelper.PiOver2 + camera.Rotation)); * float cameraBottomBound = camera.Pos.Y + (GraphicsDevice.Viewport.Height / 2 * (float)Math.Sin(MathHelper.PiOver2 + camera.Rotation));*/ /*if (camera.Pos.X < GraphicsDevice.Viewport.Width / camera.Zoom / 2) * camera.Pos = new Vector2(GraphicsDevice.Viewport.Width / camera.Zoom / 2, camera.Pos.Y); * if (camera.Pos.X > map.Width * Map.TILESIZE - GraphicsDevice.Viewport.Width / camera.Zoom / 2) * camera.Pos = new Vector2(map.Width * Map.TILESIZE - GraphicsDevice.Viewport.Width / camera.Zoom / 2, camera.Pos.Y); * if (camera.Pos.Y < GraphicsDevice.Viewport.Height / camera.Zoom / 2) * camera.Pos = new Vector2(camera.Pos.X, GraphicsDevice.Viewport.Height / camera.Zoom / 2); * if (camera.Pos.Y > map.Height * Map.TILESIZE - GraphicsDevice.Viewport.Height / camera.Zoom / 2) * camera.Pos = new Vector2(camera.Pos.X, map.Height * Map.TILESIZE - GraphicsDevice.Viewport.Height / camera.Zoom / 2);*/ }
public bool Intersects(Rectangle theRectangle) { BaseObject o = new BaseObject(theRectangle, 0.0f); o.CalculateCorners(); return Intersects(o); }