package de.miaurizius.jgame2d.tile; import de.miaurizius.jgame2d.core.Boot; import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.Utility; import de.miaurizius.jgame2d.core.enums.Map; import javax.imageio.ImageIO; import java.awt.*; import java.io.*; import java.util.logging.Level; public class TileManager { GamePanel panel; public Tile[] tile; public int[][][] mapTileNum; public TileManager(GamePanel panel) { this.panel = panel; tile = new Tile[50]; mapTileNum = new int[Map.values().length][panel.maxWorldCol][panel.maxWorldRow]; getTileImage(); for(Map m : Map.values()) loadMap(m); } public void initializeTile(int i, String name, boolean col) { try { tile[i] = new Tile(); tile[i].image = ImageIO.read(new FileInputStream("assets/tiles/" + name + ".png")); tile[i].collision = col; } catch(IOException e) { Boot.logger.log(Level.SEVERE, "Could not load tile", e); } } public void getTileImage() { // PLACEHOLDER initializeTile(0, "grass00", false); initializeTile(2, "grass00", false); initializeTile(3, "grass00", false); initializeTile(4, "grass00", false); initializeTile(5, "grass00", false); initializeTile(6, "grass00", false); initializeTile(7, "grass00", false); initializeTile(8, "grass00", false); initializeTile(9, "grass00", false); // GRASS initializeTile(10, "grass00", false); initializeTile(11, "grass01", false); // WATER initializeTile(12, "water00", true); initializeTile(13, "water01", true); initializeTile(14, "water02", true); initializeTile(15, "water03", true); initializeTile(16, "water04", true); initializeTile(17, "water05", true); initializeTile(18, "water06", true); initializeTile(19, "water07", true); initializeTile(20, "water08", true); initializeTile(21, "water09", true); initializeTile(22, "water10", true); initializeTile(23, "water11", true); initializeTile(24, "water12", true); initializeTile(25, "water13", true); // ROAD initializeTile(26, "road00", false); initializeTile(27, "road01", false); initializeTile(28, "road02", false); initializeTile(29, "road03", false); initializeTile(30, "road04", false); initializeTile(31, "road05", false); initializeTile(32, "road06", false); initializeTile(33, "road07", false); initializeTile(34, "road08", false); initializeTile(35, "road09", false); initializeTile(36, "road10", false); initializeTile(37, "road11", false); initializeTile(38, "road12", false); // WORLD initializeTile(39, "earth", false); initializeTile(40, "wall", true); initializeTile(41, "tree", true); // initializeTile(42, "hut", false); initializeTile(43, "floor01", false); initializeTile(44, "table01", true); for (Tile tile : tile) { if(tile == null) continue; tile.image = Utility.scaleImage(tile.image, panel.tileSize, panel.tileSize); } } public void loadMap(Map map) { try { InputStream stream = new FileInputStream("assets/maps/"+map.getName()+".map"); BufferedReader bReader = new BufferedReader(new InputStreamReader(stream)); int col = 0; int row = 0; while(col < panel.maxWorldCol && row < panel.maxWorldRow) { String line = bReader.readLine(); while(col < panel.maxWorldCol) { String[] numbers = line.split(" "); int num = Integer.parseInt(numbers[col]); mapTileNum[map.getIndex()][col][row] = num; col++; } if(col == panel.maxWorldCol) { col = 0; row++; } } bReader.close(); } catch(Exception e) { Boot.logger.log(Level.SEVERE, "Could not load map", e); } } public void draw(Graphics2D graphics2D) { int worldCol = 0; int worldRow = 0; while(worldCol < panel.maxWorldCol && worldRow < panel.maxWorldRow) { int tileNum = mapTileNum[panel.currentMap.getIndex()][worldCol][worldRow]; int worldX = worldCol * panel.tileSize; int worldY = worldRow * panel.tileSize; int screenX = worldX - panel.player.worldX + panel.player.screenX; int screenY = worldY - panel.player.worldY + panel.player.screenY; if(worldX + panel.tileSize > panel.player.worldX - panel.player.screenX && worldX - panel.tileSize < panel.player.worldX + panel.player.screenX && worldY + panel.tileSize > panel.player.worldY - panel.player.screenY && worldY - panel.tileSize < panel.player.worldY + panel.player.screenY ) { graphics2D.drawImage(tile[tileNum].image, screenX, screenY, null); // if(panel.keyH.debug && tile[tileNum].collision) { // graphics2D.setColor(new Color(255, 0, 0, 70)); // graphics2D.fillRect(worldX - panel.player.worldX + panel.player.screenX, worldY - panel.player.worldY + panel.player.screenY, panel.tileSize, panel.tileSize); // } } worldCol++; if(worldCol == panel.maxWorldCol) { worldCol = 0; worldRow++; } } if(panel.keyH.debug) { graphics2D.setColor(new Color(255, 0, 0, 70)); for(int i = 0; i < panel.pFinder.pathList.size(); i++) { int worldX = panel.pFinder.pathList.get(i).col * panel.tileSize; int worldY = panel.pFinder.pathList.get(i).row * panel.tileSize; int screenX = worldX - panel.player.worldX + panel.player.screenX; int screenY = worldY - panel.player.worldY + panel.player.screenY; graphics2D.fillRect(screenX, screenY, panel.tileSize, panel.tileSize); } } } }