mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 11:24:56 -04:00
add support for fire
This commit is contained in:
parent
885357f0b1
commit
d7004942ad
@ -79,14 +79,14 @@ public class World {
|
|||||||
|
|
||||||
public void setChunk(ChunkLocation location, Chunk chunk) {
|
public void setChunk(ChunkLocation location, Chunk chunk) {
|
||||||
chunks.put(location, chunk);
|
chunks.put(location, chunk);
|
||||||
MainWindow.getRenderer().prepareChunk(location, chunk);
|
MainWindow.getRenderer().queueChunk(location, chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setChunks(HashMap<ChunkLocation, Chunk> chunkMap) {
|
public void setChunks(HashMap<ChunkLocation, Chunk> chunkMap) {
|
||||||
for (Map.Entry<ChunkLocation, Chunk> set : chunkMap.entrySet()) {
|
for (Map.Entry<ChunkLocation, Chunk> set : chunkMap.entrySet()) {
|
||||||
chunks.put(set.getKey(), set.getValue());
|
chunks.put(set.getKey(), set.getValue());
|
||||||
}
|
}
|
||||||
MainWindow.getRenderer().prepareChunkBulk(chunkMap);
|
MainWindow.getRenderer().queueChunkBulk(chunkMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHardcore() {
|
public boolean isHardcore() {
|
||||||
|
@ -20,10 +20,10 @@ import de.bixilon.minosoft.logging.Log;
|
|||||||
import de.bixilon.minosoft.render.blockModels.BlockModelLoader;
|
import de.bixilon.minosoft.render.blockModels.BlockModelLoader;
|
||||||
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 javafx.util.Pair;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.HashSet;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static de.bixilon.minosoft.render.blockModels.Face.RenderConstants.faceDir;
|
import static de.bixilon.minosoft.render.blockModels.Face.RenderConstants.faceDir;
|
||||||
import static org.lwjgl.opengl.GL11.*;
|
import static org.lwjgl.opengl.GL11.*;
|
||||||
@ -32,21 +32,41 @@ public class WorldRenderer {
|
|||||||
private final HashMap<BlockPosition, HashSet<Face>> faces;
|
private final HashMap<BlockPosition, HashSet<Face>> faces;
|
||||||
private BlockModelLoader modelLoader;
|
private BlockModelLoader modelLoader;
|
||||||
|
|
||||||
|
private LinkedBlockingQueue<Pair<ChunkLocation, Chunk>> queuedChunks;
|
||||||
|
Thread chunkLoadThread;
|
||||||
|
|
||||||
public WorldRenderer() {
|
public WorldRenderer() {
|
||||||
faces = new HashMap<>();
|
faces = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
|
queuedChunks = new LinkedBlockingQueue<>();
|
||||||
|
chunkLoadThread = new Thread(() -> {
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
Pair<ChunkLocation, Chunk> current = queuedChunks.take();
|
||||||
|
prepareChunk(current.getKey(), current.getValue());
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
chunkLoadThread.setName(String.format("%d/ChunkLoading", 0)); // TODO: connection ID
|
||||||
|
chunkLoadThread.start();
|
||||||
modelLoader = new BlockModelLoader();
|
modelLoader = new BlockModelLoader();
|
||||||
Log.info("Finished loading textures");
|
Log.info("Finished loading textures");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void prepareChunkBulk(HashMap<ChunkLocation, Chunk> chunks) {
|
public void queueChunkBulk(HashMap<ChunkLocation, Chunk> chunks) {
|
||||||
for (Map.Entry<ChunkLocation, Chunk> set : chunks.entrySet()) {
|
for (Map.Entry<ChunkLocation, Chunk> set : chunks.entrySet()) {
|
||||||
prepareChunk(set.getKey(), set.getValue());
|
queueChunk(set.getKey(), set.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void queueChunk(ChunkLocation location, Chunk chunk) {
|
||||||
|
queuedChunks.add(new Pair<>(location, chunk));
|
||||||
|
}
|
||||||
|
|
||||||
public void prepareChunk(ChunkLocation location, Chunk chunk) {
|
public void prepareChunk(ChunkLocation location, Chunk chunk) {
|
||||||
int xOffset = location.getX() * 16;
|
int xOffset = location.getX() * 16;
|
||||||
int zOffset = location.getZ() * 16;
|
int zOffset = location.getZ() * 16;
|
||||||
@ -61,8 +81,9 @@ public class WorldRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void prepareBlock(BlockPosition position, Block block) {
|
public void prepareBlock(BlockPosition position, Block block) {
|
||||||
if (block.equals(Blocks.nullBlock))
|
if (block.equals(Blocks.nullBlock)) {
|
||||||
faces.put(position, null);
|
faces.put(position, null);
|
||||||
|
}
|
||||||
HashMap<FaceOrientation, Boolean> adjacentBlocks = new HashMap<>();
|
HashMap<FaceOrientation, Boolean> adjacentBlocks = new HashMap<>();
|
||||||
|
|
||||||
for (FaceOrientation orientation : FaceOrientation.values()) {
|
for (FaceOrientation orientation : FaceOrientation.values()) {
|
||||||
|
@ -134,7 +134,7 @@ public class BlockModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyConfigurationTextures(HashSet<SubBlock> subBlocks, String mod, TextureLoader loader) {
|
public static void applyConfigurationTextures(HashSet<SubBlock> subBlocks, String mod, TextureLoader loader) {
|
||||||
for (SubBlock subBlock : subBlocks) {
|
for (SubBlock subBlock : subBlocks) {
|
||||||
subBlock.applyTextures(mod, loader);
|
subBlock.applyTextures(mod, loader);
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,9 @@ 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.blockModels.subBlocks.SubBlock;
|
import de.bixilon.minosoft.render.blockModels.subBlocks.SubBlock;
|
||||||
|
import de.bixilon.minosoft.render.texture.TextureLoader;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
@ -74,4 +76,28 @@ public class FireModel extends BlockModel {
|
|||||||
public boolean isFull() {
|
public boolean isFull() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashSet<String> getAllTextures() {
|
||||||
|
HashSet<String> result = new HashSet<>();
|
||||||
|
result.addAll(getTextures(floor));
|
||||||
|
result.addAll(getTextures(side));
|
||||||
|
result.addAll(getTextures(up));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HashSet<String> getTextures(HashSet<SubBlock> subBlocks) {
|
||||||
|
HashSet<String> result = new HashSet<>();
|
||||||
|
for (SubBlock subBlock : subBlocks) {
|
||||||
|
result.addAll(subBlock.getTextures());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyTextures(String mod, TextureLoader loader) {
|
||||||
|
applyConfigurationTextures(floor, mod, loader);
|
||||||
|
applyConfigurationTextures(side, mod, loader);
|
||||||
|
applyConfigurationTextures(up, mod, loader);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,8 @@ public class SubBlock {
|
|||||||
public HashSet<Face> getFacesSimple(BlockRotation rotation) {
|
public HashSet<Face> getFacesSimple(BlockRotation rotation) {
|
||||||
HashSet<Face> result = new HashSet<>();
|
HashSet<Face> result = new HashSet<>();
|
||||||
for (FaceOrientation orientation : FaceOrientation.values()) {
|
for (FaceOrientation orientation : FaceOrientation.values()) {
|
||||||
result.add(prepareFace(orientation, rotation, new HashMap<>()));
|
result.add(new Face(textureCoordinates.get(orientation), uv.get(orientation),
|
||||||
|
cuboid.getFacePositions(orientation, rotation)));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -445,38 +445,6 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sticky_piston": {
|
|
||||||
"states": [
|
|
||||||
{
|
|
||||||
"properties": {
|
|
||||||
"extended": "true"
|
|
||||||
},
|
|
||||||
"blockModel": "piston_extended"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"properties": {
|
|
||||||
"extended": "false"
|
|
||||||
},
|
|
||||||
"blockModel": "sticky_piston"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"piston": {
|
|
||||||
"states": [
|
|
||||||
{
|
|
||||||
"properties": {
|
|
||||||
"extended": "true"
|
|
||||||
},
|
|
||||||
"blockModel": "piston_extended"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"properties": {
|
|
||||||
"extended": "false"
|
|
||||||
},
|
|
||||||
"blockModel": "piston"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"cobweb": {
|
"cobweb": {
|
||||||
"blockModel": "cobweb"
|
"blockModel": "cobweb"
|
||||||
},
|
},
|
||||||
@ -662,11 +630,43 @@
|
|||||||
},
|
},
|
||||||
"fire": {
|
"fire": {
|
||||||
"type": "fire",
|
"type": "fire",
|
||||||
"floor": "fire_floor_0",
|
"floor": "fire_floor0",
|
||||||
"side": "fire_side0",
|
"side": "fire_side0",
|
||||||
"up": "fire_up_0"
|
"up": "fire_up0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sticky_piston": {
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"extended": "true"
|
||||||
|
},
|
||||||
|
"blockModel": "piston_extended"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"extended": "false"
|
||||||
|
},
|
||||||
|
"blockModel": "sticky_piston"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"piston": {
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"extended": "true"
|
||||||
|
},
|
||||||
|
"blockModel": "piston_extended"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"extended": "false"
|
||||||
|
},
|
||||||
|
"blockModel": "piston"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"tinted_textures": {
|
"tinted_textures": {
|
||||||
"block/grass_block_top": [0,1,0],
|
"block/grass_block_top": [0,1,0],
|
||||||
"block/grass": [0,1,0]
|
"block/grass": [0,1,0]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user