public Mirror(Vector2 p, float a, Director d) { position = p; angle = a; laser = new Laser(p, angle, d , this); hitBox.Width = 70; hitBox.Height = 70; rect = new RotatedRectangle(new Rectangle((int)position.X -45, (int)position.Y -30, 14, 50), 0f); rect.Origin = new Vector2(8, 26); }
public bool Intersects(RotatedRectangle theRectangle) { List<Vector2> aRectangleAxis = new List<Vector2>(); aRectangleAxis.Add(UpperRightCorner() - UpperLeftCorner()); aRectangleAxis.Add(UpperRightCorner() - LowerRightCorner()); aRectangleAxis.Add(theRectangle.UpperLeftCorner() - theRectangle.LowerLeftCorner()); aRectangleAxis.Add(theRectangle.UpperLeftCorner() - theRectangle.UpperRightCorner()); foreach (Vector2 aAxis in aRectangleAxis) { if (!IsAxisCollision(theRectangle, aAxis)) { return false; } } return true; }
private bool IsAxisCollision(RotatedRectangle theRectangle, Vector2 aAxis) { //Project the corners of the Rectangle we are checking on to the Axis and //get a scalar value of that project we can then use for comparison List<int> aRectangleAScalars = new List<int>(); aRectangleAScalars.Add(GenerateScalar(theRectangle.UpperLeftCorner(), aAxis)); aRectangleAScalars.Add(GenerateScalar(theRectangle.UpperRightCorner(), aAxis)); aRectangleAScalars.Add(GenerateScalar(theRectangle.LowerLeftCorner(), aAxis)); aRectangleAScalars.Add(GenerateScalar(theRectangle.LowerRightCorner(), aAxis)); //Project the corners of the current Rectangle on to the Axis and //get a scalar value of that project we can then use for comparison List<int> aRectangleBScalars = new List<int>(); aRectangleBScalars.Add(GenerateScalar(UpperLeftCorner(), aAxis)); aRectangleBScalars.Add(GenerateScalar(UpperRightCorner(), aAxis)); aRectangleBScalars.Add(GenerateScalar(LowerLeftCorner(), aAxis)); aRectangleBScalars.Add(GenerateScalar(LowerRightCorner(), aAxis)); //Get the Maximum and Minium Scalar values for each of the Rectangles int aRectangleAMinimum = aRectangleAScalars.Min(); int aRectangleAMaximum = aRectangleAScalars.Max(); int aRectangleBMinimum = aRectangleBScalars.Min(); int aRectangleBMaximum = aRectangleBScalars.Max(); //If we have overlaps between the Rectangles (i.e. Min of B is less than Max of A) //then we are detecting a collision between the rectangles on this Axis if (aRectangleBMinimum <= aRectangleAMaximum && aRectangleBMaximum >= aRectangleAMaximum) { return true; } else if (aRectangleAMinimum <= aRectangleBMaximum && aRectangleAMaximum >= aRectangleBMaximum) { return true; } return false; }