package de.miaurizius.jgame2d.tile; import de.miaurizius.jgame2d.core.GamePanel; import javax.imageio.ImageIO; import java.awt.*; import java.io.*; public class TileManager { GamePanel panel; Tile[] tile; int[][] mapTileNum; public TileManager(GamePanel panel) { this.panel = panel; tile = new Tile[10]; mapTileNum = new int[panel.maxWorldCol][panel.maxWorldRow]; getTileImage(); loadMap("testworld"); } public void getTileImage() { try { tile[0] = new Tile(); tile[0].image = ImageIO.read(new FileInputStream("assets/tiles/grass.png")); tile[1] = new Tile(); tile[1].image = ImageIO.read(new FileInputStream("assets/tiles/wall.png")); tile[2] = new Tile(); tile[2].image = ImageIO.read(new FileInputStream("assets/tiles/water.png")); tile[3] = new Tile(); tile[3].image = ImageIO.read(new FileInputStream("assets/tiles/earth.png")); tile[4] = new Tile(); tile[4].image = ImageIO.read(new FileInputStream("assets/tiles/tree.png")); tile[5] = new Tile(); tile[5].image = ImageIO.read(new FileInputStream("assets/tiles/sand.png")); } catch (IOException e) { e.printStackTrace(); } } 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) { e.printStackTrace(); } } 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, panel.tileSize, panel.tileSize, null); worldCol++; if(worldCol == panel.maxWorldCol) { worldCol = 0; worldRow++; } } } }