From 1ad4e19e0254e666f62933aa7f451d3184c7ff6f Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 16 Aug 2020 16:05:45 +0200 Subject: [PATCH] added support for SubBlockRotation reading wip1 --- .../de/bixilon/minosoft/render/Face/Axis.java | 18 ++++++++ .../{fullFace => Face}/FaceOrientation.java | 2 +- .../{fullFace => Face}/FullFacePosition.java | 4 +- .../render/{fullFace => Face}/InFaceUV.java | 2 +- .../{fullFace => Face}/RenderConstants.java | 2 +- .../minosoft/render/WorldRenderer.java | 4 +- .../render/blockModels/BlockDescription.java | 3 +- .../render/blockModels/BlockModelLoader.java | 2 +- .../minosoft/render/blockModels/Face.java | 9 ++-- .../blockModels/{ => subBlocks}/SubBlock.java | 11 +++-- .../{ => subBlocks}/SubBlockPosition.java | 18 +++----- .../subBlocks/SubBlockRotation.java | 41 +++++++++++++++++++ .../render/movement/PlayerController.java | 2 +- 13 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/render/Face/Axis.java rename src/main/java/de/bixilon/minosoft/render/{fullFace => Face}/FaceOrientation.java (96%) rename src/main/java/de/bixilon/minosoft/render/{fullFace => Face}/FullFacePosition.java (95%) rename src/main/java/de/bixilon/minosoft/render/{fullFace => Face}/InFaceUV.java (96%) rename src/main/java/de/bixilon/minosoft/render/{fullFace => Face}/RenderConstants.java (98%) rename src/main/java/de/bixilon/minosoft/render/blockModels/{ => subBlocks}/SubBlock.java (92%) rename src/main/java/de/bixilon/minosoft/render/blockModels/{ => subBlocks}/SubBlockPosition.java (72%) create mode 100644 src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java diff --git a/src/main/java/de/bixilon/minosoft/render/Face/Axis.java b/src/main/java/de/bixilon/minosoft/render/Face/Axis.java new file mode 100644 index 000000000..f2169641b --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/render/Face/Axis.java @@ -0,0 +1,18 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.render.Face; + +public enum Axis { + X, Y, Z +} diff --git a/src/main/java/de/bixilon/minosoft/render/fullFace/FaceOrientation.java b/src/main/java/de/bixilon/minosoft/render/Face/FaceOrientation.java similarity index 96% rename from src/main/java/de/bixilon/minosoft/render/fullFace/FaceOrientation.java rename to src/main/java/de/bixilon/minosoft/render/Face/FaceOrientation.java index f61044d41..8ae33205b 100644 --- a/src/main/java/de/bixilon/minosoft/render/fullFace/FaceOrientation.java +++ b/src/main/java/de/bixilon/minosoft/render/Face/FaceOrientation.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.fullFace; +package de.bixilon.minosoft.render.Face; public enum FaceOrientation { EAST(0), WEST(1), UP(2), DOWN(3), SOUTH(4), NORTH(5); diff --git a/src/main/java/de/bixilon/minosoft/render/fullFace/FullFacePosition.java b/src/main/java/de/bixilon/minosoft/render/Face/FullFacePosition.java similarity index 95% rename from src/main/java/de/bixilon/minosoft/render/fullFace/FullFacePosition.java rename to src/main/java/de/bixilon/minosoft/render/Face/FullFacePosition.java index 36aeaac61..d9dfa8461 100644 --- a/src/main/java/de/bixilon/minosoft/render/fullFace/FullFacePosition.java +++ b/src/main/java/de/bixilon/minosoft/render/Face/FullFacePosition.java @@ -11,13 +11,13 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.fullFace; +package de.bixilon.minosoft.render.Face; import de.bixilon.minosoft.game.datatypes.world.BlockPosition; import javafx.util.Pair; import org.apache.commons.collections.primitives.ArrayFloatList; -import static de.bixilon.minosoft.render.fullFace.RenderConstants.UV; +import static de.bixilon.minosoft.render.Face.RenderConstants.UV; public class FullFacePosition { private final BlockPosition blockPosition; diff --git a/src/main/java/de/bixilon/minosoft/render/fullFace/InFaceUV.java b/src/main/java/de/bixilon/minosoft/render/Face/InFaceUV.java similarity index 96% rename from src/main/java/de/bixilon/minosoft/render/fullFace/InFaceUV.java rename to src/main/java/de/bixilon/minosoft/render/Face/InFaceUV.java index 39b660f01..e062597b5 100644 --- a/src/main/java/de/bixilon/minosoft/render/fullFace/InFaceUV.java +++ b/src/main/java/de/bixilon/minosoft/render/Face/InFaceUV.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.fullFace; +package de.bixilon.minosoft.render.Face; import com.google.gson.JsonArray; diff --git a/src/main/java/de/bixilon/minosoft/render/fullFace/RenderConstants.java b/src/main/java/de/bixilon/minosoft/render/Face/RenderConstants.java similarity index 98% rename from src/main/java/de/bixilon/minosoft/render/fullFace/RenderConstants.java rename to src/main/java/de/bixilon/minosoft/render/Face/RenderConstants.java index 6a849e45b..2c0189b6f 100644 --- a/src/main/java/de/bixilon/minosoft/render/fullFace/RenderConstants.java +++ b/src/main/java/de/bixilon/minosoft/render/Face/RenderConstants.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.fullFace; +package de.bixilon.minosoft.render.Face; public class RenderConstants { public static final int texturePackRes = 16; diff --git a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java index 5b2a85228..bad55179f 100644 --- a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java +++ b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java @@ -17,15 +17,15 @@ 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.render.Face.FaceOrientation; import de.bixilon.minosoft.render.blockModels.BlockModelLoader; import de.bixilon.minosoft.render.blockModels.Face; -import de.bixilon.minosoft.render.fullFace.FaceOrientation; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import static de.bixilon.minosoft.render.fullFace.RenderConstants.faceDir; +import static de.bixilon.minosoft.render.Face.RenderConstants.faceDir; import static org.lwjgl.opengl.GL11.*; public class WorldRenderer { diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java index 21664470c..fa1cb732a 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java @@ -17,7 +17,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import de.bixilon.minosoft.Config; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; -import de.bixilon.minosoft.render.fullFace.FaceOrientation; +import de.bixilon.minosoft.render.Face.FaceOrientation; +import de.bixilon.minosoft.render.blockModels.subBlocks.SubBlock; import de.bixilon.minosoft.render.texture.TextureLoader; import java.io.IOException; diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java index bb33a4b5c..a4258872c 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java @@ -19,7 +19,7 @@ import de.bixilon.minosoft.Config; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Blocks; import de.bixilon.minosoft.logging.Log; -import de.bixilon.minosoft.render.fullFace.FaceOrientation; +import de.bixilon.minosoft.render.Face.FaceOrientation; import de.bixilon.minosoft.render.texture.TextureLoader; import org.apache.commons.collections.primitives.ArrayFloatList; diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/Face.java b/src/main/java/de/bixilon/minosoft/render/blockModels/Face.java index c47250a35..9c470722d 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/Face.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/Face.java @@ -14,13 +14,14 @@ package de.bixilon.minosoft.render.blockModels; import de.bixilon.minosoft.game.datatypes.world.BlockPosition; +import de.bixilon.minosoft.render.Face.FaceOrientation; +import de.bixilon.minosoft.render.Face.InFaceUV; import de.bixilon.minosoft.render.MainWindow; -import de.bixilon.minosoft.render.fullFace.FaceOrientation; -import de.bixilon.minosoft.render.fullFace.InFaceUV; +import de.bixilon.minosoft.render.blockModels.subBlocks.SubBlock; import javafx.util.Pair; -import static de.bixilon.minosoft.render.fullFace.RenderConstants.blockRes; -import static de.bixilon.minosoft.render.fullFace.RenderConstants.texturePackRes; +import static de.bixilon.minosoft.render.Face.RenderConstants.blockRes; +import static de.bixilon.minosoft.render.Face.RenderConstants.texturePackRes; import static org.lwjgl.opengl.GL11.glTexCoord2f; import static org.lwjgl.opengl.GL11.glVertex3f; diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/SubBlock.java b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java similarity index 92% rename from src/main/java/de/bixilon/minosoft/render/blockModels/SubBlock.java rename to src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java index 2a198975e..ccb5db550 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/SubBlock.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java @@ -11,11 +11,12 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.blockModels; +package de.bixilon.minosoft.render.blockModels.subBlocks; import com.google.gson.JsonObject; -import de.bixilon.minosoft.render.fullFace.FaceOrientation; -import de.bixilon.minosoft.render.fullFace.InFaceUV; +import de.bixilon.minosoft.render.Face.FaceOrientation; +import de.bixilon.minosoft.render.Face.InFaceUV; +import de.bixilon.minosoft.render.blockModels.Face; import de.bixilon.minosoft.render.texture.TextureLoader; import javafx.util.Pair; @@ -24,6 +25,7 @@ import java.util.HashSet; import java.util.Map; public class SubBlock { + SubBlockRotation rotation; SubBlockPosition pos1; // the most negative Point of the SubBlock SubBlockPosition pos2; // the most positive Point of the SubBlock @@ -49,6 +51,9 @@ public class SubBlock { orientation, variables); } } + if (json.has("rotation")) { + rotation = new SubBlockRotation(json.get("rotation").getAsJsonObject()); + } isFull = (pos1.x == 0 && pos1.y == 0 && pos1.z == 0) && (pos2.x == 16 && pos2.y == 16 && pos2.z == 16); } diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/SubBlockPosition.java b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockPosition.java similarity index 72% rename from src/main/java/de/bixilon/minosoft/render/blockModels/SubBlockPosition.java rename to src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockPosition.java index c004c39ce..ad72a0d29 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/SubBlockPosition.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockPosition.java @@ -1,6 +1,6 @@ /* * Codename Minosoft - * Copyright (C) 2020 Moritz Zwerger + * Copyright (C) 2020 Lukas Eisenhauer * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -11,22 +11,16 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.blockModels; +package de.bixilon.minosoft.render.blockModels.subBlocks; import com.google.gson.JsonArray; public class SubBlockPosition { - int x, y, z; - - public SubBlockPosition(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } + float x, y, z; public SubBlockPosition(JsonArray json) { - x = json.get(0).getAsInt(); - y = json.get(1).getAsInt(); - z = json.get(2).getAsInt(); + x = json.get(0).getAsFloat(); + y = json.get(1).getAsFloat(); + z = json.get(2).getAsFloat(); } } diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java new file mode 100644 index 000000000..12945101c --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java @@ -0,0 +1,41 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.render.blockModels.subBlocks; + +import com.google.gson.JsonObject; +import de.bixilon.minosoft.render.Face.Axis; + +public class SubBlockRotation { + SubBlockPosition origin; + Axis direction; + float angle; + + public SubBlockRotation(JsonObject rotation) { + origin = new SubBlockPosition(rotation.get("origin").getAsJsonArray()); + String axis = rotation.get("axis").getAsString(); + switch (axis) { + case "x": + direction = Axis.X; + break; + case "y": + direction = Axis.Y; + break; + case "z": + direction = Axis.Z; + } + angle = rotation.get("angle").getAsFloat(); + } + + +} diff --git a/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java b/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java index f81937510..7d67fcef4 100644 --- a/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java +++ b/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java @@ -26,7 +26,7 @@ public class PlayerController { private final float playerWidth = 0.5f; CameraMovement cameraMovement; PlayerMovement playerMovement; - Vec3 playerPos = new Vec3(0, 1, 0); // the feet position of the player + Vec3 playerPos = new Vec3(); // the feet position of the player Vec3 playerVelocity = new Vec3(); float gravity = 9.81f; boolean onGround;