diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt new file mode 100644 index 0000000..0e7d217 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt @@ -0,0 +1,30 @@ +package io.dico.parcels2.blockvisitor + +import io.dico.parcels2.util.Region +import io.dico.parcels2.util.Vec3i +import kotlin.coroutines.experimental.SequenceBuilder +import kotlin.coroutines.experimental.buildIterator + +enum class RegionTraversal(private val builder: suspend SequenceBuilder<Vec3i>.(Region) -> Unit) { + XZY({ region -> + val origin = region.origin + val size = region.size + + repeat(size.y) { y -> + repeat(size.z) { z -> + repeat(size.x) { x -> + yield(origin.add(x, y, z)) + } + } + } + + }), + + ; + + fun regionTraverser(region: Region) = Iterable { buildIterator { builder(region) } } + +} + + + |