From 4442256566161f8b9100e5ecbdfef9e3dd91eb9c Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 22 May 2025 19:33:04 -0400 Subject: [PATCH] server sim optimization --- docs/src/progress/renderertodo.md | 3 +++ .../gridded/GriddedDataCellManager.java | 24 ++++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 08cf711b..61911969 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1941,6 +1941,9 @@ Per-mesh draw calls in batched static draw calls Main content pipeline tracking Error checking on mesh rendering (making sure not trying to draw 0-element meshes) Fix generating rendering geometry for blocks/terrain with 0 elements +GriddedDataCellManager filtering optimization + + diff --git a/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java b/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java index c997f09a..3fd92089 100644 --- a/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java +++ b/src/main/java/electrosphere/server/datacell/gridded/GriddedDataCellManager.java @@ -12,6 +12,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; import org.joml.Vector3d; import org.joml.Vector3i; @@ -709,16 +710,17 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager //micro simulation boolean runMicroSim = Globals.serverState.microSimulation != null && Globals.serverState.microSimulation.isReady(); - for(ServerDataCell cell : this.groundDataCells.values()){ - if(runMicroSim && this.shouldSimulate(cell)){ + if(runMicroSim){ + List simulationTargets = this.groundDataCells.values().stream().filter((ServerDataCell cell) -> this.shouldSimulate(cell)).collect(Collectors.toList()); + for(ServerDataCell cell : simulationTargets){ Globals.serverState.microSimulation.simulate(cell); - } - //queue fluid simulation - if(EngineState.EngineFlags.RUN_FLUIDS){ - Vector3i cellPos = this.getCellWorldPosition(cell); - if(cellPos != null){ - this.serverFluidManager.queue(cellPos.x, cellPos.y, cellPos.z); + //queue fluid simulation + if(EngineState.EngineFlags.RUN_FLUIDS){ + Vector3i cellPos = this.getCellWorldPosition(cell); + if(cellPos != null){ + this.serverFluidManager.queue(cellPos.x, cellPos.y, cellPos.z); + } } } } @@ -749,10 +751,10 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager private boolean shouldSimulate(ServerDataCell cell){ GriddedDataCellTrackingData trackingData = this.cellTrackingMap.get(cell); return - //has player - (cell.getPlayers().size() > 0 && trackingData.getClosestPlayer() < SIMULATION_DISTANCE_CUTOFF) || //has creature - (trackingData.getCreatureCount() > 0) + (trackingData.getCreatureCount() > 0) && + //has player + (cell.getPlayers().size() > 0 && trackingData.getClosestPlayer() < SIMULATION_DISTANCE_CUTOFF) ; }