From 48b44c3fa0db64798fe9dc0f621ca2925b5c6a5c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 28 May 2023 20:02:46 +0200 Subject: [PATCH] add Vec3t::get(Axes) for each datatype Optimization for upcoming glm version --- .../position/center/CenterProperty.kt | 2 +- .../minosoft/data/direction/Directions.kt | 7 +++++-- .../data/registries/shapes/aabb/AABB.kt | 2 +- .../shapes/voxel/AbstractVoxelShape.kt | 2 +- .../gui/rendering/util/vec/vec2/Vec2iUtil.kt | 10 ---------- .../gui/rendering/util/vec/vec3/Vec3Util.kt | 5 ++--- .../gui/rendering/util/vec/vec3/Vec3dUtil.kt | 18 +++++++++++++++++- .../gui/rendering/util/vec/vec3/Vec3iUtil.kt | 17 +++++++++++++++++ .../physics/handlers/movement/SneakAdjuster.kt | 2 +- .../physics/parts/CollisionMovementPhysics.kt | 2 +- .../minosoft/physics/parts/OutOfBlockPusher.kt | 2 +- 11 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/position/center/CenterProperty.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/position/center/CenterProperty.kt index 1a0203b9e..3c91b93bc 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/position/center/CenterProperty.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/position/center/CenterProperty.kt @@ -17,7 +17,7 @@ import de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.Ent import de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.EntityTargetProperty import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.entities.entities.Entity -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.set +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.set import java.util.* abstract class CenterProperty( diff --git a/src/main/java/de/bixilon/minosoft/data/direction/Directions.kt b/src/main/java/de/bixilon/minosoft/data/direction/Directions.kt index 4666cb658..e5644f4db 100644 --- a/src/main/java/de/bixilon/minosoft/data/direction/Directions.kt +++ b/src/main/java/de/bixilon/minosoft/data/direction/Directions.kt @@ -17,7 +17,10 @@ import de.bixilon.kotlinglm.vec2.Vec2 import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kotlinglm.vec3.Vec3i -import de.bixilon.kotlinglm.vec3.swizzle.* +import de.bixilon.kotlinglm.vec3.swizzle.xy +import de.bixilon.kotlinglm.vec3.swizzle.xz +import de.bixilon.kotlinglm.vec3.swizzle.yz +import de.bixilon.kotlinglm.vec3.swizzle.zy import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.enums.EnumUtil @@ -28,7 +31,7 @@ import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.registries.blocks.properties.serializer.BlockPropertiesSerializer import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.world.chunk.ChunkSection -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.get +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.get import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import kotlin.reflect.jvm.javaField diff --git a/src/main/java/de/bixilon/minosoft/data/registries/shapes/aabb/AABB.kt b/src/main/java/de/bixilon/minosoft/data/registries/shapes/aabb/AABB.kt index 5cde31ba1..1462ab831 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/shapes/aabb/AABB.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/shapes/aabb/AABB.kt @@ -25,8 +25,8 @@ import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.registries.shapes.voxel.AABBRaycastHit import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.ONE -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.get import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.toVec3 +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.get import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.max import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.min import kotlin.math.abs diff --git a/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt b/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt index e388347cc..d35de7dbc 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.registries.shapes.ShapeRegistry import de.bixilon.minosoft.data.registries.shapes.aabb.AABB import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.get +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.get import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.max import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.min import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec2/Vec2iUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec2/Vec2iUtil.kt index 5941e7557..3eb7d98b3 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec2/Vec2iUtil.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec2/Vec2iUtil.kt @@ -14,10 +14,8 @@ package de.bixilon.minosoft.gui.rendering.util.vec.vec2 import de.bixilon.kotlinglm.func.rad -import de.bixilon.kotlinglm.mat4x4.Mat4 import de.bixilon.kotlinglm.vec2.Vec2 import de.bixilon.kotlinglm.vec2.Vec2i -import de.bixilon.kotlinglm.vec2.Vec2t import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.direction.Directions @@ -112,14 +110,6 @@ object Vec2iUtil { return this isSmaller min || this isGreater max } - infix fun Mat4.orthoTimes(vec: Vec2t<*>): Vec2 { - val array = this.array - return Vec2( - array[0] * vec[0].toFloat() + array[4] * vec[1].toFloat() - 1.0f, - array[1] * vec[0].toFloat() + array[5] * vec[1].toFloat() + 1.0f, - ) - } - operator fun Vec2i.plus(direction: Directions): Vec2i { val ret = Vec2i(this) ret.x += direction.vector.x diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt index f17081d0d..ab164cedd 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt @@ -18,7 +18,6 @@ import de.bixilon.kotlinglm.func.sin import de.bixilon.kotlinglm.vec2.Vec2 import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kotlinglm.vec3.Vec3i -import de.bixilon.kotlinglm.vec3.Vec3t import de.bixilon.kotlinglm.vec3.swizzle.xy import de.bixilon.kotlinglm.vec3.swizzle.xz import de.bixilon.kotlinglm.vec3.swizzle.yz @@ -94,7 +93,7 @@ object Vec3Util { this += origin } - operator fun Vec3t.get(axis: Axes): T { + operator fun Vec3.get(axis: Axes): Float { return when (axis) { Axes.X -> x Axes.Y -> y @@ -102,7 +101,7 @@ object Vec3Util { } } - operator fun Vec3t.set(axis: Axes, value: T) { + operator fun Vec3.set(axis: Axes, value: Float) { when (axis) { Axes.X -> x = value Axes.Y -> y = value diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3dUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3dUtil.kt index d5598ace9..35d6ce4d1 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3dUtil.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3dUtil.kt @@ -21,7 +21,6 @@ import de.bixilon.kutil.math.interpolation.DoubleInterpolation.interpolateSine import de.bixilon.kutil.math.simple.DoubleMath.ceil import de.bixilon.kutil.math.simple.DoubleMath.floor import de.bixilon.minosoft.data.Axes -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.get import kotlin.math.abs object Vec3dUtil { @@ -133,4 +132,21 @@ object Vec3dUtil { fun Vec3d.length3(): Double { return x + y + z } + + + operator fun Vec3d.get(axis: Axes): Double { + return when (axis) { + Axes.X -> x + Axes.Y -> y + Axes.Z -> z + } + } + + operator fun Vec3d.set(axis: Axes, value: Double) { + when (axis) { + Axes.X -> x = value + Axes.Y -> y = value + Axes.Z -> z = value + } + } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3iUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3iUtil.kt index ccc85e6e4..239f81114 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3iUtil.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3iUtil.kt @@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kutil.primitive.IntUtil.toInt +import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.gui.rendering.util.VecUtil.inSectionHeight import de.bixilon.minosoft.gui.rendering.util.VecUtil.sectionHeight @@ -73,4 +74,20 @@ object Vec3iUtil { fun Vec3i.length2(): Int { return x * x + y * y + z * z } + + operator fun Vec3i.get(axis: Axes): Int { + return when (axis) { + Axes.X -> x + Axes.Y -> y + Axes.Z -> z + } + } + + operator fun Vec3i.set(axis: Axes, value: Int) { + when (axis) { + Axes.X -> x = value + Axes.Y -> y = value + Axes.Z -> z = value + } + } } diff --git a/src/main/java/de/bixilon/minosoft/physics/handlers/movement/SneakAdjuster.kt b/src/main/java/de/bixilon/minosoft/physics/handlers/movement/SneakAdjuster.kt index 9e5296dad..7b0405273 100644 --- a/src/main/java/de/bixilon/minosoft/physics/handlers/movement/SneakAdjuster.kt +++ b/src/main/java/de/bixilon/minosoft/physics/handlers/movement/SneakAdjuster.kt @@ -17,7 +17,7 @@ import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.registries.shapes.aabb.AABB -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.set +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.set import de.bixilon.minosoft.physics.handlers.general.AbstractEntityPhysics interface SneakAdjuster : StepAdjuster, AbstractEntityPhysics { diff --git a/src/main/java/de/bixilon/minosoft/physics/parts/CollisionMovementPhysics.kt b/src/main/java/de/bixilon/minosoft/physics/parts/CollisionMovementPhysics.kt index 3bbcca73e..490d14208 100644 --- a/src/main/java/de/bixilon/minosoft/physics/parts/CollisionMovementPhysics.kt +++ b/src/main/java/de/bixilon/minosoft/physics/parts/CollisionMovementPhysics.kt @@ -28,8 +28,8 @@ import de.bixilon.minosoft.data.registries.shapes.voxel.VoxelShape import de.bixilon.minosoft.data.world.World import de.bixilon.minosoft.data.world.chunk.chunk.Chunk import de.bixilon.minosoft.data.world.iterator.WorldIterator -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.set import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.set import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY import de.bixilon.minosoft.physics.entities.EntityPhysics import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet diff --git a/src/main/java/de/bixilon/minosoft/physics/parts/OutOfBlockPusher.kt b/src/main/java/de/bixilon/minosoft/physics/parts/OutOfBlockPusher.kt index c12892cac..aaca8e898 100644 --- a/src/main/java/de/bixilon/minosoft/physics/parts/OutOfBlockPusher.kt +++ b/src/main/java/de/bixilon/minosoft/physics/parts/OutOfBlockPusher.kt @@ -20,7 +20,7 @@ import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.world.positions.BlockPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus -import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.get +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.get import de.bixilon.minosoft.physics.entities.living.player.local.LocalPlayerPhysics object OutOfBlockPusher {