public virtual void Draw(GameTime gameTime) { spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); float maxdepth = ((squaresWideToDraw + 1) + ((squaresTallToDraw + 1) * Tile.TileWidth)) * 10; //converts pixels to steps int leftX = Numerical.intDivide(Camera.Location.X, Tile.TileStepX); int topY = Numerical.intDivide(Camera.Location.Y, Tile.TileStepY); //if the sum is now odd, we will get weird errors, so just move over a little //we will fix the inelegance with more offset if (Numerical.Mod(leftX + topY, 2) == 1) { leftX--; } int firstX = (leftX + topY) / 2 - 1; int firstY = (leftX - topY) / 2; int offsetX = Camera.Location.X - (firstX + firstY) * Tile.TileStepX; int offsetY = Camera.Location.Y - (firstX - firstY) * Tile.TileStepY; drawTileMapCells(maxdepth, firstX, firstY, offsetX, offsetY); drawInGameObjects(maxdepth, firstX, firstY, offsetX, offsetY); spriteBatch.End(); }
/// <summary> /// Matrix transforms! Turning mouse screen coordinates into /// in-game pixel coordinates, then scaling down to square coordinates. /// </summary> /// <param name="mouseX"></param> /// <param name="mouseY"></param> private void updateMousePosition(int mouseX, int mouseY) { this.mouseScreenX = mouseX; this.mouseScreenY = mouseY; int translatedMouseX = mouseX + Camera.Location.X; int translatedMouseY = mouseY + Camera.Location.Y; int wxTsx = Numerical.intDivide(Tile.TileInGameWidth * translatedMouseX, Tile.TileStepX); int wyTsy = Numerical.intDivide(Tile.TileInGameWidth * translatedMouseY, Tile.TileStepY); int hxTsx = Numerical.intDivide(Tile.TileInGameHeight * translatedMouseX, Tile.TileStepX); int hyTsy = Numerical.intDivide(Tile.TileInGameHeight * translatedMouseY, Tile.TileStepY); MouseWorldX = Numerical.intDivide(wxTsx + wyTsy, 2); MouseWorldY = Numerical.intDivide(hxTsx - hyTsy, 2); }
/// <summary> /// Calculates the Y-Square coordinate from a given (in-game pixel) point /// </summary> /// <param name="xPos"></param> /// <param name="yPos"></param> /// <returns></returns> protected int FindYSquare(int xPos, int yPos) { return(Numerical.intDivide(yPos, Tile.TileInGameHeight)); }
/// <summary> /// Calculates the X-Square coordinate from a given (in-game pixel) point /// </summary> /// <param name="xPos"></param> /// <param name="yPos"></param> /// <returns></returns> protected int FindXSquare(int xPos, int yPos) { return(Numerical.intDivide(xPos, Tile.TileInGameWidth)); }