added support for vertically flipped blocks

This commit is contained in:
Lukas 2020-08-18 22:40:33 +02:00
parent 54cfc33eca
commit ac8e57c3d4
3 changed files with 31 additions and 7 deletions

View File

@ -23,6 +23,7 @@ public class BlockConfiguration {
BlockRotation rotation; BlockRotation rotation;
HashSet<BlockProperties> blockProperties; HashSet<BlockProperties> blockProperties;
public BlockConfiguration(String config) { public BlockConfiguration(String config) {
blockProperties = new HashSet<>(); blockProperties = new HashSet<>();
for (String configuration : config.split(",")) { for (String configuration : config.split(",")) {

View File

@ -14,7 +14,6 @@
package de.bixilon.minosoft.render.blockModels.Face; package de.bixilon.minosoft.render.blockModels.Face;
import de.bixilon.minosoft.game.datatypes.world.BlockPosition; import de.bixilon.minosoft.game.datatypes.world.BlockPosition;
import de.bixilon.minosoft.render.blockModels.subBlocks.Cuboid;
import de.bixilon.minosoft.render.blockModels.subBlocks.SubBlockPosition; import de.bixilon.minosoft.render.blockModels.subBlocks.SubBlockPosition;
import de.bixilon.minosoft.render.texture.InFaceUV; import de.bixilon.minosoft.render.texture.InFaceUV;
import javafx.util.Pair; import javafx.util.Pair;
@ -23,14 +22,18 @@ public class Face {
SubBlockPosition[] positions; SubBlockPosition[] positions;
InFaceUV uv; InFaceUV uv;
public Face(FaceOrientation orientation, Pair<Float, Float> texture, InFaceUV uv, Cuboid cuboid) { public Face(Pair<Float, Float> texture, InFaceUV uv, SubBlockPosition[] facePositions) {
positions = cuboid.getFacePositions(orientation); positions = facePositions;
this.uv = uv; this.uv = uv;
this.uv.prepare(texture); this.uv.prepare(texture);
} }
public Face() {
positions = new SubBlockPosition[]{};
}
public void draw(BlockPosition pos) { public void draw(BlockPosition pos) {
for (int i = 0; i < 4; i++) { for (int i = 0; i < positions.length; i++) {
uv.draw(i); uv.draw(i);
positions[i].draw(pos); positions[i].draw(pos);
} }

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.render.blockModels.subBlocks;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.BlockRotation;
import de.bixilon.minosoft.render.blockModels.Face.Face; import de.bixilon.minosoft.render.blockModels.Face.Face;
import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation;
import de.bixilon.minosoft.render.texture.InFaceUV; import de.bixilon.minosoft.render.texture.InFaceUV;
@ -110,14 +111,33 @@ public class SubBlock {
if (!textureCoordinates.containsKey(orientation)) { if (!textureCoordinates.containsKey(orientation)) {
continue; continue;
} }
if (!(adjacentBlocks.get(orientation) && cullFaceTextures.get(orientation))) { if (block.getRotation().equals(BlockRotation.DOWN)) {
result.add(new Face(orientation, textureCoordinates.get(orientation), if (orientation.equals(FaceOrientation.DOWN)) {
uv.get(orientation), cuboid)); result.add(prepareFace(FaceOrientation.DOWN, FaceOrientation.UP,
adjacentBlocks));
continue;
} }
if (orientation.equals(FaceOrientation.UP)) {
result.add(prepareFace(FaceOrientation.UP, FaceOrientation.DOWN,
adjacentBlocks));
continue;
}
}
result.add(prepareFace(orientation, orientation, adjacentBlocks));
} }
return result; return result;
} }
private Face prepareFace(FaceOrientation textureDirection, FaceOrientation faceDirection,
HashMap<FaceOrientation, Boolean> adjacentBlocks) {
if (adjacentBlocks.get(faceDirection) && !cullFaceTextures.get(faceDirection)) {
return new Face();
}
return new Face(textureCoordinates.get(textureDirection), uv.get(textureDirection),
cuboid.getFacePositions(faceDirection));
}
public boolean isFull() { public boolean isFull() {
return isFull; return isFull;
} }