package de.miaurizius.jgame2d.tile; import de.miaurizius.jgame2d.core.Boot; import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.Utility; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; 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[panel.maxWorldCol][panel.maxWorldRow]; getTileImage(); loadMap("testmap2"); } 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); BufferedImage scaledImage; for (Tile tile : tile) { if(tile == null) continue; tile.image = Utility.scaleImage(tile.image, panel.tileSize, panel.tileSize); } } public void loadMap(String map) { try { InputStream stream = new FileInputStream("assets/maps/"+map+".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[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[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); worldCol++; if(worldCol == panel.maxWorldCol) { worldCol = 0; worldRow++; } } } }