macro data broadphase in chunk gen threads
This commit is contained in:
parent
b2bac5f540
commit
56746df5ac
@ -1947,6 +1947,7 @@ Small fixes
|
||||
|
||||
(05/23/2025)
|
||||
Town layout work
|
||||
Macro broadphase filters prior to per-voxel macro data intersection checks
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user