From 8eee74df5dcbbe6a0a5259819ee63c38817eb8d6 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 27 May 2021 18:39:25 +0200 Subject: [PATCH] remove VecUtil.EMPTY_VEC3, replace with Vec3.EMPTY --- .../de/bixilon/minosoft/data/player/Player.kt | 7 +++--- .../gui/rendering/chunk/VoxelShape.kt | 5 ++-- .../block/outline/BlockOutlineRenderer.kt | 4 ++-- .../gui/rendering/chunk/models/AABB.kt | 9 +++---- .../models/renderable/ElementRenderer.kt | 12 +++++----- .../gui/rendering/input/camera/Camera.kt | 5 ++-- .../gui/rendering/particle/types/Particle.kt | 24 +++++++------------ .../norender/ExplosionEmitterParticle.kt | 6 +++-- .../texture/simple/ExplosionParticle.kt | 3 ++- .../minosoft/gui/rendering/util/VecUtil.kt | 13 +++++----- .../java/de/bixilon/minosoft/util/KUtil.kt | 13 ++++++++++ 11 files changed, 56 insertions(+), 45 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/player/Player.kt b/src/main/java/de/bixilon/minosoft/data/player/Player.kt index aabd8e41c..6e66437ac 100644 --- a/src/main/java/de/bixilon/minosoft/data/player/Player.kt +++ b/src/main/java/de/bixilon/minosoft/data/player/Player.kt @@ -19,10 +19,11 @@ import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity import de.bixilon.minosoft.data.mappings.items.Item import de.bixilon.minosoft.data.mappings.other.containers.Container import de.bixilon.minosoft.data.mappings.other.containers.PlayerInventory -import de.bixilon.minosoft.gui.rendering.util.VecUtil +import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.synchronizedMapOf +import glm_.vec3.Vec3 import glm_.vec3.Vec3i class Player( @@ -31,8 +32,8 @@ class Player( ) { val healthCondition = PlayerHealthCondition() val experienceCondition = PlayerExperienceCondition() - var spawnPosition: Vec3i = VecUtil.EMPTY_VEC3I - val entity: PlayerEntity = PlayerEntity(connection, connection.registries.entityTypeRegistry[PlayerEntity.RESOURCE_LOCATION]!!, VecUtil.EMPTY_VEC3, EntityRotation(0.0, 0.0), account.username) + var spawnPosition: Vec3i = Vec3i.EMPTY + val entity: PlayerEntity = PlayerEntity(connection, connection.registries.entityTypeRegistry[PlayerEntity.RESOURCE_LOCATION]!!, Vec3.EMPTY, EntityRotation(0.0, 0.0), account.username) @Deprecated(message = "Will be replaced with some kind of teleport manager, ...") var isSpawnConfirmed = false diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt index ba7935763..a3e8075d5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/VoxelShape.kt @@ -6,7 +6,8 @@ import com.google.gson.JsonPrimitive import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.gui.rendering.chunk.models.AABB -import de.bixilon.minosoft.gui.rendering.util.VecUtil +import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY +import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE import de.bixilon.minosoft.gui.rendering.util.VecUtil.getMinDistanceDirection import glm_.vec3.Vec3 import glm_.vec3.Vec3i @@ -99,7 +100,7 @@ class VoxelShape(private val aabbs: MutableList = mutableListOf()) : Itera companion object { val EMPTY = VoxelShape() - val FULL = VoxelShape(mutableListOf(AABB(VecUtil.EMPTY_VEC3, VecUtil.ONES_VEC3))) + val FULL = VoxelShape(mutableListOf(AABB(Vec3.EMPTY, Vec3.ONE))) } override fun iterator(): Iterator { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/block/outline/BlockOutlineRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/block/outline/BlockOutlineRenderer.kt index 8f173ceb4..866206d03 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/block/outline/BlockOutlineRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/block/outline/BlockOutlineRenderer.kt @@ -24,7 +24,7 @@ import de.bixilon.minosoft.gui.rendering.RendererBuilder import de.bixilon.minosoft.gui.rendering.chunk.VoxelShape import de.bixilon.minosoft.gui.rendering.chunk.models.renderable.ElementRenderer import de.bixilon.minosoft.gui.rendering.shader.Shader -import de.bixilon.minosoft.gui.rendering.util.VecUtil +import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY import de.bixilon.minosoft.gui.rendering.util.VecUtil.getWorldOffset import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3 import de.bixilon.minosoft.protocol.network.connection.PlayConnection @@ -55,7 +55,7 @@ class BlockOutlineRenderer( private fun drawLine(start: Vec3, end: Vec3, mesh: BlockOutlineMesh) { val direction = (end - start).normalize() val normal1 = Vec3(direction.z, direction.z, direction.x - direction.y) - if (normal1 == VecUtil.EMPTY_VEC3) { + if (normal1 == Vec3.EMPTY) { normal1.x = normal1.z normal1.z = direction.z } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt index c642ac992..59a251eeb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/AABB.kt @@ -4,7 +4,8 @@ import com.google.gson.JsonArray import com.google.gson.JsonElement import com.google.gson.JsonObject import de.bixilon.minosoft.data.Axes -import de.bixilon.minosoft.gui.rendering.util.VecUtil +import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY +import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE import de.bixilon.minosoft.gui.rendering.util.VecUtil.get import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3 import glm_.Java.Companion.glm @@ -17,8 +18,8 @@ class AABB { val max: Vec3 constructor(jsonData: JsonObject) { - min = readPositionFromJson(jsonData["from"], VecUtil.EMPTY_VEC3) - max = readPositionFromJson(jsonData["to"], VecUtil.ONES_VEC3) + min = readPositionFromJson(jsonData["from"], Vec3.EMPTY) + max = readPositionFromJson(jsonData["to"], Vec3.ONE) } private fun readPositionFromJson(jsonData: JsonElement, default: Vec3): Vec3 { @@ -139,7 +140,7 @@ class AABB { } fun raycast(position: Vec3, direction: Vec3): Float { - if (max - min == VecUtil.ONES_VEC3 || position in this) { + if (max - min == Vec3.ONE || position in this) { return 0f } var tMin = 0f diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt index d96ab91af..46a2c806b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt @@ -26,7 +26,7 @@ import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelElement import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelFace import de.bixilon.minosoft.gui.rendering.textures.Texture import de.bixilon.minosoft.gui.rendering.textures.TextureTransparencies -import de.bixilon.minosoft.gui.rendering.util.VecUtil +import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.rotate import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3 @@ -129,7 +129,7 @@ class ElementRenderer( } fun getRotatedDirection(rotation: Vec3, direction: Directions): Directions { - if (rotation == VecUtil.EMPTY_VEC3) { + if (rotation == Vec3.EMPTY) { return direction } var rotatedDirectionVector = direction.floatDirectionVector.rotate(-rotation.x, Axes.X) @@ -138,12 +138,12 @@ class ElementRenderer( } fun rotatePositionsAxes(positions: Array, angles: Vec3, rescale: Boolean) { - if (angles == VecUtil.EMPTY_VEC3) { + if (angles == Vec3.EMPTY) { return } - BlockModelElement.rotatePositions(positions, Axes.X, -angles.x, VecUtil.EMPTY_VEC3, rescale) - BlockModelElement.rotatePositions(positions, Axes.Y, angles.y, VecUtil.EMPTY_VEC3, rescale) - BlockModelElement.rotatePositions(positions, Axes.Z, -angles.z, VecUtil.EMPTY_VEC3, rescale) + BlockModelElement.rotatePositions(positions, Axes.X, -angles.x, Vec3.EMPTY, rescale) + BlockModelElement.rotatePositions(positions, Axes.Y, angles.y, Vec3.EMPTY, rescale) + BlockModelElement.rotatePositions(positions, Axes.Z, -angles.z, Vec3.EMPTY, rescale) } val POSITION_1 = Vec3(-0.5f, -0.5f, -0.5f) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt index aca515576..f1a007b54 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt @@ -26,6 +26,7 @@ import de.bixilon.minosoft.gui.rendering.modding.events.FrustumChangeEvent import de.bixilon.minosoft.gui.rendering.modding.events.ScreenResizeEvent import de.bixilon.minosoft.gui.rendering.sky.SkyRenderer import de.bixilon.minosoft.gui.rendering.util.VecUtil +import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.chunkPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.floor @@ -250,7 +251,7 @@ class Camera( if (renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_RIGHT)) { movementDirection += cameraRight } - val deltaMovement = if (movementDirection != VecUtil.EMPTY_VEC3) { + val deltaMovement = if (movementDirection != Vec3.EMPTY) { movementDirection.normalize() * cameraSpeed } else { movementDirection @@ -267,7 +268,7 @@ class Camera( playerEntity.velocity.y += 0.75f * ProtocolDefinition.GRAVITY playerEntity.onGround = false } - if (deltaMovement != VecUtil.EMPTY_VEC3) { + if (deltaMovement != Vec3.EMPTY) { playerEntity.move(deltaMovement, false) recalculateViewProjectionMatrix() currentPositionSent = false diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt index c7e7ac9b9..1b36ba35e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt @@ -21,10 +21,16 @@ import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE import de.bixilon.minosoft.gui.rendering.util.VecUtil.clear import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition +import de.bixilon.minosoft.util.KUtil.millis import glm_.vec3.Vec3 import kotlin.random.Random -abstract class Particle(protected val connection: PlayConnection, protected val particleRenderer: ParticleRenderer, protected val position: Vec3, protected val data: ParticleData) { +abstract class Particle( + protected val connection: PlayConnection, + protected val particleRenderer: ParticleRenderer, + protected val position: Vec3, + protected val data: ParticleData, +) { protected val random = Random private var lastTickTime = -1L @@ -33,21 +39,7 @@ abstract class Particle(protected val connection: PlayConnection, protected val var dead = false var age: Int = 0 protected set - var tickAge: Int - get() = age / ProtocolDefinition.TICK_TIME - set(value) { - age = value * ProtocolDefinition.TICK_TIME - } - var maxAge: Int = Integer.MAX_VALUE - var maxTickAge: Int - get() = maxAge / ProtocolDefinition.TICK_TIME - set(value) { - maxAge = value * ProtocolDefinition.TICK_TIME - } - - init { - maxTickAge = (4.0f / (random.nextFloat() * 0.9f + 0.1f)).toInt() - } + var maxAge: Int = (4.0f / (random.nextFloat() * 0.9f + 0.1f)).millis // moving val friction = Vec3.EMPTY diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt index 077427b7a..9e0f4e4ca 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/ExplosionEmitterParticle.kt @@ -21,13 +21,15 @@ import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.Ex import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.util.KUtil.asResourceLocation +import de.bixilon.minosoft.util.KUtil.millis +import de.bixilon.minosoft.util.KUtil.ticks import glm_.vec3.Vec3 class ExplosionEmitterParticle(connection: PlayConnection, particleRenderer: ParticleRenderer, position: Vec3, data: ParticleData) : NoRenderParticle(connection, particleRenderer, position, data) { private val explosionParticleType = connection.registries.particleTypeRegistry[ExplosionParticle]!! init { - maxTickAge = 8 + maxAge = 8.millis } @@ -36,7 +38,7 @@ class ExplosionEmitterParticle(connection: PlayConnection, particleRenderer: Par for (i in 0 until 6) { val position = position + { (random.nextFloat() - random.nextFloat()) * 4.0f } - particleRenderer.add(ExplosionParticle(connection, particleRenderer, position, explosionParticleType.simple(), (tickAge.toFloat() / maxTickAge))) + particleRenderer.add(ExplosionParticle(connection, particleRenderer, position, explosionParticleType.simple(), (age.ticks.toFloat() / maxAge.ticks))) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/ExplosionParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/ExplosionParticle.kt index 5836969f5..b0bae4cc5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/ExplosionParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/ExplosionParticle.kt @@ -20,12 +20,13 @@ import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory import de.bixilon.minosoft.gui.rendering.particle.ParticleRenderer import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.util.KUtil.asResourceLocation +import de.bixilon.minosoft.util.KUtil.ticks import glm_.vec3.Vec3 class ExplosionParticle(connection: PlayConnection, particleRenderer: ParticleRenderer, position: Vec3, data: ParticleData, val power: Float = 1.0f) : SimpleTextureParticle(connection, particleRenderer, position, data) { init { - maxTickAge = 6 + random.nextInt(4) + maxAge = (6 + random.nextInt(4)).ticks val gray = random.nextFloat() * 0.6f + 0.4f color = gray.asGray() scale = 2.0f * (power - gray * 0.5f) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt index 9cdcff005..e71694e5b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/VecUtil.kt @@ -37,15 +37,14 @@ import glm_.vec3.Vec3 import glm_.vec3.Vec3i object VecUtil { - val EMPTY_VEC3 = Vec3(0, 0, 0) - val EMPTY_VEC3I = Vec3i(0, 0, 0) - val ONES_VEC3 = Vec3(1) - val Vec3.Companion.EMPTY: Vec3 - get() = Vec3(EMPTY_VEC3) + get() = Vec3(0, 0, 0) + + val Vec3i.Companion.EMPTY: Vec3i + get() = Vec3i(0, 0, 0) val Vec3.Companion.ONE: Vec3 - get() = Vec3(ONES_VEC3) + get() = Vec3(1, 1, 1) fun JsonElement.toVec3(): Vec3 { return when (this) { @@ -221,7 +220,7 @@ object VecUtil { fun Vec3i.getWorldOffset(block: Block): Vec3 { if (block.randomOffsetType == null || !Minosoft.config.config.game.other.flowerRandomOffset) { - return EMPTY_VEC3 + return Vec3.EMPTY } val positionHash = generatePositionHash(x, 0, z) diff --git a/src/main/java/de/bixilon/minosoft/util/KUtil.kt b/src/main/java/de/bixilon/minosoft/util/KUtil.kt index 50f93b43d..2017e8532 100644 --- a/src/main/java/de/bixilon/minosoft/util/KUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/KUtil.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.util import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.enum.AliasableEnum import sun.misc.Unsafe import java.util.* @@ -113,4 +114,16 @@ object KUtil { fun Random.nextFloat(min: Float = Float.MIN_VALUE, max: Float = Float.MAX_VALUE): Float { return min + this.nextFloat() * (max - min) } + + /** + * Converts millis to ticks + */ + val Number.ticks: Int + get() = this.toInt() / ProtocolDefinition.TICK_TIME + + /** + * Converts ticks to millis + */ + val Number.millis: Int + get() = this.toInt() * ProtocolDefinition.TICK_TIME }