mirror of
https://github.com/Klagarge/PokeHES.git
synced 2025-03-13 06:14:32 +00:00
206 lines
6.3 KiB
Java
206 lines
6.3 KiB
Java
package Screen;
|
|
|
|
import java.util.Map;
|
|
import java.util.TreeMap;
|
|
import java.util.Vector;
|
|
|
|
import com.badlogic.gdx.maps.MapObject;
|
|
import com.badlogic.gdx.maps.MapObjects;
|
|
import com.badlogic.gdx.maps.MapProperties;
|
|
import com.badlogic.gdx.maps.tiled.TiledMap;
|
|
import com.badlogic.gdx.maps.tiled.TiledMapRenderer;
|
|
import com.badlogic.gdx.maps.tiled.TiledMapTile;
|
|
import com.badlogic.gdx.maps.tiled.TiledMapTileLayer;
|
|
import com.badlogic.gdx.maps.tiled.TiledMapTileLayer.Cell;
|
|
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
|
|
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
|
|
import com.badlogic.gdx.math.Vector2;
|
|
|
|
import Entity.Character;
|
|
import Entity.Player;
|
|
import ch.hevs.gdx2d.components.screen_management.RenderingScreen;
|
|
import ch.hevs.gdx2d.lib.GdxGraphics;
|
|
|
|
public class ScreenMap extends RenderingScreen{
|
|
|
|
// tiles management
|
|
private Vector<TiledMapTileLayer> tiledLayer = new Vector<>();
|
|
private MapObjects doors;
|
|
Map<String,TiledMap> tMap = new TreeMap<String,TiledMap>();
|
|
Map<String,TiledMapRenderer> tMapRenderer = new TreeMap<String,TiledMapRenderer>();
|
|
public String map;
|
|
public float zoom;
|
|
private int width;
|
|
public int tileWidth;
|
|
private int height;
|
|
public int tileHeight;
|
|
private Player player;
|
|
|
|
private void createMap(String name){
|
|
TiledMap tm =new TmxMapLoader().load("./resources/map/"+ name + ".tmx");
|
|
tMap.put(name,tm);
|
|
tMapRenderer.put(name,new OrthogonalTiledMapRenderer(tm));
|
|
}
|
|
|
|
@Override
|
|
public void onInit() {
|
|
// Set initial zoom
|
|
zoom = 1;
|
|
|
|
try { map = player.getMap(); } catch (Exception e) {}
|
|
|
|
// create map
|
|
createMap("test");
|
|
createMap("test_couloir");
|
|
createMap("desert");
|
|
|
|
createMap("SS");
|
|
//createMap("RI");
|
|
//createMap("RS");
|
|
|
|
createMap("21RI");
|
|
createMap("21RS");
|
|
createMap("21N2");
|
|
createMap("21N205");
|
|
createMap("21N3");
|
|
createMap("21N304");
|
|
createMap("21N307");
|
|
createMap("21N308");
|
|
|
|
createMap("23RI");
|
|
createMap("23RS");
|
|
createMap("23N1");
|
|
//createMap("23N2");
|
|
//createMap("23N215");
|
|
//createMap("23N3");
|
|
//createMap("23N308");
|
|
}
|
|
|
|
@Override
|
|
public void onGraphicRender(GdxGraphics g) {
|
|
|
|
tiledLayer.clear();
|
|
|
|
// Get actual map of the player
|
|
try { map = player.getMap(); } catch (Exception e) {}
|
|
|
|
// Get all layers on the current map
|
|
for (int i = 0; i < 50; i++) {
|
|
try { tiledLayer.add((TiledMapTileLayer) tMap.get(map).getLayers().get(i)); } catch (Exception e) { }
|
|
}
|
|
|
|
// Get heigh and width of tiles and the size of the tiles
|
|
TiledMapTileLayer tl = tiledLayer.get(0);
|
|
width = tl.getWidth();
|
|
tileWidth = (int) tl.getTileWidth();
|
|
height = tl.getHeight();
|
|
tileHeight = (int) tl.getTileHeight();
|
|
|
|
//System.out.println(width + " x " + height + " - " + tileWidth + " x " + tileHeight);
|
|
|
|
// Get all doors on the current map
|
|
try {
|
|
doors = tMap.get(map).getLayers().get("door").getObjects();
|
|
} catch (Exception e) { doors = null; }
|
|
|
|
|
|
// Render the tileMap
|
|
g.zoom(zoom);
|
|
g.moveCamera((int)player.getPosition().x, (int)player.getPosition().y, width * tileWidth, height * tileHeight);
|
|
|
|
tMapRenderer.get(map).setView(g.getCamera());
|
|
tMapRenderer.get(map).render();
|
|
|
|
g.drawFPS();
|
|
}
|
|
|
|
|
|
public Vector<TiledMapTile> getTile(Vector2 position, int offsetX, int offsetY) {
|
|
Vector<TiledMapTile> tiles = new Vector<>();
|
|
|
|
for (TiledMapTileLayer tl : tiledLayer) {
|
|
int x = (int) (position.x / tileWidth) + offsetX;
|
|
int y = (int) (position.y / tileHeight) + offsetY;
|
|
try {
|
|
Cell cell = tl.getCell(x, y);
|
|
if (cell == null) continue;
|
|
tiles.add(cell.getTile());
|
|
} catch (Exception e) { System.out.println("error: cell");}
|
|
}
|
|
|
|
return tiles;
|
|
}
|
|
|
|
public boolean isWalkable(Vector<TiledMapTile> tile) {
|
|
if (tile == null) return false;
|
|
if (tile.size() == 0) return false;
|
|
boolean walkable = true;
|
|
for (TiledMapTile tiledMapTile : tile) {
|
|
Object test = tiledMapTile.getProperties().get("walkable");
|
|
walkable = Boolean.parseBoolean(test.toString()) ? walkable:false;
|
|
}
|
|
return walkable;
|
|
}
|
|
|
|
public float getSpeed(Vector<TiledMapTile> tile) {
|
|
float speed = 0;
|
|
for (TiledMapTile tiledMapTile : tile) {
|
|
Object test = tiledMapTile.getProperties().get("speed");
|
|
float newSpeed = Float.parseFloat(test.toString());
|
|
speed = newSpeed > speed ? newSpeed:speed;
|
|
}
|
|
return speed;
|
|
}
|
|
|
|
public boolean isDoor(Vector2 position) {
|
|
if (doors == null) return false;
|
|
boolean onDoor = false;
|
|
Integer x = null;
|
|
Integer y = null;
|
|
int ox = 0;
|
|
int oy = 0;
|
|
try {
|
|
x = (int) (position.x / tileWidth);
|
|
y = (int) (position.y / tileHeight);
|
|
} catch (Exception e) { }
|
|
|
|
for (MapObject object : doors){
|
|
MapProperties mapProperties = null;
|
|
try { mapProperties = object.getProperties(); } catch (Exception e) { }
|
|
try { ox = (int) ((float) mapProperties.get("x")); } catch (Exception e) { }
|
|
try { oy = (int) ((float) mapProperties.get("y")); } catch (Exception e) { }
|
|
|
|
ox /= tileWidth;
|
|
oy /= tileHeight;
|
|
|
|
if ((x != null || y != null) && (x == ox && y == oy)) {
|
|
onDoor = true;
|
|
try { Door.nextMap = mapProperties.get("nextMap").toString(); } catch (Exception e) { }
|
|
try { Door.nextX = Integer.parseInt(mapProperties.get("nextX").toString()); } catch (Exception e) { }
|
|
try { Door.nextY = Integer.parseInt(mapProperties.get("nextY").toString()); } catch (Exception e) { }
|
|
try { Door.nextDirection = Character.Direction.valueOf(mapProperties.get("nextDirection").toString()); } catch (Exception e) { }
|
|
}
|
|
}
|
|
|
|
return onDoor;
|
|
}
|
|
|
|
public static class Door {
|
|
public static String nextMap;
|
|
public static Integer nextX;
|
|
public static Integer nextY;
|
|
public static Character.Direction nextDirection;
|
|
|
|
public static void reset(){
|
|
nextMap = null;
|
|
nextX = null;
|
|
nextY = null;
|
|
nextDirection = null;
|
|
}
|
|
}
|
|
|
|
public void setPlayer(Player p) {
|
|
player = p;
|
|
}
|
|
}
|