diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/WorldGenerator.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/WorldGenerator.kt | 18 |
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 |