From f844feba1b874a946f020574fee06c5926d042f8 Mon Sep 17 00:00:00 2001 From: nea Date: Wed, 3 May 2023 01:39:27 +0200 Subject: Make proper use of matrixstack for block highlights --- .../notenoughupdates/features/world/FairySouls.kt | 2 +- .../moe/nea/notenoughupdates/util/render/block.kt | 96 +++++++++++----------- .../assets/notenoughupdates/lang/en_us.json | 4 +- 3 files changed, 54 insertions(+), 48 deletions(-) (limited to 'src/main') diff --git a/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt b/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt index b8052a6..d65af26 100644 --- a/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt +++ b/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt @@ -105,7 +105,7 @@ object FairySouls : NEUFeature, } WorldRenderLastEvent.subscribe { if (!TConfig.displaySouls) return@subscribe - renderBlocks(it.camera) { + renderBlocks(it.matrices, it.camera) { color(1F, 1F, 0F, 0.8F) currentMissingSouls.forEach { block(it.blockPos) diff --git a/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt b/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt index 9a02996..487a264 100644 --- a/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt +++ b/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt @@ -1,6 +1,7 @@ package moe.nea.notenoughupdates.util.render import com.mojang.blaze3d.systems.RenderSystem +import org.joml.Matrix4f import net.minecraft.client.gl.VertexBuffer import net.minecraft.client.render.BufferBuilder import net.minecraft.client.render.Camera @@ -8,77 +9,80 @@ import net.minecraft.client.render.GameRenderer import net.minecraft.client.render.Tessellator import net.minecraft.client.render.VertexFormat import net.minecraft.client.render.VertexFormats +import net.minecraft.client.util.math.MatrixStack import net.minecraft.util.math.BlockPos -import net.minecraft.util.math.Vec3d -class RenderBlockContext(val tesselator: Tessellator, val camPos: Vec3d) { - val buffer = tesselator.buffer +class RenderBlockContext(private val tesselator: Tessellator, private val matrixStack: MatrixStack) { + private val buffer = tesselator.buffer fun color(red: Float, green: Float, blue: Float, alpha: Float) { RenderSystem.setShaderColor(red, green, blue, alpha) } fun block(blockPos: BlockPos) { - val matrixStack = RenderSystem.getModelViewStack() matrixStack.push() - matrixStack.translate(blockPos.x - camPos.x, blockPos.y - camPos.y, blockPos.z - camPos.z) - RenderSystem.applyModelViewMatrix() + matrixStack.translate(blockPos.x.toFloat(), blockPos.y.toFloat(), blockPos.z.toFloat()) RenderSystem.setShader(GameRenderer::getPositionColorProgram) - buildCube(buffer) + buildCube(matrixStack.peek().positionMatrix, buffer) tesselator.draw() matrixStack.pop() } companion object { - fun buildCube(buf: BufferBuilder) { + private fun buildCube(matrix: Matrix4f, buf: BufferBuilder) { buf.begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR) buf.fixedColor(255, 255, 255, 255) - buf.vertex(0.0, 0.0, 0.0).next() - buf.vertex(0.0, 0.0, 1.0).next() - buf.vertex(0.0, 1.0, 1.0).next() - buf.vertex(1.0, 1.0, 0.0).next() - buf.vertex(0.0, 0.0, 0.0).next() - buf.vertex(0.0, 1.0, 0.0).next() - buf.vertex(1.0, 0.0, 1.0).next() - buf.vertex(0.0, 0.0, 0.0).next() - buf.vertex(1.0, 0.0, 0.0).next() - buf.vertex(1.0, 1.0, 0.0).next() - buf.vertex(1.0, 0.0, 0.0).next() - buf.vertex(0.0, 0.0, 0.0).next() - buf.vertex(0.0, 0.0, 0.0).next() - buf.vertex(0.0, 1.0, 1.0).next() - buf.vertex(0.0, 1.0, 0.0).next() - buf.vertex(1.0, 0.0, 1.0).next() - buf.vertex(0.0, 0.0, 1.0).next() - buf.vertex(0.0, 0.0, 0.0).next() - buf.vertex(0.0, 1.0, 1.0).next() - buf.vertex(0.0, 0.0, 1.0).next() - buf.vertex(1.0, 0.0, 1.0).next() - buf.vertex(1.0, 1.0, 1.0).next() - buf.vertex(1.0, 0.0, 0.0).next() - buf.vertex(1.0, 1.0, 0.0).next() - buf.vertex(1.0, 0.0, 0.0).next() - buf.vertex(1.0, 1.0, 1.0).next() - buf.vertex(1.0, 0.0, 1.0).next() - buf.vertex(1.0, 1.0, 1.0).next() - buf.vertex(1.0, 1.0, 0.0).next() - buf.vertex(0.0, 1.0, 0.0).next() - buf.vertex(1.0, 1.0, 1.0).next() - buf.vertex(0.0, 1.0, 0.0).next() - buf.vertex(0.0, 1.0, 1.0).next() - buf.vertex(1.0, 1.0, 1.0).next() - buf.vertex(0.0, 1.0, 1.0).next() - buf.vertex(1.0, 0.0, 1.0).next() + buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next() + buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next() buf.unfixColor() } - fun renderBlocks(camera: Camera, block: RenderBlockContext. () -> Unit) { + fun renderBlocks(matrices: MatrixStack, camera: Camera, block: RenderBlockContext. () -> Unit) { RenderSystem.disableDepthTest() RenderSystem.enableBlend() RenderSystem.defaultBlendFunc() - val ctx = RenderBlockContext(Tessellator.getInstance(), camera.pos) + matrices.push() + matrices.translate(-camera.pos.x, -camera.pos.y, -camera.pos.z) + + val ctx = RenderBlockContext(Tessellator.getInstance(), matrices) block(ctx) + matrices.pop() + VertexBuffer.unbind() RenderSystem.enableDepthTest() RenderSystem.disableBlend() diff --git a/src/main/resources/assets/notenoughupdates/lang/en_us.json b/src/main/resources/assets/notenoughupdates/lang/en_us.json index 86ca368..e9d8ea5 100644 --- a/src/main/resources/assets/notenoughupdates/lang/en_us.json +++ b/src/main/resources/assets/notenoughupdates/lang/en_us.json @@ -18,5 +18,7 @@ "notenoughupdates.sbinfo.server": "Locraw Server: %s", "notenoughupdates.sbinfo.gametype": "Locraw Gametype: %s", "notenoughupdates.sbinfo.mode": "Locraw Mode: %s", - "notenoughupdates.sbinfo.map": "Locraw Map: %s" + "notenoughupdates.sbinfo.map": "Locraw Map: %s", + "neu.config.fairysouls.show": "Show Fairy Soul Waypoints", + "neu.config.fairysouls.reset": "Reset Collected Fairy Souls" } -- cgit