structure voxel foundation
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
fd74af2e88
commit
a4d2f7d72a
@ -1921,6 +1921,7 @@ Content generation blocks for macro data generation
|
|||||||
Roads block content generation
|
Roads block content generation
|
||||||
Properly layout roads along town points in TownLayout
|
Properly layout roads along town points in TownLayout
|
||||||
Town generates a structure -- scaffolding for doing it across roads
|
Town generates a structure -- scaffolding for doing it across roads
|
||||||
|
Structures create foundations in terrain voxels
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -98,7 +98,8 @@ public class TownLayout {
|
|||||||
aabb.setMin(pos);
|
aabb.setMin(pos);
|
||||||
aabb.setMax(new Vector3d(pos).add(structureData.getDimensions()));
|
aabb.setMax(new Vector3d(pos).add(structureData.getDimensions()));
|
||||||
if(!macroData.intersectsStruct(aabb)){
|
if(!macroData.intersectsStruct(aabb)){
|
||||||
VirtualStructure.createStructure(macroData, structureData, pos);
|
VirtualStructure struct = VirtualStructure.createStructure(macroData, structureData, pos);
|
||||||
|
town.addStructure(struct);
|
||||||
}
|
}
|
||||||
|
|
||||||
//right-facing road
|
//right-facing road
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.joml.AABBd;
|
||||||
import org.joml.Vector3d;
|
import org.joml.Vector3d;
|
||||||
|
|
||||||
import electrosphere.client.terrain.cache.ChunkData;
|
import electrosphere.client.terrain.cache.ChunkData;
|
||||||
@ -14,6 +15,7 @@ import electrosphere.engine.Globals;
|
|||||||
import electrosphere.server.datacell.ServerWorldData;
|
import electrosphere.server.datacell.ServerWorldData;
|
||||||
import electrosphere.server.macro.civilization.road.Road;
|
import electrosphere.server.macro.civilization.road.Road;
|
||||||
import electrosphere.server.macro.spatial.MacroObject;
|
import electrosphere.server.macro.spatial.MacroObject;
|
||||||
|
import electrosphere.server.macro.structure.VirtualStructure;
|
||||||
import electrosphere.server.macro.town.Town;
|
import electrosphere.server.macro.town.Town;
|
||||||
import electrosphere.server.physics.terrain.generation.heightmap.EmptySkyGen;
|
import electrosphere.server.physics.terrain.generation.heightmap.EmptySkyGen;
|
||||||
import electrosphere.server.physics.terrain.generation.heightmap.HeightmapGenerator;
|
import electrosphere.server.physics.terrain.generation.heightmap.HeightmapGenerator;
|
||||||
@ -282,6 +284,19 @@ public class ProceduralChunkGenerator implements ChunkGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if(object instanceof VirtualStructure){
|
||||||
|
VirtualStructure struct = (VirtualStructure)object;
|
||||||
|
AABBd aabb = struct.getAABB();
|
||||||
|
//create a foundation underneath the structure
|
||||||
|
if(realX >= aabb.minX && realX <= aabb.maxX && realZ >= aabb.minZ && realZ <= aabb.maxZ){
|
||||||
|
//check if within foundation range
|
||||||
|
double vertDist = aabb.minY - realY;
|
||||||
|
if(vertDist > 0 && vertDist < 2){
|
||||||
|
voxel.type = 1;
|
||||||
|
voxel.weight = 1;
|
||||||
|
rVal = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if(object instanceof Town){
|
} else if(object instanceof Town){
|
||||||
} else {
|
} else {
|
||||||
throw new Error("Unsupported object type " + object);
|
throw new Error("Unsupported object type " + object);
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package electrosphere.server.physics.terrain.manager;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
@ -10,6 +11,8 @@ import electrosphere.server.datacell.ServerWorldData;
|
|||||||
import electrosphere.server.macro.MacroData;
|
import electrosphere.server.macro.MacroData;
|
||||||
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.town.Town;
|
||||||
import electrosphere.server.physics.terrain.diskmap.ChunkDiskMap;
|
import electrosphere.server.physics.terrain.diskmap.ChunkDiskMap;
|
||||||
import electrosphere.server.physics.terrain.generation.interfaces.ChunkGenerator;
|
import electrosphere.server.physics.terrain.generation.interfaces.ChunkGenerator;
|
||||||
|
|
||||||
@ -163,6 +166,12 @@ public class ChunkGenerationThread implements Runnable {
|
|||||||
if(notFullResCount > 0){
|
if(notFullResCount > 0){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
List<MacroObject> towns = objects.stream().filter((MacroObject obj) -> obj instanceof Town).collect(Collectors.toList());
|
||||||
|
for(MacroObject currObj : towns){
|
||||||
|
Town town = (Town)currObj;
|
||||||
|
List<VirtualStructure> structs = town.getStructures(macroData);
|
||||||
|
objects.addAll(structs);
|
||||||
|
}
|
||||||
|
|
||||||
if(chunkCache.containsChunk(worldX, worldY, worldZ, stride)){
|
if(chunkCache.containsChunk(worldX, worldY, worldZ, stride)){
|
||||||
rVal = chunkCache.get(worldX, worldY, worldZ, stride);
|
rVal = chunkCache.get(worldX, worldY, worldZ, stride);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user