Jump to content

  • Log In with Google      Sign In   
  • Create Account

14 years ago on June 15th Gamedev.net was first launched! We want to thank all of you for being part of our community and hope the best years are ahead of us. Happy birthday Gamedev.net!

adventurerOK

Member Since 23 Dec 2011
Offline Last Active Apr 20 2012 03:59 PM
-----

Topics I've Started

Get the Mouse Position on isometric grid.

20 April 2012 - 10:53 AM

I'm having trouble with finding the mouse coordinates on my isometric game. The games tiles are sent to openGL in 2d form, but rotated into isometric: (before rotation)Posted Image

(after rotation):Posted Image

I have access to the current player's x and y coords, the size of the tiles (128x128) the approximate render size of the tile (180x90) and the position of the mouse. I think this may be to do with the coordinate system I use as I have seen this image: Posted Image| reckon the code I use to calculate the mouse position uses that system.

Here is the code to get the position: (I have coded in two methods, so I will show both)
public class IsometricPointSystem {
public static Vector2f pixelToIso(Vector2f pixel, int camX, int camY){
  //return _pixelToIsoAlgebra(pixel, camX, camY);
  return _pixelToIsoColor(pixel, camX, camY);
}

protected static Vector2f _pixelToIsoAlgebra(Vector2f pixel, int camX, int camY){

  Vector2f cam = cameraCalc(camX, camY);

  int x = (int) (pixel.x + cam.x);
  int y = (int) (pixel.y + cam.y);
  int tileWidth = Tile.TILE_ISO_WIDTH;
  int tileHeight = Tile.TILE_ISO_HEIGHT;
  //int tileWidth = 128;
  //int tileHeight = 128;
  int x0 = 144 + tileWidth/2;
  int y0 = 2;
  int i = (int)Math.floor( (y - y0)/(double)tileHeight - (x - x0)/(double)tileWidth );
  int j = (int)Math.floor( (y - y0)/(double)tileHeight + (x - x0)/(double)tileWidth );



  return new Vector2f(i, j);
}
protected static Vector2f _pixelToIsoColor(Vector2f pixel, int camX, int camY){
  int tileWidth = Tile.TILE_ISO_WIDTH; //180
  int tileHeight = Tile.TILE_ISO_HEIGHT; //90

  Vector2f cam = cameraCalc(camX, camY);

  //int playerTileX = -((camX - (Display.getWidth() / 2 - 64)) / 128);
  //int playerTileY = -((camY - (Display.getHeight() / 2 - 64)) / 128);

  int nx = (int) (pixel.x + cam.x) - 450;
  int ny = (int) (pixel.y + cam.y) - 450;

  int maskX = nx / tileWidth;
  int maskY = (ny / tileHeight) * 2;

  int mouseMapX = nx % tileWidth;
  int mouseMapY = ny % tileHeight;



  try{
   Color color = new Color(TextureManager.tileMap.getRGB(mouseMapX, mouseMapY));
  
   if(color.equals(new Color(255, 0, 0))) return new Vector2f(maskX - 1, maskY);
   if(color.equals(new Color(255, 255, 0))) return new Vector2f(maskX, maskY - 1);
   if(color.equals(new Color(0, 255, 0))) return new Vector2f(maskX, maskY + 1);
   if(color.equals(new Color(0, 0, 255)))return new Vector2f(maskX - 1, maskY);
  
  } catch(Exception e){}

  return new Vector2f(maskX, maskY);
}

public static Vector2f cameraCalc(int camX, int camY){
  int playerTileX = -((camX - (Display.getWidth() / 2 - 64)) / 128);
  int playerTileY = -((camY - (Display.getHeight() / 2 - 64)) / 128);

  int heightPlus = 0;
  int widthPlus = 0;

  heightPlus += playerTileX * 45;
  widthPlus -= playerTileX * 90;

  heightPlus += playerTileY * 90;
  widthPlus += playerTileY * 90;


  return new Vector2f(widthPlus, heightPlus);
}
}

Would it be possible to convert the coordinate system in the image to my coordinate system?

Detecting if the Hash (#) key is pressed

23 December 2011 - 10:56 AM

I have been writing code to detect text input from the user. One problem I have is that I can't find a way to detect if the hash key is down. I'm using a KeyboardState object to detect key press, so I'm wondering if there is any way to detect if the hash key is down.

PARTNERS