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)
|
(05/23/2025)
|
||||||
Town layout work
|
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.logger.LoggerInterface;
|
||||||
import electrosphere.server.datacell.ServerWorldData;
|
import electrosphere.server.datacell.ServerWorldData;
|
||||||
import electrosphere.server.macro.MacroData;
|
import electrosphere.server.macro.MacroData;
|
||||||
|
import electrosphere.server.macro.spatial.MacroAreaObject;
|
||||||
import electrosphere.server.macro.spatial.MacroLODObject;
|
import electrosphere.server.macro.spatial.MacroLODObject;
|
||||||
import electrosphere.server.macro.spatial.MacroObject;
|
import electrosphere.server.macro.spatial.MacroObject;
|
||||||
import electrosphere.server.macro.structure.VirtualStructure;
|
import electrosphere.server.macro.structure.VirtualStructure;
|
||||||
@ -160,6 +161,15 @@ public class ServerBlockChunkGenerationThread implements Runnable {
|
|||||||
if(notFullResCount > 0){
|
if(notFullResCount > 0){
|
||||||
return null;
|
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;
|
BlockChunkData chunk = null;
|
||||||
|
|||||||
@ -6,10 +6,14 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.joml.AABBd;
|
||||||
|
import org.joml.Vector3i;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.server.datacell.ServerWorldData;
|
import electrosphere.server.datacell.ServerWorldData;
|
||||||
import electrosphere.server.macro.MacroData;
|
import electrosphere.server.macro.MacroData;
|
||||||
|
import electrosphere.server.macro.spatial.MacroAreaObject;
|
||||||
import electrosphere.server.macro.spatial.MacroLODObject;
|
import electrosphere.server.macro.spatial.MacroLODObject;
|
||||||
import electrosphere.server.macro.spatial.MacroObject;
|
import electrosphere.server.macro.spatial.MacroObject;
|
||||||
import electrosphere.server.macro.structure.VirtualStructure;
|
import electrosphere.server.macro.structure.VirtualStructure;
|
||||||
@ -176,6 +180,15 @@ public class ChunkGenerationThread implements Runnable {
|
|||||||
List<VirtualStructure> structs = town.getStructures(macroData);
|
List<VirtualStructure> structs = town.getStructures(macroData);
|
||||||
objects.addAll(structs);
|
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)){
|
if(chunkCache.containsChunk(worldX, worldY, worldZ, stride)){
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user