util: use more generics

This commit is contained in:
Bixilon 2021-06-16 22:04:25 +02:00
parent da4b243c1e
commit bd10ea951f
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 13 additions and 56 deletions

View File

@ -15,9 +15,7 @@ package de.bixilon.minosoft.data
import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer
import de.bixilon.minosoft.util.KUtil
import de.bixilon.minosoft.util.enum.ValuesEnum
import glm_.vec3.Vec3
import glm_.vec3.Vec3d
import glm_.vec3.Vec3i
import glm_.vec3.Vec3t
enum class Axes {
X,
@ -25,31 +23,11 @@ enum class Axes {
Z,
;
fun choose(vec3: Vec3): Float {
return choose(vec3.x, vec3.y, vec3.z)
}
fun choose(vec3: Vec3d): Double {
return choose(vec3.x, vec3.y, vec3.z)
}
fun choose(vec3i: Vec3i): Int {
return choose(Vec3(vec3i)).toInt()
}
private fun choose(x: Float, y: Float, z: Float): Float {
fun <T : Number> choose(vec3: Vec3t<T>): T {
return when (this) {
X -> x
Y -> y
Z -> z
}
}
private fun choose(x: Double, y: Double, z: Double): Double {
return when (this) {
X -> x
Y -> y
Z -> z
X -> vec3.x
Y -> vec3.y
Z -> vec3.z
}
}

View File

@ -36,6 +36,7 @@ import glm_.vec2.Vec2i
import glm_.vec3.Vec3
import glm_.vec3.Vec3d
import glm_.vec3.Vec3i
import glm_.vec3.Vec3t
import kotlin.math.abs
import kotlin.random.Random
@ -70,16 +71,10 @@ object VecUtil {
z = 0.0f
}
infix fun Vec3.assign(vec3: Vec3) {
x = vec3.x
y = vec3.y
z = vec3.z
}
infix fun Vec3d.assign(vec3d: Vec3d) {
x = vec3d.x
y = vec3d.y
z = vec3d.z
infix fun <T : Number> Vec3t<T>.assign(other: Vec3t<T>) {
x = other.x
y = other.y
z = other.z
}
@JvmName(name = "times2")
@ -391,29 +386,13 @@ object VecUtil {
return minDistanceDirection
}
val Vec3i.toVec3: Vec3
val <T : Number> Vec3t<T>.toVec3: Vec3
get() = Vec3(this)
val Vec3i.toVec3d: Vec3d
val <T : Number> Vec3t<T>.toVec3d: Vec3d
get() = Vec3d(this)
operator fun Vec3.get(axis: Axes): Float {
return when (axis) {
Axes.X -> this.x
Axes.Y -> this.y
Axes.Z -> this.z
}
}
operator fun Vec3d.get(axis: Axes): Double {
return when (axis) {
Axes.X -> this.x
Axes.Y -> this.y
Axes.Z -> this.z
}
}
operator fun Vec3i.get(axis: Axes): Int {
operator fun <T : Number> Vec3t<T>.get(axis: Axes): T {
return when (axis) {
Axes.X -> this.x
Axes.Y -> this.y