98 lines
3.3 KiB
Java
98 lines
3.3 KiB
Java
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++;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|