171 lines
6.2 KiB
Java
171 lines
6.2 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|