diff --git a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java index f9347c9ba..6764bdc18 100644 --- a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java +++ b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java @@ -105,7 +105,6 @@ public class WorldRenderer { glTexCoordPointer(2, GL_FLOAT,28, 0L); glDrawArrays(GL_QUADS, 0, floatArray.length); */ - glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, textureLoader.getTextureID()); glBegin(GL_QUADS); synchronized (faces) { @@ -113,7 +112,7 @@ public class WorldRenderer { float[][] vertPositions = RenderConstants.FACE_VERTEX[entry.getKey().getFaceOrientation().getId()]; for (int vert = 0; vert < 4; vert++) { - float u; + float u = 0; switch (UV[vert][0]) { case 0: u = entry.getValue().getKey(); @@ -121,8 +120,6 @@ public class WorldRenderer { case 1: u = entry.getValue().getValue(); break; - default: - u = 0; } float x = vertPositions[vert][0] + entry.getKey().getBlockPosition().getX(); float y = vertPositions[vert][1] + entry.getKey().getBlockPosition().getY(); diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/DrawDescription.java b/src/main/java/de/bixilon/minosoft/render/blockModels/DrawDescription.java index 5c4efb215..7ab104964 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/DrawDescription.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/DrawDescription.java @@ -18,10 +18,21 @@ import de.bixilon.minosoft.render.face.FaceOrientation; import javafx.util.Pair; import org.json.JSONObject; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class DrawDescription { + private final FaceOrientation[] sideOrientations = new FaceOrientation[]{ + FaceOrientation.EAST, + FaceOrientation.WEST, + FaceOrientation.SOUTH, + FaceOrientation.NORTH + }; + private final FaceOrientation[] endOrientations = new FaceOrientation[]{ + FaceOrientation.UP, + FaceOrientation.DOWN + }; + + Map> faces; boolean full; // is the block a completely filled block @@ -30,58 +41,40 @@ public class DrawDescription { faces = new HashMap<>(); - JSONObject textures = (JSONObject) json.get("textures"); - if (json.get("parent").equals("block/cube_all")) { - // we have a full block and all sides are the same - Pair texture = MainWindow.getRenderer().getTextureLoader().getTexture( - (String) textures.get("all")); + JSONObject textures = json.getJSONObject("textures"); - for (FaceOrientation orientation : FaceOrientation.values()) { - faces.put(orientation, texture); - } - } else if (json.get("parent").equals("block/cube_column")) { - Pair sideTexture = MainWindow.getRenderer().getTextureLoader().getTexture( - (String) textures.get("side")); - faces.put(FaceOrientation.EAST, sideTexture); - faces.put(FaceOrientation.WEST, sideTexture); - faces.put(FaceOrientation.SOUTH, sideTexture); - faces.put(FaceOrientation.NORTH, sideTexture); + for (Iterator textureIterator = textures.keys(); textureIterator.hasNext(); ) { + String textureUse = textureIterator.next(); - Pair endTexture = MainWindow.getRenderer().getTextureLoader().getTexture( - (String) textures.get("end")); - faces.put(FaceOrientation.UP, endTexture); - faces.put(FaceOrientation.DOWN, endTexture); + String textureName = textures.getString(textureUse); + Pair texture; - } else if (json.get("parent").equals("block/block")) { - // top and bottom faces are different - if (textures.has("side")) { - Pair sideTexture = MainWindow.getRenderer().getTextureLoader().getTexture( - (String) textures.get("side")); - faces.put(FaceOrientation.EAST, sideTexture); - faces.put(FaceOrientation.WEST, sideTexture); - faces.put(FaceOrientation.SOUTH, sideTexture); - faces.put(FaceOrientation.NORTH, sideTexture); - } - if (textures.has("top")) { - Pair topTexture = MainWindow.getRenderer().getTextureLoader().getTexture( - (String) textures.get("top")); - faces.put(FaceOrientation.UP, topTexture); - } - if (textures.has("bottom")) { - Pair bottomTexture = MainWindow.getRenderer().getTextureLoader().getTexture( - (String) textures.get("bottom")); - faces.put(FaceOrientation.DOWN, bottomTexture); + try { + texture = MainWindow.getRenderer().getTextureLoader().getTexture(textureName); + } catch (Exception e) { + continue; } - if (textures.has("end")) { - Pair endTexture = MainWindow.getRenderer().getTextureLoader().getTexture( - (String) textures.get("end")); - faces.put(FaceOrientation.UP, endTexture); - faces.put(FaceOrientation.DOWN, endTexture); + List faceOrientations = new ArrayList<>(); + + switch (textureUse) { + case "all": + faceOrientations.addAll(Arrays.asList(FaceOrientation.values())); + case "side": + faceOrientations.addAll(Arrays.asList(sideOrientations)); + case "end": + faceOrientations.addAll(Arrays.asList(endOrientations)); + case "top": + faceOrientations.add(FaceOrientation.UP); + case "bottom": + faceOrientations.add(FaceOrientation.DOWN); + } + + for (FaceOrientation faceOrientation : faceOrientations) { + faces.put(faceOrientation, texture); } } - full = json.get("parent").equals("block/block") | - json.get("parent").equals("block/cube_all"); + full = true; } public boolean isFull() { diff --git a/src/main/java/de/bixilon/minosoft/render/face/RenderConstants.java b/src/main/java/de/bixilon/minosoft/render/face/RenderConstants.java index 6942baed0..503f946df 100644 --- a/src/main/java/de/bixilon/minosoft/render/face/RenderConstants.java +++ b/src/main/java/de/bixilon/minosoft/render/face/RenderConstants.java @@ -17,16 +17,16 @@ public class RenderConstants { //TODO: fix rotated faces public static final float[][][] FACE_VERTEX = new float[][][]{ { - {0.5f, 0.5f, 0.5f}, {0.5f, 0.5f, -0.5f}, {0.5f, -0.5f, -0.5f}, {0.5f, -0.5f, 0.5f}, + {0.5f, 0.5f, 0.5f} }, { - {-0.5f, 0.5f, 0.5f}, {-0.5f, 0.5f, -0.5f}, {-0.5f, -0.5f, -0.5f}, {-0.5f, -0.5f, 0.5f}, + {-0.5f, 0.5f, 0.5f} }, { {0.5f, 0.5f, 0.5f},