summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/WorldGenerator.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/WorldGenerator.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/WorldGenerator.kt18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/WorldGenerator.kt b/src/main/kotlin/io/dico/parcels2/WorldGenerator.kt
index 724eba7..72ca3bd 100644
--- a/src/main/kotlin/io/dico/parcels2/WorldGenerator.kt
+++ b/src/main/kotlin/io/dico/parcels2/WorldGenerator.kt
@@ -52,6 +52,8 @@ abstract class ParcelGenerator : ChunkGenerator(), ParcelProvider {
abstract fun clearParcel(parcel: Parcel): Worker
+ abstract fun doBlockOperation(parcel: Parcel, direction: RegionTraversal = RegionTraversal.DOWNWARD, operation: (Block) -> Unit): Worker
+
}
interface GeneratorFactory {
@@ -267,7 +269,7 @@ class DefaultParcelGenerator(val worlds: Worlds, val name: String, private val o
override fun clearParcel(parcel: Parcel) = worktimeLimiter.submit {
val bottom = getBottomCoord(parcel)
val region = Region(Vec3i(bottom.x, 0, bottom.z), Vec3i(o.parcelSize, maxHeight + 1, o.parcelSize))
- val blocks = RegionTraversal.XZY.regionTraverser(region)
+ val blocks = RegionTraversal.DOWNWARD.regionTraverser(region)
val blockCount = region.blockCount.toDouble()
val world = world.world
@@ -288,4 +290,18 @@ class DefaultParcelGenerator(val worlds: Worlds, val name: String, private val o
}
+ override fun doBlockOperation(parcel: Parcel, direction: RegionTraversal, operation: (Block) -> Unit) = worktimeLimiter.submit {
+ val bottom = getBottomCoord(parcel)
+ val region = Region(Vec3i(bottom.x, 0, bottom.z), Vec3i(o.parcelSize, maxHeight + 1, o.parcelSize))
+ val blocks = direction.regionTraverser(region)
+ val blockCount = region.blockCount.toDouble()
+ val world = world.world
+
+ for ((index, vec) in blocks.withIndex()) {
+ markSuspensionPoint()
+ operation(world[vec])
+ setProgress((index + 1) / blockCount)
+ }
+ }
+
} \ No newline at end of file