Exemplo n.º 1
0
 public static void Intersect(ref Rectanglef rect1, ref Rectanglef rect2, out Rectanglef result)
 {
     if (rect1.Contains(rect2))
         result = new Rectanglef(rect2);
     else if (rect2.Contains(rect1))
         result = new Rectanglef(rect1);
     else if (!rect1.Intersects(rect2))
         result = new Rectanglef();
     else
     {
         result = new Rectanglef(
             Math.Max(rect1.X, rect2.X),
             Math.Max(rect1.Y, rect2.Y),
             Math.Min(rect1.Right, rect2.Right) - Math.Max(rect1.Left, rect2.Left),
             Math.Min(rect1.Bottom, rect2.Bottom) - Math.Max(rect1.Top, rect2.Top));
     }
 }
Exemplo n.º 2
0
 public static Rectanglef Intersect(Rectanglef rect1, Rectanglef rect2)
 {
     Rectanglef result;
     if (rect1.Contains(rect2))
         result = new Rectanglef(rect2);
     else if (rect2.Contains(rect1))
         result = new Rectanglef(rect1);
     else if (!rect1.Intersects(rect2))
         result = new Rectanglef();
     else
     {
         result = new Rectanglef(
             Math.Max(rect1.X, rect2.X),
             Math.Max(rect1.Y, rect2.Y),
             Math.Min(rect1.Right, rect2.Right) - Math.Max(rect1.Left, rect2.Left),
             Math.Min(rect1.Bottom, rect2.Bottom) - Math.Max(rect1.Top, rect2.Top));
     }
     return result;
 }
Exemplo n.º 3
0
 /// <summary>
 /// Resolve inter penetration between two moveable objects
 /// </summary>
 /// <param name="overlap">Area of interpenetration</param>
 /// <param name="playerRectangle">Rectangle of the player</param>
 public void ResolveInterPenetrationWall(Rectanglef overlap, Rectanglef playerRectangle)
 {
     // If this happens, we've gotten stuck
     if (overlap.Contains(playerRectangle))
     {
         int i = 0;
     }
     // If same width, collision is vertical
     else if (Math.Abs(overlap.Width - playerRectangle.Width) < 0.5)
     {
         if (Math.Abs(overlap.Y - playerRectangle.Y) < 0.5)
         {
             position.Y += (overlap.Height + 1);
         }
         else
         {
             position.Y -= (overlap.Height + 1);
         }
     }
     // If same height, collision is horizontal
     else if (Math.Abs(overlap.Height - playerRectangle.Height) < 0.5)
     {
         if (Math.Abs(overlap.X - playerRectangle.X) < 0.5)
         {
             position.X += (overlap.Width + 1);
         }
         else
         {
             position.X -= (overlap.Width + 1);
         }
     }
     else if (overlap.Width < overlap.Height)
     {
         if (Math.Abs(overlap.X - playerRectangle.X) < 0.0001)
         {
             position.X += (overlap.Width + 1);
         }
         else
         {
             position.X -= (overlap.Width + 1);
         }
     }
     else
     {
         if (Math.Abs(overlap.Y - playerRectangle.Y) < 0.0001)
         {
             position.Y += (overlap.Height + 1);
         }
         else
         {
             position.Y -= (overlap.Height + 1);
         }
     }
 }