Initial commit
This commit is contained in:
80
Java/MinecraftPlatformer/src/de/craftix/game/World.java
Normal file
80
Java/MinecraftPlatformer/src/de/craftix/game/World.java
Normal file
@@ -0,0 +1,80 @@
|
||||
package de.craftix.game;
|
||||
|
||||
import de.craftix.game.block.Block;
|
||||
import de.craftix.game.block.Material;
|
||||
import de.craftix.game.entity.Player;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
|
||||
public class World {
|
||||
|
||||
private int blocksX;
|
||||
private int blocksY;
|
||||
private Block[][] blocks;
|
||||
private File worldFile;
|
||||
|
||||
public World(String worldFile) {
|
||||
this.worldFile = new File("worlds/" + worldFile);
|
||||
loadWorldFromFile();
|
||||
}
|
||||
|
||||
public void update() {
|
||||
for(int row = 0; row < blocksY; row++) {
|
||||
for(int col = 0; col < blocksX; col++) {
|
||||
blocks[row][col].update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void render(Graphics2D g) {
|
||||
int blocksRendered = 0;
|
||||
Player player = Playstate.player;
|
||||
int startX = player.getCenterX() - GamePanel.width / GamePanel.SCALE / 2;
|
||||
int startY = player.getCenterY() - GamePanel.height / GamePanel.SCALE / 2;
|
||||
int endX = player.getCenterX() + GamePanel.width / GamePanel.SCALE / 2 + Game.BLOCKSIZE;
|
||||
int endY = player.getCenterY() + GamePanel.height / GamePanel.SCALE / 2 + Game.BLOCKSIZE;
|
||||
|
||||
for (int row = startY; row <= endY; row += Game.BLOCKSIZE) {
|
||||
for (int col = startX; col <= endX; col += Game.BLOCKSIZE) {
|
||||
int blockX = getColTile(col);
|
||||
int blockY = getRowTile(row);
|
||||
if (blockX >= 0 && blockY >= 0 && blockX < this.blocksX && blockY < this.blocksY) {
|
||||
blocks[blockY][blockX].render(g);
|
||||
blocksRendered++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g.setColor(Color.WHITE);
|
||||
g.drawString("Blocks Rendered: " + blocksRendered, 5, 10);
|
||||
}
|
||||
|
||||
private void loadWorldFromFile() {
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new FileReader(worldFile));
|
||||
blocksX = Integer.parseInt(reader.readLine());
|
||||
blocksY = Integer.parseInt(reader.readLine());
|
||||
blocks = new Block[blocksY][blocksX];
|
||||
|
||||
for (int row = 0; row < blocksY; row++) {
|
||||
String line = reader.readLine();
|
||||
String[] tokens = line.split(" ");
|
||||
for (int col = 0; col < blocksX; col++){
|
||||
int id = Integer.parseInt(tokens[col]);
|
||||
blocks[row][col] = new Block(Material.values()[id], col * Game.BLOCKSIZE, row * Game.BLOCKSIZE, Game.BLOCKSIZE, Game.BLOCKSIZE);
|
||||
}
|
||||
}
|
||||
reader.close();
|
||||
} catch (Exception e) {e.printStackTrace();}
|
||||
}
|
||||
|
||||
public int getRowTile(int y) {return y / Game.BLOCKSIZE;}
|
||||
public int getColTile(int x) {return x / Game.BLOCKSIZE;}
|
||||
|
||||
public Block[][] getBlocks() {return blocks;}
|
||||
public Block getBlock(float x, float y) {return blocks[getRowTile((int)y)][getColTile((int)x)];}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user