diff --git a/src/main/java/electrosphere/client/fluid/cache/FluidChunkData.java b/src/main/java/electrosphere/client/fluid/cache/FluidChunkData.java index 56dd3045..f8c9cf7b 100644 --- a/src/main/java/electrosphere/client/fluid/cache/FluidChunkData.java +++ b/src/main/java/electrosphere/client/fluid/cache/FluidChunkData.java @@ -2,6 +2,7 @@ package electrosphere.client.fluid.cache; import org.joml.Vector3i; +import electrosphere.server.fluid.manager.ServerFluidChunk; import electrosphere.server.terrain.manager.ServerTerrainChunk; /** @@ -10,7 +11,7 @@ import electrosphere.server.terrain.manager.ServerTerrainChunk; public class FluidChunkData { //The size of a chunk in virtual data - public static final int CHUNK_SIZE = ServerTerrainChunk.CHUNK_DIMENSION; + public static final int CHUNK_SIZE = ServerFluidChunk.BUFFER_DIM; //The size of the data passed into marching cubes/transvoxel algorithm to get a fully connected and seamless chunk public static final int CHUNK_DATA_GENERATOR_SIZE = ServerTerrainChunk.CHUNK_DATA_GENERATOR_SIZE; diff --git a/src/main/java/electrosphere/client/fluid/manager/ClientFluidManager.java b/src/main/java/electrosphere/client/fluid/manager/ClientFluidManager.java index cd8fe104..504ceebc 100644 --- a/src/main/java/electrosphere/client/fluid/manager/ClientFluidManager.java +++ b/src/main/java/electrosphere/client/fluid/manager/ClientFluidManager.java @@ -64,7 +64,7 @@ public class ClientFluidManager { switch(message.getMessageSubtype()){ case SENDFLUIDDATA: { ByteBuffer buffer = ByteBuffer.wrap(message.getchunkData()); - FluidChunkData data = parseFluidDataBuffer(buffer); + FluidChunkData data = this.parseFluidDataBuffer(buffer); fluidCache.addChunkDataToCache( message.getworldX(), message.getworldY(), message.getworldZ(), data @@ -72,7 +72,7 @@ public class ClientFluidManager { } break; case UPDATEFLUIDDATA: { ByteBuffer buffer = ByteBuffer.wrap(message.getchunkData()); - FluidChunkData data = parseFluidDataBuffer(buffer); + FluidChunkData data = this.parseFluidDataBuffer(buffer); fluidCache.addChunkDataToCache( message.getworldX(), message.getworldY(), message.getworldZ(), data diff --git a/src/main/java/electrosphere/net/server/protocol/TerrainProtocol.java b/src/main/java/electrosphere/net/server/protocol/TerrainProtocol.java index 79056200..4ad890c5 100644 --- a/src/main/java/electrosphere/net/server/protocol/TerrainProtocol.java +++ b/src/main/java/electrosphere/net/server/protocol/TerrainProtocol.java @@ -396,41 +396,36 @@ public class TerrainProtocol implements ServerProtocolTemplate { * @return the buffer */ public static ByteBuffer constructFluidByteBuffer(ServerFluidChunk chunk){ - //The length along each access of the chunk data. Typically, should be at least 17. - //Because CHUNK_SIZE is 16, 17 adds the necessary extra value. Each chunk needs the value of the immediately following position to generate - //chunk data that connects seamlessly to the next chunk. - int dataLength = chunk.getWeights().limit(); - - ByteBuffer buffer = ByteBuffer.allocate(dataLength*(4+4+4+4)); + ByteBuffer buffer = ByteBuffer.allocate(ServerFluidChunk.BUFFER_SIZE*(4+4+4+4)); FloatBuffer floatView = buffer.asFloatBuffer(); - for(int x = 0; x < ServerTerrainChunk.CHUNK_DIMENSION; x++){ - for(int y = 0; y < ServerTerrainChunk.CHUNK_DIMENSION; y++){ - for(int z = 0; z < ServerTerrainChunk.CHUNK_DIMENSION; z++){ + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int y = 0; y < ServerFluidChunk.BUFFER_DIM; y++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ floatView.put(chunk.getWeight(x, y, z)); } } } - for(int x = 0; x < ServerTerrainChunk.CHUNK_DIMENSION; x++){ - for(int y = 0; y < ServerTerrainChunk.CHUNK_DIMENSION; y++){ - for(int z = 0; z < ServerTerrainChunk.CHUNK_DIMENSION; z++){ + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int y = 0; y < ServerFluidChunk.BUFFER_DIM; y++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ floatView.put(chunk.getVelocityX(x, y, z)); } } } - for(int x = 0; x < ServerTerrainChunk.CHUNK_DIMENSION; x++){ - for(int y = 0; y < ServerTerrainChunk.CHUNK_DIMENSION; y++){ - for(int z = 0; z < ServerTerrainChunk.CHUNK_DIMENSION; z++){ + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int y = 0; y < ServerFluidChunk.BUFFER_DIM; y++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ floatView.put(chunk.getVelocityY(x, y, z)); } } } - for(int x = 0; x < ServerTerrainChunk.CHUNK_DIMENSION; x++){ - for(int y = 0; y < ServerTerrainChunk.CHUNK_DIMENSION; y++){ - for(int z = 0; z < ServerTerrainChunk.CHUNK_DIMENSION; z++){ + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int y = 0; y < ServerFluidChunk.BUFFER_DIM; y++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ floatView.put(chunk.getVelocityZ(x, y, z)); } } diff --git a/src/main/java/electrosphere/server/fluid/diskmap/FluidDiskMap.java b/src/main/java/electrosphere/server/fluid/diskmap/FluidDiskMap.java index fee635c6..dbcb31db 100644 --- a/src/main/java/electrosphere/server/fluid/diskmap/FluidDiskMap.java +++ b/src/main/java/electrosphere/server/fluid/diskmap/FluidDiskMap.java @@ -104,7 +104,7 @@ public class FluidDiskMap { if(rawData != null){ ByteBuffer buffer = ByteBuffer.wrap(rawData); FloatBuffer floatView = buffer.asFloatBuffer(); - int DIM = ServerTerrainChunk.CHUNK_DIMENSION; + int DIM = ServerFluidChunk.BUFFER_DIM; rVal = new ServerFluidChunk(worldX, worldY, worldZ); for(int x = 0; x < DIM; x++){ for(int y = 0; y < DIM; y++){ diff --git a/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java b/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java index 01fc8974..bf496374 100644 --- a/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java +++ b/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java @@ -27,10 +27,15 @@ public class ServerFluidChunk { */ static final int CENTER_BUFF = 13; + /** + * Dimension of a fluid buffer + */ + public static final int BUFFER_DIM = 18; + /** * Size of a fluid buffer */ - static final int BUFFER_SIZE = ServerTerrainChunk.CHUNK_DIMENSION * ServerTerrainChunk.CHUNK_DIMENSION * ServerTerrainChunk.CHUNK_DIMENSION; + public static final int BUFFER_SIZE = ServerFluidChunk.BUFFER_DIM * ServerFluidChunk.BUFFER_DIM * ServerFluidChunk.BUFFER_DIM; /**