macro data broadphase in chunk gen threads

This commit is contained in:
austin 2025-05-23 17:52:16 -04:00
parent b2bac5f540
commit 56746df5ac
3 changed files with 24 additions and 0 deletions

View File

@ -1947,6 +1947,7 @@ Small fixes
(05/23/2025)
Town layout work
Macro broadphase filters prior to per-voxel macro data intersection checks

View File

@ -16,6 +16,7 @@ import electrosphere.engine.Globals;
import electrosphere.logger.LoggerInterface;
import electrosphere.server.datacell.ServerWorldData;
import electrosphere.server.macro.MacroData;
import electrosphere.server.macro.spatial.MacroAreaObject;
import electrosphere.server.macro.spatial.MacroLODObject;
import electrosphere.server.macro.spatial.MacroObject;
import electrosphere.server.macro.structure.VirtualStructure;
@ -160,6 +161,15 @@ public class ServerBlockChunkGenerationThread implements Runnable {
if(notFullResCount > 0){
return null;
}
//filter to just objects that are within bounds of the chunk
AABBd chunkAABB = new AABBd(ServerWorldData.convertChunkToRealSpace(new Vector3i(worldX,worldY,worldZ)), ServerWorldData.convertChunkToRealSpace(new Vector3i(worldX+1,worldY+1,worldZ+1)));
objects = objects.stream().filter((MacroObject obj) -> {
if(obj instanceof MacroAreaObject areaObj){
return chunkAABB.testAABB(areaObj.getAABB());
} else {
return chunkAABB.testPoint(obj.getPos());
}
}).collect(Collectors.toList());
}
BlockChunkData chunk = null;

View File

@ -6,10 +6,14 @@ import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.joml.AABBd;
import org.joml.Vector3i;
import electrosphere.engine.Globals;
import electrosphere.logger.LoggerInterface;
import electrosphere.server.datacell.ServerWorldData;
import electrosphere.server.macro.MacroData;
import electrosphere.server.macro.spatial.MacroAreaObject;
import electrosphere.server.macro.spatial.MacroLODObject;
import electrosphere.server.macro.spatial.MacroObject;
import electrosphere.server.macro.structure.VirtualStructure;
@ -176,6 +180,15 @@ public class ChunkGenerationThread implements Runnable {
List<VirtualStructure> structs = town.getStructures(macroData);
objects.addAll(structs);
}
//filter to just objects that are within bounds of the chunk
AABBd chunkAABB = new AABBd(ServerWorldData.convertChunkToRealSpace(new Vector3i(worldX,worldY,worldZ)), ServerWorldData.convertChunkToRealSpace(new Vector3i(worldX+1,worldY+1,worldZ+1)));
objects = objects.stream().filter((MacroObject obj) -> {
if(obj instanceof MacroAreaObject areaObj){
return chunkAABB.testAABB(areaObj.getAABB());
} else {
return chunkAABB.testPoint(obj.getPos());
}
}).collect(Collectors.toList());
}
if(chunkCache.containsChunk(worldX, worldY, worldZ, stride)){