Jump to content

  • Log In with Google      Sign In   
  • Create Account

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