blob: cdcbe0e42ea47b1fbd8d989e97be1665090a5445 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package io.dico.parcels2.util.math
data class Region(val origin: Vec3i, val size: Vec3i) {
val blockCount: Int get() = size.x * size.y * size.z
val center: Vec3d
get() {
val x = (origin.x + size.x) / 2.0
val y = (origin.y + size.y) / 2.0
val z = (origin.z + size.z) / 2.0
return Vec3d(x, y, z)
}
val end: Vec3i
get() = origin + size
val max: Vec3i
get() = Vec3i(origin.x + size.x - 1, origin.y + size.y - 1, origin.z + size.z - 1)
fun withSize(size: Vec3i): Region {
if (size == this.size) return this
return Region(origin, size)
}
operator fun contains(loc: Vec3i): Boolean = getFirstUncontainedDimensionOf(loc) == null
fun getFirstUncontainedDimensionOf(loc: Vec3i): Dimension? {
val max = max
return when {
loc.x !in origin.x..max.x -> Dimension.X
loc.z !in origin.z..max.z -> Dimension.Z
loc.y !in origin.y..max.y -> Dimension.Y
else -> null
}
}
}
|