added support for rotated textures

This commit is contained in:
Lukas 2020-08-19 17:24:59 +02:00
parent ac8e57c3d4
commit cbf73f02d1
6 changed files with 171 additions and 14 deletions

View File

@ -63,8 +63,6 @@ public class MainWindow {
float mouseY = (float) openGLWindow.getMouseY();
switch (renderMode) {
case MAIN_MENU:
if (glfwGetKey(openGLWindow.getWindow(), GLFW_KEY_ESCAPE) == GLFW_PRESS)
close();
glOrtho(0.f, openGLWindow.getWidth(), openGLWindow.getHeight(), 0.f, 0.f, 1.f);
mainMenu.draw(mouseX, mouseY);
break;
@ -109,10 +107,6 @@ public class MainWindow {
return connection;
}
public static void close() {
//System.exit(0);
}
public static PlayerController getPlayerController() {
return playerController;
}

View File

@ -19,13 +19,15 @@ import de.bixilon.minosoft.render.texture.InFaceUV;
import javafx.util.Pair;
public class Face {
int textureRotation;
SubBlockPosition[] positions;
InFaceUV uv;
public Face(Pair<Float, Float> texture, InFaceUV uv, SubBlockPosition[] facePositions) {
public Face(Pair<Float, Float> texture, InFaceUV uv, SubBlockPosition[] facePositions, int textureRotation) {
positions = facePositions;
this.uv = uv;
this.uv.prepare(texture);
this.textureRotation = textureRotation;
}
public Face() {
@ -34,7 +36,7 @@ public class Face {
public void draw(BlockPosition pos) {
for (int i = 0; i < positions.length; i++) {
uv.draw(i);
uv.draw(i + textureRotation);
positions[i].draw(pos);
}
}

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.render.blockModels.subBlocks;
import com.google.gson.JsonObject;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.BlockProperties;
import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.BlockRotation;
import de.bixilon.minosoft.render.blockModels.Face.Face;
import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation;
@ -112,17 +113,78 @@ public class SubBlock {
continue;
}
if (block.getRotation().equals(BlockRotation.DOWN)) {
if (orientation.equals(FaceOrientation.UP)) {
result.add(prepareFace(FaceOrientation.DOWN, orientation,
adjacentBlocks));
continue;
}
if (orientation.equals(FaceOrientation.DOWN)) {
result.add(prepareFace(FaceOrientation.DOWN, FaceOrientation.UP,
result.add(prepareFace(FaceOrientation.UP, orientation,
adjacentBlocks));
continue;
}
} else if (block.getProperties().contains(BlockProperties.AXIS_X)) {
if (orientation.equals(FaceOrientation.EAST)) {
result.add(prepareFace(FaceOrientation.UP, orientation,
adjacentBlocks));
continue;
}
if (orientation.equals(FaceOrientation.WEST)) {
result.add(prepareFace(FaceOrientation.DOWN, orientation,
adjacentBlocks));
continue;
}
if (orientation.equals(FaceOrientation.UP)) {
result.add(prepareFace(FaceOrientation.UP, FaceOrientation.DOWN,
result.add(prepareFace(FaceOrientation.EAST, orientation,
adjacentBlocks, 1));
continue;
}
if (orientation.equals(FaceOrientation.DOWN)) {
result.add(prepareFace(FaceOrientation.WEST, orientation,
adjacentBlocks, 1));
continue;
}
if (orientation.equals(FaceOrientation.NORTH)) {
result.add(prepareFace(orientation, orientation,
adjacentBlocks, 1));
continue;
}
if (orientation.equals(FaceOrientation.SOUTH)) {
result.add(prepareFace(orientation, orientation,
adjacentBlocks, 1));
continue;
}
} else if (block.getProperties().contains(BlockProperties.AXIS_Z)) {
if (orientation.equals(FaceOrientation.EAST)) {
result.add(prepareFace(orientation, orientation,
adjacentBlocks, 1));
continue;
}
if (orientation.equals(FaceOrientation.WEST)) {
result.add(prepareFace(orientation, orientation,
adjacentBlocks, 1));
continue;
}
if (orientation.equals(FaceOrientation.UP)) {
result.add(prepareFace(FaceOrientation.EAST, orientation,
adjacentBlocks));
continue;
}
if (orientation.equals(FaceOrientation.DOWN)) {
result.add(prepareFace(FaceOrientation.WEST, orientation,
adjacentBlocks));
continue;
}
if (orientation.equals(FaceOrientation.NORTH)) {
result.add(prepareFace(FaceOrientation.UP, orientation,
adjacentBlocks));
continue;
}
if (orientation.equals(FaceOrientation.SOUTH)) {
result.add(prepareFace(FaceOrientation.DOWN, orientation,
adjacentBlocks));
continue;
}
}
result.add(prepareFace(orientation, orientation, adjacentBlocks));
}
@ -130,12 +192,18 @@ public class SubBlock {
}
private Face prepareFace(FaceOrientation textureDirection, FaceOrientation faceDirection,
HashMap<FaceOrientation, Boolean> adjacentBlocks) {
HashMap<FaceOrientation, Boolean> adjacentBlocks, int textureRotation) {
if (adjacentBlocks.get(faceDirection) && !cullFaceTextures.get(faceDirection)) {
return new Face();
}
return new Face(textureCoordinates.get(textureDirection), uv.get(textureDirection),
cuboid.getFacePositions(faceDirection));
cuboid.getFacePositions(faceDirection), textureRotation);
}
private Face prepareFace(FaceOrientation textureDirection, FaceOrientation faceDirection,
HashMap<FaceOrientation, Boolean> adjacentBlocks) {
return prepareFace(textureDirection, faceDirection,
adjacentBlocks, 0);
}
public boolean isFull() {

View File

@ -47,6 +47,9 @@ public class InFaceUV {
}
public void draw(int i) {
if (i > 3) {
i -= 4;
}
switch (i) {
case 0:
glTexCoord2f(realU1, realV1);

View File

@ -31,6 +31,7 @@
"gold_ore": "regular",
"iron_ore": "regular",
"coal_ore": "regular",
"oak_log": "regular",
"spruce_log": "regular",
"birch_log": "regular",
"jungle_log": "regular",
@ -109,7 +110,96 @@
"poppy": "regular",
"blue_orchid": "regular",
"allium": "regular",
"azure_bluet": "regular"
"azure_bluet": "regular",
"red_tulip": "regular",
"orange_tulip": "regular",
"white_tulip": "regular",
"pink_tulip": "regular",
"oxeye_daisy": "regular",
"brown_mushroom": "regular",
"red_mushroom": "regular",
"gold_block": "regular",
"iron_block": "regular",
"stone_slab": {
"else": "stone_slab",
"top": "stone_slab_top",
"bottom": "stone_slab",
"double": "stone"
},
"sandstone_slab": {
"else": "sandstone_slab",
"top": "sandstone_slab_top",
"bottom": "sandstone_slab",
"double": "sandstone"
},
"oak_slab": {
"else": "oak_slab",
"top": "oak_slab_top",
"bottom": "oak_slab",
"double": "oak_planks"
},
"spruce_slab": {
"else": "spruce_slab",
"top": "spruce_slab_top",
"bottom": "spruce_slab",
"double": "spruce_planks"
},
"birch_slab": {
"else": "birch_slab",
"top": "birch_slab_top",
"bottom": "birch_slab",
"double": "birch_planks"
},
"acacia_slab": {
"else": "acacia_slab",
"top": "acacia_slab_top",
"bottom": "acacia_slab",
"double": "acacia_planks"
},
"dark_oak_slab": {
"else": "dark_oak_slab",
"top": "dark_oak_slab_top",
"bottom": "dark_oak_slab",
"double": "dark_oak_planks"
},
"cobblestone_slab": {
"else": "cobblestone_slab",
"top": "cobblestone_slab_top",
"bottom": "cobblestone_slab",
"double": "cobblestone"
},
"brick_slab": {
"else": "brick_slab",
"top": "brick_slab_top",
"bottom": "brick_slab",
"double": "bricks"
},
"stone_brick_slab": {
"else": "stone_brick_slab",
"top": "stone_brick_slab_top",
"bottom": "stone_brick_slab",
"double": "stone_bricks"
},
"nether_brick_slab": {
"else": "nether_brick_slab",
"top": "nether_brick_slab_top",
"bottom": "nether_brick_slab",
"double": "nether_bricks"
},
"quartz_slab": {
"else": "quartz_slab",
"top": "quartz_slab_top",
"bottom": "quartz_slab",
"double": "quartz_block"
},
"bricks": "regular",
"tnt": "regular",
"bookshelf": "regular",
"mossy_cobblestone": "regular",
"obsidian": "regular",
"torch": "regular",
"wall_torch": "regular",
"spawner": "regular"
},
"tinted_textures": {
"block/grass_block_top": [0,1,0],