Advertisement
dermetfan

sight limit on a tile map

Oct 12th, 2013
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.42 KB | None | 0 0
  1. // declare these out of the render method
  2. SpriteBatch batch = renderer.getSpriteBatch();
  3. TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().get("background");
  4. int sight = 7, halfSight = 6; // the sights in tiles
  5. Vector2 tmp = new Vector2(), tmp2 = new Vector2(); // not needed for rectangle shape, only for circle
  6. int tileWidth = (int) layer.getTileWidth(), tileHeight = (int) layer.getTileHeight();
  7. Texture black = new Texture("img/black.png"); // a 1x1 pixel black image
  8.  
  9. // this goes in the render method
  10. int playerX = (int) (player.getX() / tileWidth), playerY = (int) (player.getY() / tileHeight);
  11. float distance; // not needed for a rectangle
  12. batch.begin();
  13. for(int x = 0; x < layer.getWidth(); x++)
  14.     for(int y = 0; y < layer.getHeight(); y++) {
  15.         distance = tmp.set(playerX, playerY).dst(tmp2.set(x, y)); // not needed for a rectangle
  16.         if(distance > sight) // for a rectangle: if(x < playerX - sight || x > playerX + sight || y < playerY - sight || y > playerY + sight)
  17.             batch.setColor(1, 1, 1, 1);
  18.         else if(distance > halfSight) // for a rectangle: else if(x < playerX - halfSight || x > playerX + halfSight || y < playerY - halfSight || y > playerY + halfSight)
  19.             batch.setColor(1, 1, 1, .5f);
  20.         else
  21.             continue;
  22.         batch.draw(black, x * tileWidth, y * tileHeight, tileWidth, tileHeight);
  23.     }
  24. batch.end();
  25.  
  26. // don't forget to dispose black in dispose() if you actually loaded it in the screen
  27. black.dispose();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement