diff --git a/src/main/java/de/bixilon/minosoft/game/datatypes/world/Chunk.java b/src/main/java/de/bixilon/minosoft/game/datatypes/world/Chunk.java index ec94869e0..4bcdbc331 100644 --- a/src/main/java/de/bixilon/minosoft/game/datatypes/world/Chunk.java +++ b/src/main/java/de/bixilon/minosoft/game/datatypes/world/Chunk.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.game.datatypes.world; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; +import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Blocks; import de.bixilon.minosoft.render.blockModels.Face.RenderConstants; import java.util.HashMap; @@ -32,6 +33,9 @@ public class Chunk { public Block getBlock(int x, int y, int z) { byte section = (byte) (y / RenderConstants.SECTION_HEIGHT); + if (! nibbles.containsKey(section)) { + return Blocks.nullBlock; + } return nibbles.get(section).getBlock(x, y % RenderConstants.SECTION_HEIGHT, z); } diff --git a/src/main/java/de/bixilon/minosoft/render/GameWindow.java b/src/main/java/de/bixilon/minosoft/render/GameWindow.java index 93c41253d..25d5d3261 100644 --- a/src/main/java/de/bixilon/minosoft/render/GameWindow.java +++ b/src/main/java/de/bixilon/minosoft/render/GameWindow.java @@ -96,6 +96,7 @@ public class GameWindow { GameWindow.connection = connection; running = true; playerController = new PlayerController(openGLWindow.getWindow()); + renderer.startChunkPreparation(connection); } public static void pause() { diff --git a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java index 13043fde9..5f3aba007 100644 --- a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java +++ b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java @@ -14,26 +14,22 @@ package de.bixilon.minosoft.render; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; -import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Blocks; import de.bixilon.minosoft.game.datatypes.world.*; -import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; -import javafx.util.Pair; import org.apache.commons.collections.primitives.ArrayFloatList; import de.bixilon.minosoft.render.blockModels.Face.RenderConstants; +import java.lang.reflect.Array; import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.atomic.AtomicInteger; import static org.lwjgl.opengl.GL11.*; public class WorldRenderer { - private final ConcurrentHashMap> faces; + private ConcurrentHashMap> faces; private AssetsLoader assetsLoader; private LinkedBlockingQueue queuedMapData; @@ -60,7 +56,6 @@ public class WorldRenderer { }); chunkLoadThread.setName(String.format("%d/ChunkLoading", connection.getConnectionId())); chunkLoadThread.start(); - assetsLoader = new AssetsLoader(); } public void queueChunkBulk(HashMap chunks) { @@ -79,6 +74,9 @@ public class WorldRenderer { queuedMapData.add(() -> prepareBlock(position, block, false)); } + private void prepareBlock(BlockPosition position, Block block, boolean b) { + } + private void prepareChunk(ChunkLocation location, Chunk chunk) { // clear or create current chunk ConcurrentHashMap chunkFaces = new ConcurrentHashMap<>(); @@ -94,7 +92,7 @@ public class WorldRenderer { ConcurrentHashMap world = GameWindow.getConnection().getPlayer().getWorld().getAllChunks(); // clear or create current chunk nibble ArrayFloatList nibbleMap = new ArrayFloatList(); - faces.get(chunkLocation).put(sectionHeight, nibbleMap); + //faces.get(chunkLocation).put(sectionHeight, nibbleMap); ConcurrentHashMap nibbleBlocks = nibble.getBlocks(); nibbleBlocks.forEach((location, block) -> { HashSet facesToDraw = new HashSet<>(); @@ -170,7 +168,7 @@ public class WorldRenderer { yield nibbleBlocks.get(new ChunkNibbleLocation(location.getX(), location.getY(), location.getZ() + 1)); } }; - if (dependedBlock == null || !assetsLoader.getBlockModelLoader().isFull(dependedBlock)) { + if (dependedBlock == null ||!assetsLoader.getBlockModelLoader().isFull(dependedBlock)) { facesToDraw.add(orientation); } } @@ -182,15 +180,6 @@ public class WorldRenderer { } - private void prepareBlock(BlockPosition position, Block block, boolean trustEdges) { - // TODO - } - - private void prepareBlock(BlockPosition position, boolean trustEdges) { - prepareBlock(position, GameWindow.getConnection().getPlayer().getWorld().getBlock(position), trustEdges); - } - - public void draw() { glPushMatrix(); glBindTexture(GL_TEXTURE_2D, assetsLoader.getTextureLoader().getTextureID());