public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; oldKeyboardState = new KeyboardState(); mouseElement = new Element(); mouseElement.exists = true; images = new ImageHandler(); }
/// <summary> /// Tests for a collision on the top and bottom of element1 with element2. The double /// returned is in radians. /// </summary> /// <param name="element1">The element that wil have its top and bottom tested.</param> /// <param name="element2">The element that will be tested.</param> /// <returns></returns> public static double TestVertical(Element element1, Element element2) { if ((element1.roomX >= element2.roomX && element1.roomX <= element2.roomX + element2.sprite.Width - 1) || (element1.roomX + element1.sprite.Width >= element2.roomX + 1 && element1.roomX + element1.sprite.Width <= element2.roomX + element2.sprite.Width)) { if (element1.roomY <= element2.roomY + element2.sprite.Height && element1.roomY >= element2.roomY) { return 0; } if (element1.roomY + element1.sprite.Height >= element2.roomY && element1.roomY + element1.sprite.Height <= element2.roomY + element2.sprite.Height) { return Math.PI; } } return 10; }
/// <summary> /// Tests for a collision on the left and right of element1 with element2. The /// double returned is in radians. /// </summary> /// <param name="element1">The element that wil have its left and right tested.</param> /// <param name="element2">The element that will be tested.</param> /// <returns></returns> public static double TestHorizontal(Element element1, Element element2) { if ((element1.roomY >= element2.roomY && element1.roomY <= element2.roomY + element2.sprite.Height - 1) || (element1.roomY + element1.sprite.Height >= element2.roomY + 1 && element1.roomY + element1.sprite.Height <= element2.roomY + element2.sprite.Height)) { if (element1.roomX <= element2.roomX + element2.sprite.Width && element1.roomX >= element2.roomX) { return -Math.PI / 2; } if (element1.roomX + element1.sprite.Width >= element2.roomX && element1.roomX + element1.sprite.Width <= element2.roomX) { return Math.PI / 2; } } return 10; }
/// <summary> /// Tests if a coordinate is inside the corners of an element. /// </summary> /// <param name="argX">The x-coordinate that will be tested.</param> /// <param name="argY">The y-coordinate that will be tested.</param> /// <param name="element">The element that will be tested.</param> /// <returns></returns> public static bool TestCoordinate(int argX, int argY, Element element) { if (argX >= element.roomX && argX <= element.roomX + element.sprite.Width) { if (argY >= element.roomY && argY <= element.roomY + element.sprite.Height) { return true; } } return false; }
public static bool TestCompletelyInsideForAll(Element insideElement, List<Box> surroundingElements) { bool topLeft, topRight, bottomLeft, bottomRight; topLeft = topRight = bottomLeft = bottomRight = false; for (int i = 0; i < surroundingElements.Count; i++) { if (!topLeft) { if (TestCoordinate(insideElement.roomX, insideElement.roomY, surroundingElements[i])) { topLeft = true; } } if (!topRight) { if (TestCoordinate(insideElement.roomX + insideElement.sprite.Width, insideElement.roomY, surroundingElements[i])) { topRight = true; } } if (!bottomLeft) { if (TestCoordinate(insideElement.roomX, insideElement.roomY + insideElement.sprite.Height, surroundingElements[i])) { bottomLeft = true; } } if (!bottomRight) { if (TestCoordinate(insideElement.roomX + insideElement.sprite.Width, insideElement.roomY + insideElement.sprite.Height, surroundingElements[i])) { bottomRight = true; } } if (topLeft && topRight && bottomLeft && bottomRight) { return true; } } return false; }
/// <summary> /// Tests the corners of the inside element inside the surrounding element. It will /// only return true if all the corners are inside the surrounding element. /// </summary> /// <param name="insideElement">The element that will be tested if inside the /// surrounding element.</param> /// <param name="surroundingElement">The element that will be tested if surrounding /// the inside element.</param> /// <returns></returns> public static bool TestCompletelyInside(Element insideElement, Element surroundingElement) { if (insideElement.roomX >= surroundingElement.roomX && insideElement.roomX + insideElement.sprite.Width <= surroundingElement.roomX + surroundingElement.sprite.Width) { if (insideElement.roomY >= surroundingElement.roomY && insideElement.roomY + insideElement.sprite.Height <= surroundingElement.roomY + surroundingElement.sprite.Height) { return true; } } return false; }
/// <summary> /// Tests the corners of the first element insideElement the corners of the second element, /// then switches the elements and does the same thing. /// </summary> /// <param name="element1">An element that is or could be colliding.</param> /// <param name="element2">An element that is or could be colliding.</param> /// <returns></returns> public static bool Test(Element element1, Element element2) { if (element1.roomX >= element2.roomX && element1.roomX <= element2.roomX + element2.sprite.Width) { if (element1.roomY >= element2.roomY && element1.roomY <= element2.roomY + element2.sprite.Height) { return true; } if (element1.roomY + element1.sprite.Height >= element2.roomY && element1.roomY + element1.sprite.Height <= element2.roomY + element2.sprite.Height) { return true; } } if (element1.roomX + element1.sprite.Width >= element2.roomX && element1.roomX + element1.sprite.Width <= element2.roomX + element2.sprite.Width) { if (element1.roomY >= element2.roomY && element1.roomY <= element2.roomY + element2.sprite.Height) { return true; } if (element1.roomY + element1.sprite.Height >= element2.roomY && element1.roomY + element1.sprite.Height <= element2.roomY + element2.sprite.Height) { return true; } } Element tempElement = element1; element1 = element2; element2 = tempElement; if (element1.roomX >= element2.roomX && element1.roomX <= element2.roomX + element2.sprite.Width) { if (element1.roomY >= element2.roomY && element1.roomY <= element2.roomY + element2.sprite.Height) { return true; } if (element1.roomY + element1.sprite.Height >= element2.roomY && element1.roomY + element1.sprite.Height <= element2.roomY + element2.sprite.Height) { return true; } } if (element1.roomX + element1.sprite.Width >= element2.roomX && element1.roomX + element1.sprite.Width <= element2.roomX + element2.sprite.Width) { if (element1.roomY >= element2.roomY && element1.roomY <= element2.roomY + element2.sprite.Height) { return true; } if (element1.roomY + element1.sprite.Height >= element2.roomY && element1.roomY + element1.sprite.Height <= element2.roomY + element2.sprite.Height) { return true; } } return false; }