homogenous fluid chunk work
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
c473805510
commit
391a727709
@ -1,3 +1,3 @@
|
|||||||
#maven.buildNumber.plugin properties file
|
#maven.buildNumber.plugin properties file
|
||||||
#Sun Dec 01 16:56:17 EST 2024
|
#Sun Dec 01 17:42:04 EST 2024
|
||||||
buildNumber=480
|
buildNumber=481
|
||||||
|
|||||||
@ -1211,6 +1211,7 @@ Fix fluid sim null pointer bug with unallocated chunks
|
|||||||
Fix fluid sim NP bug with skipped chunks
|
Fix fluid sim NP bug with skipped chunks
|
||||||
Fix fluid chunk indexing from java side
|
Fix fluid chunk indexing from java side
|
||||||
Memory pooling for chunk buffer allocations
|
Memory pooling for chunk buffer allocations
|
||||||
|
Server homogenous fluid chunk declarations
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -58,25 +58,26 @@ public class FluidChunkData {
|
|||||||
*/
|
*/
|
||||||
public ByteBuffer bVelocityZ = null;
|
public ByteBuffer bVelocityZ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tracks whether this is homogenous or not
|
||||||
|
*/
|
||||||
|
boolean homogenous = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates the buffers for this chunk
|
||||||
|
*/
|
||||||
|
private native void allocate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frees all native memory
|
||||||
|
*/
|
||||||
|
private native void free();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
public FluidChunkData(){
|
public FluidChunkData(){
|
||||||
//allocate buffers
|
|
||||||
this.allocate();
|
|
||||||
|
|
||||||
//reorder
|
|
||||||
this.bWeights.order(ByteOrder.LITTLE_ENDIAN);
|
|
||||||
this.bVelocityX.order(ByteOrder.LITTLE_ENDIAN);
|
|
||||||
this.bVelocityY.order(ByteOrder.LITTLE_ENDIAN);
|
|
||||||
this.bVelocityZ.order(ByteOrder.LITTLE_ENDIAN);
|
|
||||||
|
|
||||||
//get float view
|
|
||||||
this.weights = this.bWeights.asFloatBuffer();
|
|
||||||
this.velocityX = this.bVelocityX.asFloatBuffer();
|
|
||||||
this.velocityY = this.bVelocityY.asFloatBuffer();
|
|
||||||
this.velocityZ = this.bVelocityZ.asFloatBuffer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -175,16 +176,6 @@ public class FluidChunkData {
|
|||||||
velocityZ.put(this.IX(x,y,z),vel);
|
velocityZ.put(this.IX(x,y,z),vel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates the buffers for this chunk
|
|
||||||
*/
|
|
||||||
private native void allocate();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Frees all native memory
|
|
||||||
*/
|
|
||||||
private native void free();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frees the buffers contained within this chunk
|
* Frees the buffers contained within this chunk
|
||||||
*/
|
*/
|
||||||
@ -192,4 +183,41 @@ public class FluidChunkData {
|
|||||||
this.free();
|
this.free();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates the buffers for this data
|
||||||
|
*/
|
||||||
|
public void allocateBuffs(){
|
||||||
|
this.allocate();
|
||||||
|
|
||||||
|
//reorder
|
||||||
|
this.bWeights.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
this.bVelocityX.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
this.bVelocityY.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
this.bVelocityZ.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
|
||||||
|
//get float view
|
||||||
|
this.weights = this.bWeights.asFloatBuffer();
|
||||||
|
this.velocityX = this.bVelocityX.asFloatBuffer();
|
||||||
|
this.velocityY = this.bVelocityY.asFloatBuffer();
|
||||||
|
this.velocityZ = this.bVelocityZ.asFloatBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether this chunk is homogenous or not
|
||||||
|
* @return true if it is homogenous, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean isHomogenous() {
|
||||||
|
return homogenous;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether this chunk is homogenous or not
|
||||||
|
* @param homogenous true if it is homogenous, false otherwise
|
||||||
|
*/
|
||||||
|
public void setHomogenous(boolean homogenous) {
|
||||||
|
this.homogenous = homogenous;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -110,156 +110,158 @@ public class FluidCell {
|
|||||||
//
|
//
|
||||||
//main chunk
|
//main chunk
|
||||||
FluidChunkData currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos);
|
FluidChunkData currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos);
|
||||||
for(int x = ServerFluidChunk.TRUE_DATA_OFFSET; x < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; x++){
|
if(!currentChunk.isHomogenous()){
|
||||||
for(int y = ServerFluidChunk.TRUE_DATA_OFFSET; y < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; y++){
|
for(int x = ServerFluidChunk.TRUE_DATA_OFFSET; x < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; x++){
|
||||||
for(int z = ServerFluidChunk.TRUE_DATA_OFFSET; z < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; z++){
|
for(int y = ServerFluidChunk.TRUE_DATA_OFFSET; y < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; y++){
|
||||||
weights[x][y][z] = currentChunk.getWeight(x,y,z);
|
for(int z = ServerFluidChunk.TRUE_DATA_OFFSET; z < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; z++){
|
||||||
}
|
weights[x][y][z] = currentChunk.getWeight(x,y,z);
|
||||||
}
|
|
||||||
}
|
|
||||||
//face X
|
|
||||||
if(worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
|
||||||
currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z);
|
|
||||||
if(currentChunk != null){
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = currentChunk.getWeight(0, i, j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//face Y
|
|
||||||
if(worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
|
||||||
currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z);
|
|
||||||
if(currentChunk != null){
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = currentChunk.getWeight(i, 0, j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//face Z
|
|
||||||
if(worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
|
||||||
currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z + 1);
|
|
||||||
if(currentChunk != null){
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, j, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//edge X-Y
|
|
||||||
if(
|
|
||||||
worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
){
|
|
||||||
currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z);
|
|
||||||
if(currentChunk != null){
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = currentChunk.getWeight(0, 0, i);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//edge X-Z
|
|
||||||
if(
|
|
||||||
worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
){
|
|
||||||
currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z + 1);
|
|
||||||
if(currentChunk != null){
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, i, 0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//edge Y-Z
|
|
||||||
if(
|
|
||||||
worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
){
|
|
||||||
currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z + 1);
|
|
||||||
if(currentChunk != null){
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, 0, 0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(
|
|
||||||
worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
){
|
|
||||||
currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z + 1);
|
|
||||||
if(currentChunk != null){
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, 0, 0);
|
|
||||||
} else {
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
}
|
}
|
||||||
|
// //face X
|
||||||
|
// if(worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
||||||
|
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z);
|
||||||
|
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = currentChunk.getWeight(0, i, j);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// //face Y
|
||||||
|
// if(worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
||||||
|
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z);
|
||||||
|
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = currentChunk.getWeight(i, 0, j);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// //face Z
|
||||||
|
// if(worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
||||||
|
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z + 1);
|
||||||
|
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, j, 0);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
||||||
|
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// //edge X-Y
|
||||||
|
// if(
|
||||||
|
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||||
|
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||||
|
// ){
|
||||||
|
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z);
|
||||||
|
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = currentChunk.getWeight(0, 0, i);
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// //edge X-Z
|
||||||
|
// if(
|
||||||
|
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||||
|
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||||
|
// ){
|
||||||
|
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z + 1);
|
||||||
|
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, i, 0);
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// //edge Y-Z
|
||||||
|
// if(
|
||||||
|
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||||
|
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||||
|
// ){
|
||||||
|
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z + 1);
|
||||||
|
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, 0, 0);
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
||||||
|
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if(
|
||||||
|
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||||
|
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||||
|
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
||||||
|
// ){
|
||||||
|
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z + 1);
|
||||||
|
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, 0, 0);
|
||||||
|
// } else {
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
||||||
|
// }
|
||||||
|
|
||||||
//now set neighboring air weights based on nearby fluid count
|
//now set neighboring air weights based on nearby fluid count
|
||||||
//idea being that we dont have the snapping behavior from iso surface jumping from -1->0.01
|
//idea being that we dont have the snapping behavior from iso surface jumping from -1->0.01
|
||||||
|
|||||||
@ -191,7 +191,7 @@ public class FluidCellManager {
|
|||||||
if(updateable.size() > 0){
|
if(updateable.size() > 0){
|
||||||
String targetKey = updateable.iterator().next();
|
String targetKey = updateable.iterator().next();
|
||||||
updateable.remove(targetKey);
|
updateable.remove(targetKey);
|
||||||
Vector3i worldPos = getVectorFromKey(targetKey);
|
Vector3i worldPos = this.getVectorFromKey(targetKey);
|
||||||
if(
|
if(
|
||||||
worldPos.x >= 0 &&
|
worldPos.x >= 0 &&
|
||||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||||
@ -208,8 +208,10 @@ public class FluidCellManager {
|
|||||||
// while(commonWorldData.getDynamicInterpolationRatio() % stride != 0){
|
// while(commonWorldData.getDynamicInterpolationRatio() % stride != 0){
|
||||||
// stride = stride + 1;
|
// stride = stride + 1;
|
||||||
// }
|
// }
|
||||||
keyCellMap.get(targetKey).destroy();
|
if(keyCellMap.get(targetKey) != null){
|
||||||
keyCellMap.get(targetKey).generateDrawableEntity();
|
keyCellMap.get(targetKey).destroy();
|
||||||
|
keyCellMap.get(targetKey).generateDrawableEntity();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
drawable.add(targetKey);
|
drawable.add(targetKey);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import electrosphere.logger.LoggerInterface;
|
|||||||
import electrosphere.net.parser.net.message.TerrainMessage;
|
import electrosphere.net.parser.net.message.TerrainMessage;
|
||||||
import electrosphere.renderer.meshgen.FluidChunkModelGeneration;
|
import electrosphere.renderer.meshgen.FluidChunkModelGeneration;
|
||||||
import electrosphere.renderer.model.Model;
|
import electrosphere.renderer.model.Model;
|
||||||
|
import electrosphere.server.fluid.manager.ServerFluidChunk;
|
||||||
import electrosphere.server.terrain.manager.ServerTerrainManager;
|
import electrosphere.server.terrain.manager.ServerTerrainManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -179,38 +180,44 @@ public class ClientFluidManager {
|
|||||||
private FluidChunkData parseFluidDataBuffer(ByteBuffer buffer){
|
private FluidChunkData parseFluidDataBuffer(ByteBuffer buffer){
|
||||||
FluidChunkData data = new FluidChunkData();
|
FluidChunkData data = new FluidChunkData();
|
||||||
FloatBuffer floatBuffer = buffer.asFloatBuffer();
|
FloatBuffer floatBuffer = buffer.asFloatBuffer();
|
||||||
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
float homogenous = buffer.getFloat();
|
||||||
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
if(homogenous == ServerFluidChunk.IS_HOMOGENOUS){
|
||||||
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
data.setHomogenous(true);
|
||||||
data.setWeight(x,y,z,floatBuffer.get());
|
} else {
|
||||||
if(data.getWeight(x, y, z) <= 0){
|
data.setHomogenous(false);
|
||||||
data.setWeight(x, y, z, FluidCell.ISO_SURFACE_EMPTY);
|
data.allocateBuffs();
|
||||||
|
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
||||||
|
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
||||||
|
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
||||||
|
data.setWeight(x,y,z,floatBuffer.get());
|
||||||
|
if(data.getWeight(x, y, z) <= 0){
|
||||||
|
data.setWeight(x, y, z, FluidCell.ISO_SURFACE_EMPTY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
||||||
|
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
||||||
|
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
||||||
|
data.setVelocityX(x, y, z, floatBuffer.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
||||||
|
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
||||||
|
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
||||||
|
data.setVelocityY(x, y, z, floatBuffer.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
||||||
|
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
||||||
|
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
||||||
|
data.setVelocityZ(x, y, z, floatBuffer.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
|
||||||
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
|
||||||
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
|
||||||
data.setVelocityX(x, y, z, floatBuffer.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
|
||||||
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
|
||||||
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
|
||||||
data.setVelocityY(x, y, z, floatBuffer.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int x = 0; x < FluidChunkData.CHUNK_SIZE; x++){
|
|
||||||
for(int y = 0; y < FluidChunkData.CHUNK_SIZE; y++){
|
|
||||||
for(int z = 0; z < FluidChunkData.CHUNK_SIZE; z++){
|
|
||||||
data.setVelocityZ(x, y, z, floatBuffer.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// data.setVoxelWeight(weights);
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -396,42 +396,51 @@ public class TerrainProtocol implements ServerProtocolTemplate<TerrainMessage> {
|
|||||||
* @return the buffer
|
* @return the buffer
|
||||||
*/
|
*/
|
||||||
public static ByteBuffer constructFluidByteBuffer(ServerFluidChunk chunk){
|
public static ByteBuffer constructFluidByteBuffer(ServerFluidChunk chunk){
|
||||||
ByteBuffer buffer = ByteBuffer.allocate(ServerFluidChunk.BUFFER_SIZE*(4+4+4+4));
|
ByteBuffer rVal = null;
|
||||||
FloatBuffer floatView = buffer.asFloatBuffer();
|
if(chunk.isHomogenous()){
|
||||||
|
rVal = ByteBuffer.allocate(ServerFluidChunk.HOMOGENOUS_BUFFER_SIZE);
|
||||||
|
FloatBuffer floatView = rVal.asFloatBuffer();
|
||||||
|
floatView.put(ServerFluidChunk.IS_HOMOGENOUS);
|
||||||
|
} else {
|
||||||
|
rVal = ByteBuffer.allocate(ServerFluidChunk.BUFFER_SIZE*(4+4+4+4) + ServerFluidChunk.HOMOGENOUS_BUFFER_SIZE);
|
||||||
|
FloatBuffer floatView = rVal.asFloatBuffer();
|
||||||
|
|
||||||
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
|
floatView.put(ServerFluidChunk.IS_NOT_HOMOGENOUS);
|
||||||
for(int y = 0; y < ServerFluidChunk.BUFFER_DIM; y++){
|
|
||||||
for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){
|
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
|
||||||
floatView.put(chunk.getWeight(x, y, z));
|
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 < 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 < 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 < 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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){
|
return rVal;
|
||||||
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 < 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 < 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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,6 +50,20 @@ public class ServerFluidChunk {
|
|||||||
*/
|
*/
|
||||||
public static final int BUFFER_SIZE = ServerFluidChunk.BUFFER_DIM * ServerFluidChunk.BUFFER_DIM * ServerFluidChunk.BUFFER_DIM;
|
public static final int BUFFER_SIZE = ServerFluidChunk.BUFFER_DIM * ServerFluidChunk.BUFFER_DIM * ServerFluidChunk.BUFFER_DIM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fluid data dto value for homogenous chunk
|
||||||
|
*/
|
||||||
|
public static final float IS_HOMOGENOUS = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fluid data dto value for non-homogenous chunk
|
||||||
|
*/
|
||||||
|
public static final float IS_NOT_HOMOGENOUS = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Size of the homogenous value at the front of the fluid chunk dto
|
||||||
|
*/
|
||||||
|
public static final int HOMOGENOUS_BUFFER_SIZE = 1 * 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The world x coordinate of this chunk
|
* The world x coordinate of this chunk
|
||||||
@ -142,11 +156,26 @@ public class ServerFluidChunk {
|
|||||||
*/
|
*/
|
||||||
public boolean asleep = false;
|
public boolean asleep = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tracks whether this chunk is homogenous or not
|
||||||
|
*/
|
||||||
|
public boolean isHomogenous = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The total density of the chunk
|
* The total density of the chunk
|
||||||
*/
|
*/
|
||||||
public float totalDensity = 0;
|
public float totalDensity = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates the central arrays for this chunk
|
||||||
|
*/
|
||||||
|
private native void allocate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frees all native memory
|
||||||
|
*/
|
||||||
|
private native void free();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
* @param worldX The world x coordinate
|
* @param worldX The world x coordinate
|
||||||
@ -489,16 +518,6 @@ public class ServerFluidChunk {
|
|||||||
this.asleep = asleep;
|
this.asleep = asleep;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocates the central arrays for this chunk
|
|
||||||
*/
|
|
||||||
private native void allocate();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Frees all native memory
|
|
||||||
*/
|
|
||||||
private native void free();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frees the buffers contained within this chunk
|
* Frees the buffers contained within this chunk
|
||||||
*/
|
*/
|
||||||
@ -506,4 +525,20 @@ public class ServerFluidChunk {
|
|||||||
this.free();
|
this.free();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the total density of this chunk
|
||||||
|
* @return The total density
|
||||||
|
*/
|
||||||
|
public float getTotalDensity(){
|
||||||
|
return this.totalDensity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether this chunk is homogenous or not
|
||||||
|
* @return true if it is homogenous, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean isHomogenous(){
|
||||||
|
return this.isHomogenous;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -278,6 +278,7 @@ public class ServerFluidManager {
|
|||||||
// }
|
// }
|
||||||
lock.lock();
|
lock.lock();
|
||||||
ServerFluidChunk fluidChunk = this.getChunk(worldPos.x, worldPos.y, worldPos.z);
|
ServerFluidChunk fluidChunk = this.getChunk(worldPos.x, worldPos.y, worldPos.z);
|
||||||
|
fluidChunk.setAsleep(false);
|
||||||
fluidChunk.setWeight(voxelPos.x, voxelPos.y, voxelPos.z, weight);
|
fluidChunk.setWeight(voxelPos.x, voxelPos.y, voxelPos.z, weight);
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user