From 7ccf0de17ba78eea7589fc3b01430f1566c7ee64 Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 19 Dec 2024 17:01:39 -0500 Subject: [PATCH] debug data printing --- .../fluid/sim/pressurecell/solver_consts.h | 6 +- .../fluid/sim/pressurecell/normalization.c | 128 +++++++++++++++++- .../c/src/fluid/sim/pressurecell/pressure.c | 18 +-- .../src/fluid/sim/pressurecell/pressurecell.c | 5 - .../ui/menu/debug/ImGuiFluidMonitor.java | 81 ++++++++++- .../fluid/manager/ServerFluidChunk.java | 11 ++ 6 files changed, 226 insertions(+), 23 deletions(-) diff --git a/src/main/c/includes/fluid/sim/pressurecell/solver_consts.h b/src/main/c/includes/fluid/sim/pressurecell/solver_consts.h index 62c290ab..f21d6f20 100644 --- a/src/main/c/includes/fluid/sim/pressurecell/solver_consts.h +++ b/src/main/c/includes/fluid/sim/pressurecell/solver_consts.h @@ -30,12 +30,12 @@ /** * Diffusion constant */ -#define FLUID_PRESSURECELL_DIFFUSION_CONSTANT 0.001f +#define FLUID_PRESSURECELL_DIFFUSION_CONSTANT 0.0001f /** * Viscosity constant */ -#define FLUID_PRESSURECELL_VISCOSITY_CONSTANT 0.001f +#define FLUID_PRESSURECELL_VISCOSITY_CONSTANT 0.0001f /** * Amount of the residual to add to the pressure field each frame @@ -85,7 +85,7 @@ /** * Pressure added on recapturing fluid pushed into borders */ -#define FLUID_PRESSURECELL_RECAPTURE_PRESSURE 1.0f +#define FLUID_PRESSURECELL_RECAPTURE_PRESSURE 0.0f /** * Pressure of bounds diff --git a/src/main/c/src/fluid/sim/pressurecell/normalization.c b/src/main/c/src/fluid/sim/pressurecell/normalization.c index 0af68bce..d0565969 100644 --- a/src/main/c/src/fluid/sim/pressurecell/normalization.c +++ b/src/main/c/src/fluid/sim/pressurecell/normalization.c @@ -9,7 +9,12 @@ /** * Inverts the force applied to the border */ -#define INVERT_BORDER_FORCE 1 +#define INVERT_BORDER_FORCE 0 + +/** + * Zeroes the force applied to the border + */ +#define ZERO_BORDER_FORCE 1 /** * Calculates the expected density and pressure @@ -97,10 +102,14 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * } //clear dtemp + float innerTotal = 0; for(x = 0; x < DIM; x++){ for(y = 0; y < DIM; y++){ for(z = 0; z < DIM; z++){ dTemp[IX(x,y,z)] = fmax(MIN_FLUID_VALUE,dArr[IX(x,y,z)]); + if(x > 0 && y > 0 && z > 0 && x < DIM-1 && y < DIM-1 && z < DIM-1){ + innerTotal = innerTotal + dTemp[IX(x,y,z)]; + } } } } @@ -120,6 +129,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * if(INVERT_BORDER_FORCE){ uArr[adjacentIndex] = -uArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -157,6 +169,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * if(INVERT_BORDER_FORCE){ uArr[adjacentIndex] = -uArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -194,6 +209,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * if(INVERT_BORDER_FORCE){ vArr[adjacentIndex] = -vArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + vArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -231,6 +249,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * if(INVERT_BORDER_FORCE){ vArr[adjacentIndex] = -vArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + vArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -268,6 +289,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * if(INVERT_BORDER_FORCE){ wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -305,6 +329,9 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * if(INVERT_BORDER_FORCE){ wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -362,6 +389,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -396,6 +427,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -430,6 +465,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -464,6 +503,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; vArr[adjacentIndex] = -vArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -504,6 +547,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -538,6 +585,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -572,6 +623,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -606,6 +661,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * uArr[adjacentIndex] = -uArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -644,6 +703,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -678,6 +741,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -712,6 +779,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -746,6 +817,10 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] - estimatedLoss; @@ -814,6 +889,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -847,6 +927,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -879,6 +964,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -912,6 +1002,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -949,6 +1044,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -982,6 +1082,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -1014,6 +1119,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -1047,6 +1157,11 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * vArr[adjacentIndex] = -vArr[adjacentIndex]; wArr[adjacentIndex] = -wArr[adjacentIndex]; } + if(ZERO_BORDER_FORCE){ + uArr[adjacentIndex] = 0; + vArr[adjacentIndex] = 0; + wArr[adjacentIndex] = 0; + } if(invertedForce > MIN_FLUID_VALUE){ estimatedLoss = dArr[adjacentIndex] / invertedForce; dTemp[adjacentIndex] = dArr[adjacentIndex] + estimatedLoss; @@ -1068,8 +1183,15 @@ LIBRARY_API void fluid_pressurecell_recapture_density(Environment * env, Chunk * - - + //add extra density from edges to inner part of chunk + float innerRebalanceRatio = (innerTotal + chunk->pressureCellData.recaptureDensity) / innerTotal; + for(x = 1; x < DIM-1; x++){ + for(y = 1; y < DIM-1; y++){ + for(z = 1; z < DIM-1; z++){ + dTemp[IX(x,y,z)] = dTemp[IX(x,y,z)] * innerRebalanceRatio; + } + } + } diff --git a/src/main/c/src/fluid/sim/pressurecell/pressure.c b/src/main/c/src/fluid/sim/pressurecell/pressure.c index 62d0642b..12f9b5ca 100644 --- a/src/main/c/src/fluid/sim/pressurecell/pressure.c +++ b/src/main/c/src/fluid/sim/pressurecell/pressure.c @@ -100,11 +100,11 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch //there are two values that should potentially be set to here //either, same pressure as voxel in normal direction if this edge is actually an edge //otherwise, set to the pressure of the neighboring chunk - pressureTemp[IX(0,x,y)] = pressureCache[IX(0,x,y)]; + pressureTemp[IX(0,x,y)] = pressureCache[IX(0,x,y)]; pressureTemp[IX(DIM-1,x,y)] = pressureCache[IX(DIM-1,x,y)]; - pressureTemp[IX(x,0,y)] = pressureCache[IX(x,0,y)]; + pressureTemp[IX(x,0,y)] = pressureCache[IX(x,0,y)]; pressureTemp[IX(x,DIM-1,y)] = pressureCache[IX(x,DIM-1,y)]; - pressureTemp[IX(x,y,0)] = pressureCache[IX(x,y,0)]; + pressureTemp[IX(x,y,0)] = pressureCache[IX(x,y,0)]; pressureTemp[IX(x,y,DIM-1)] = pressureCache[IX(x,y,DIM-1)]; // pressureTemp[IX(0,x,y)] = border[IX(0,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; // pressureTemp[IX(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; @@ -114,11 +114,11 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch // pressureTemp[IX(x,y,DIM-1)] = border[IX(x,y,DIM-1)] * FLUID_PRESSURECELL_BOUND_PRESSURE; //divergence borders - phi0[IX(0,x,y)] = divCache[IX(0,x,y)]; + phi0[IX(0,x,y)] = divCache[IX(0,x,y)]; phi0[IX(DIM-1,x,y)] = divCache[IX(DIM-1,x,y)]; - phi0[IX(x,0,y)] = divCache[IX(x,0,y)]; + phi0[IX(x,0,y)] = divCache[IX(x,0,y)]; phi0[IX(x,DIM-1,y)] = divCache[IX(x,DIM-1,y)]; - phi0[IX(x,y,0)] = divCache[IX(x,y,0)]; + phi0[IX(x,y,0)] = divCache[IX(x,y,0)]; phi0[IX(x,y,DIM-1)] = divCache[IX(x,y,DIM-1)]; } } @@ -150,11 +150,11 @@ LIBRARY_API void pressurecell_approximate_pressure(Environment * environment, Ch // pressureTemp[IX(x,DIM-1,y)] = 0; // pressureTemp[IX(x,y,0)] = 0; // pressureTemp[IX(x,y,DIM-1)] = 0; - pressureTemp[IX(0,x,y)] = pressureTemp[IX(1,x,y)]; + pressureTemp[IX(0,x,y)] = pressureTemp[IX(1,x,y)]; pressureTemp[IX(DIM-1,x,y)] = pressureTemp[IX(DIM-2,x,y)]; - pressureTemp[IX(x,0,y)] = pressureTemp[IX(x,1,y)]; + pressureTemp[IX(x,0,y)] = pressureTemp[IX(x,1,y)]; pressureTemp[IX(x,DIM-1,y)] = pressureTemp[IX(x,DIM-2,y)]; - pressureTemp[IX(x,y,0)] = pressureTemp[IX(x,y,1)]; + pressureTemp[IX(x,y,0)] = pressureTemp[IX(x,y,1)]; pressureTemp[IX(x,y,DIM-1)] = pressureTemp[IX(x,y,DIM-2)]; // pressureTemp[IX(0,x,y)] = border[IX(0,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; // pressureTemp[IX(DIM-1,x,y)] = border[IX(DIM-1,x,y)] * FLUID_PRESSURECELL_BOUND_PRESSURE; diff --git a/src/main/c/src/fluid/sim/pressurecell/pressurecell.c b/src/main/c/src/fluid/sim/pressurecell/pressurecell.c index 05f9a52a..3378910b 100644 --- a/src/main/c/src/fluid/sim/pressurecell/pressurecell.c +++ b/src/main/c/src/fluid/sim/pressurecell/pressurecell.c @@ -176,11 +176,6 @@ LIBRARY_API void fluid_pressurecell_simulate( fluid_pressurecell_clearArr(currentChunk->u0[CENTER_LOC]); fluid_pressurecell_clearArr(currentChunk->v0[CENTER_LOC]); fluid_pressurecell_clearArr(currentChunk->w0[CENTER_LOC]); - fluid_pressurecell_clearArr(currentChunk->pressureTempCache); - fluid_pressurecell_clearArr(currentChunk->dTempCache); - fluid_pressurecell_clearArr(currentChunk->uTempCache); - fluid_pressurecell_clearArr(currentChunk->vTempCache); - fluid_pressurecell_clearArr(currentChunk->wTempCache); } } diff --git a/src/main/java/electrosphere/client/ui/menu/debug/ImGuiFluidMonitor.java b/src/main/java/electrosphere/client/ui/menu/debug/ImGuiFluidMonitor.java index d29040b3..da18a165 100644 --- a/src/main/java/electrosphere/client/ui/menu/debug/ImGuiFluidMonitor.java +++ b/src/main/java/electrosphere/client/ui/menu/debug/ImGuiFluidMonitor.java @@ -45,11 +45,12 @@ public class ImGuiFluidMonitor { ImGui.text("Broadcast Size (This Frame): " + fluidManager.getBroadcastSize()); ImGui.text("Normalization Ratio: " + ServerFluidChunk.getNormalizationRatio()); ImGui.text("Mass: " + ServerFluidChunk.getMassCount()); + + if(fluidManager.getChunk(0, 0, 0) != null){ - ServerFluidChunk chunk = fluidManager.getChunk(0, 0, 0); - ImGui.text("Pressure: " + chunk.getTotalPressure()); - ImGui.text("Velocity magnitude: " + chunk.getTotalVelocityMag()); + ImGuiFluidMonitor.printChunkDebugData(); } + } if(ImGui.collapsingHeader("Client Data")){ @@ -68,4 +69,78 @@ public class ImGuiFluidMonitor { Globals.renderingEngine.getImGuiPipeline().addImGuiWindow(fluidWindow); } + /** + * Prints debug data about the chunk at 0,0,0 + */ + private static void printChunkDebugData(){ + ServerFluidManager fluidManager = Globals.playerManager.getPlayerRealm(Globals.clientPlayer).getServerWorldData().getServerFluidManager(); + ServerFluidChunk chunk = fluidManager.getChunk(0, 0, 0); + ImGui.text("Pressure: " + chunk.getTotalPressure()); + ImGui.text("Velocity magnitude: " + chunk.getTotalVelocityMag()); + if(ImGui.button("Capture lowest layers")){ + //print density + + System.out.println("Density"); + for(int y = 0; y < 3; y++){ + System.out.println("Layer " + y); + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ + System.out.print(chunk.getWeight(x, y, z) + ", "); + } + System.out.println(); + } + } + System.out.println("\n\n\n"); + + System.out.println("X Velocity"); + for(int y = 0; y < 3; y++){ + System.out.println("Layer " + y); + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ + System.out.print(chunk.getVelocityX(x, y, z) + ", "); + } + System.out.println(); + } + } + System.out.println("\n\n\n"); + + System.out.println("Y Velocity"); + for(int y = 0; y < 3; y++){ + System.out.println("Layer " + y); + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ + System.out.print(chunk.getVelocityY(x, y, z) + ", "); + } + System.out.println(); + } + } + System.out.println("\n\n\n"); + + System.out.println("Z Velocity"); + for(int y = 0; y < 3; y++){ + System.out.println("Layer " + y); + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ + System.out.print(chunk.getVelocityZ(x, y, z) + ", "); + } + System.out.println(); + } + } + System.out.println("\n\n\n"); + + + System.out.println("Pressure"); + for(int y = 0; y < 3; y++){ + System.out.println("Layer " + y); + for(int x = 0; x < ServerFluidChunk.BUFFER_DIM; x++){ + for(int z = 0; z < ServerFluidChunk.BUFFER_DIM; z++){ + System.out.print(chunk.getPressure(x, y, z) + ", "); + } + System.out.println(); + } + } + System.out.println("\n\n\n"); + } + } + } diff --git a/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java b/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java index 947f8b70..9293e491 100644 --- a/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java +++ b/src/main/java/electrosphere/server/fluid/manager/ServerFluidChunk.java @@ -515,6 +515,17 @@ public class ServerFluidChunk { pressureCache.put(this.IX(x,y,z),pressure); } + /** + * Gets the pressure at a point + * @param x The x coordinate + * @param y The y coordinate + * @param z The z coordinate + * @return The pressure + */ + public float getPressure(int x, int y, int z){ + return pressureCache.get(this.IX(x,y,z)); + } + /** * Gets the inddex into the buffer * @param x The x position