diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 15d33d89..0f112d3f 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2043,6 +2043,7 @@ Rendering prism regions Utilities for turning mesh gen algos into renderable entities Back off farm plots from roads by road radius Farm plots properly save/load to/from disk +Farm plots place dirt diff --git a/src/main/java/electrosphere/server/macro/MacroData.java b/src/main/java/electrosphere/server/macro/MacroData.java index 76284017..5ccdd841 100644 --- a/src/main/java/electrosphere/server/macro/MacroData.java +++ b/src/main/java/electrosphere/server/macro/MacroData.java @@ -419,6 +419,7 @@ public class MacroData { List blockers = new LinkedList(); blockers.addAll(this.structures); blockers.addAll(this.roads); + blockers.addAll(this.regions); return blockers; } diff --git a/src/main/java/electrosphere/server/macro/region/MacroRegion.java b/src/main/java/electrosphere/server/macro/region/MacroRegion.java index 1505d43d..01077a2b 100644 --- a/src/main/java/electrosphere/server/macro/region/MacroRegion.java +++ b/src/main/java/electrosphere/server/macro/region/MacroRegion.java @@ -1,12 +1,16 @@ package electrosphere.server.macro.region; +import org.joml.AABBd; +import org.joml.Vector3d; + import electrosphere.server.macro.MacroData; +import electrosphere.server.macro.spatial.MacroAreaObject; import electrosphere.util.math.region.Region; /** * A macro data spatial region */ -public class MacroRegion { +public class MacroRegion implements MacroAreaObject { /** @@ -64,6 +68,21 @@ public class MacroRegion { this.region = region; } + @Override + public Vector3d getPos() { + return new Vector3d(this.region.getAABB().minX,this.region.getAABB().minY,this.region.getAABB().minZ); + } + + @Override + public void setPos(Vector3d pos) { + throw new UnsupportedOperationException("Unimplemented method 'setPos'"); + } + + @Override + public AABBd getAABB() { + return this.region.getAABB(); + } + } diff --git a/src/main/java/electrosphere/server/physics/terrain/generation/ProceduralChunkGenerator.java b/src/main/java/electrosphere/server/physics/terrain/generation/ProceduralChunkGenerator.java index 92e7869f..01437087 100644 --- a/src/main/java/electrosphere/server/physics/terrain/generation/ProceduralChunkGenerator.java +++ b/src/main/java/electrosphere/server/physics/terrain/generation/ProceduralChunkGenerator.java @@ -14,6 +14,7 @@ import electrosphere.data.voxel.sampler.SamplerFile; import electrosphere.engine.Globals; import electrosphere.server.datacell.ServerWorldData; import electrosphere.server.macro.civilization.road.Road; +import electrosphere.server.macro.region.MacroRegion; import electrosphere.server.macro.spatial.MacroObject; import electrosphere.server.macro.structure.VirtualStructure; import electrosphere.server.macro.town.Town; @@ -307,6 +308,15 @@ public class ProceduralChunkGenerator implements ChunkGenerator { } } } else if(object instanceof Town){ + } else if(object instanceof MacroRegion region){ + if(region.getRegion().getAABB().testPoint(realPt)){ + if(region.getRegion().intersects(realPt)){ + if(voxel.type != ServerTerrainChunk.VOXEL_TYPE_AIR){ + voxel.type = 1; + rVal = true; + } + } + } } else { throw new Error("Unsupported object type " + object); } diff --git a/src/main/java/electrosphere/server/physics/terrain/manager/ChunkGenerationThread.java b/src/main/java/electrosphere/server/physics/terrain/manager/ChunkGenerationThread.java index 70085bd3..6be5da56 100644 --- a/src/main/java/electrosphere/server/physics/terrain/manager/ChunkGenerationThread.java +++ b/src/main/java/electrosphere/server/physics/terrain/manager/ChunkGenerationThread.java @@ -179,6 +179,7 @@ public class ChunkGenerationThread implements Runnable { Town town = (Town)currObj; List structs = town.getStructures(macroData); objects.addAll(structs); + objects.addAll(town.getFarmPlots(macroData)); } //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)));