From 18f77e89c189296ec77227c6fab8c987f9a6fb13 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 29 May 2023 02:56:37 +0200 Subject: [PATCH] various memory patches also small preparation for kutil 1.22 --- .../java/de/bixilon/minosoft/data/world/World.kt | 16 +++++++--------- .../data/world/iterator/WorldIterator.kt | 3 +-- .../minosoft/gui/rendering/gui/mesh/GUIMesh.kt | 6 ++---- .../minosoft/gui/rendering/util/VecUtil.kt | 4 ++++ .../gui/rendering/util/vec/vec3/Vec3dUtil.kt | 7 +++++++ .../minosoft/modding/event/master/EventMaster.kt | 6 ++++-- .../minosoft/physics/EntityPositionInfo.kt | 6 +++--- 7 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.kt b/src/main/java/de/bixilon/minosoft/data/world/World.kt index 67848cf43..d32a47f6b 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/World.kt @@ -179,21 +179,19 @@ class World( val origin = connection.player.physics.positionInfo.blockPosition val chunk = this.chunks[origin.chunkPosition] ?: return - val offset = Vec3i.EMPTY + val position = Vec3i.EMPTY val chunkDelta = Vec2i.EMPTY for (i in 0 until 667) { - randomTick(16, origin, offset, chunkDelta, chunk) - randomTick(32, origin, offset, chunkDelta, chunk) + randomTick(16, origin, position, chunkDelta, chunk) + randomTick(32, origin, position, chunkDelta, chunk) } } - private fun randomTick(radius: Int, origin: BlockPosition, offset: BlockPosition, chunkDelta: Vec2i, chunk: Chunk) { - offset.x = random.nextInt(-radius, radius) - offset.y = random.nextInt(-radius, radius) - offset.z = random.nextInt(-radius, radius) - - val position = origin + offset + private fun randomTick(radius: Int, origin: BlockPosition, position: BlockPosition, chunkDelta: Vec2i, chunk: Chunk) { + position.x = origin.x + random.nextInt(-radius, radius) + position.y = origin.x + random.nextInt(-radius, radius) + position.z = origin.x + random.nextInt(-radius, radius) chunkDelta.x = (origin.x - position.x) shr 4 chunkDelta.y = (origin.z - position.z) shr 4 diff --git a/src/main/java/de/bixilon/minosoft/data/world/iterator/WorldIterator.kt b/src/main/java/de/bixilon/minosoft/data/world/iterator/WorldIterator.kt index 80a36a62a..f9c95d6a9 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/iterator/WorldIterator.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/iterator/WorldIterator.kt @@ -26,7 +26,6 @@ import de.bixilon.minosoft.data.registries.shapes.aabb.AABB import de.bixilon.minosoft.data.world.World import de.bixilon.minosoft.data.world.chunk.chunk.Chunk import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.chunkPosition -import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.inChunkPosition class WorldIterator( private val iterator: Iterator, @@ -57,7 +56,7 @@ class WorldIterator( this.chunk = chunk } - val state = chunk[position.inChunkPosition] ?: continue + val state = chunk[position.x and 0x0F, position.y, position.z and 0x0F] ?: continue this.next = BlockPair(position, state, chunk) return true } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt index da7280ed5..158b7af2b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt @@ -70,10 +70,8 @@ class GUIMesh( } } - data.add(outPosition.x) - data.add(outPosition.y) - data.add(uv.x) - data.add(uv.y) + data.add(outPosition.array) + data.add(uv.array) data.add(texture.shaderId.buffer()) data.add(color.buffer()) } 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 4fe1c7214..53f99f4b8 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 @@ -205,9 +205,13 @@ object VecUtil { val Vec3t.toVec3: Vec3 get() = Vec3(this) + val Vec3d.toVec3: Vec3 + get() = Vec3(this) val Vec3t.toVec3d: Vec3d get() = Vec3d(this) + val Vec3.toVec3d: Vec3d + get() = Vec3d(this) fun Vec3d.Companion.horizontal(xz: () -> Double, y: Double): Vec3d { 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 35d6ce4d1..ccee36d48 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 @@ -149,4 +149,11 @@ object Vec3dUtil { Axes.Z -> z = value } } + + fun Vec3d.addY(y: Double): Vec3d { + val res = Vec3d(this) + res.y += y + + return res + } } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt b/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt index fd12a12ce..a5833cb83 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt @@ -57,8 +57,10 @@ open class EventMaster(vararg parents: AbstractEventMaster) : AbstractEventMaste override fun fire(event: Event): Boolean { parentLock.acquire() - for (parent in parents) { - parent.fire(event) + if (parents.isNotEmpty()) { + for (parent in parents) { + parent.fire(event) + } } parentLock.release() diff --git a/src/main/java/de/bixilon/minosoft/physics/EntityPositionInfo.kt b/src/main/java/de/bixilon/minosoft/physics/EntityPositionInfo.kt index 6372d61e9..fde9954ad 100644 --- a/src/main/java/de/bixilon/minosoft/physics/EntityPositionInfo.kt +++ b/src/main/java/de/bixilon/minosoft/physics/EntityPositionInfo.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.physics -import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.registries.biomes.Biome import de.bixilon.minosoft.data.registries.blocks.state.BlockState @@ -27,6 +26,7 @@ import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.sectionHeight import de.bixilon.minosoft.data.world.positions.InChunkPosition import de.bixilon.minosoft.data.world.positions.InChunkSectionPosition import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY +import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.addY import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.blockPosition import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY import de.bixilon.minosoft.physics.entities.EntityPhysics @@ -54,11 +54,11 @@ class EntityPositionInfo( val blockPosition = position.blockPosition val chunkPosition = blockPosition.chunkPosition val sectionHeight = blockPosition.sectionHeight - val eyePosition = (position + Vec3d(0.0f, physics.entity.eyeHeight, 0.0f)).blockPosition + val eyePosition = position.addY(physics.entity.eyeHeight.toDouble()).blockPosition val inChunkPosition = blockPosition.inChunkPosition val inSectionPosition = blockPosition.inChunkSectionPosition - val velocityPosition = Vec3i(blockPosition.x, position.y - 0.5000001, blockPosition.z) + val velocityPosition = Vec3i(blockPosition.x, (position.y - 0.5000001).toInt(), blockPosition.z) val chunks = physics.entity.connection.world.chunks val revision = chunks.revision