From e2cbcaadb28acc12fd0325581dea5a6009a62fb7 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 22 Apr 2022 01:47:08 +0200 Subject: [PATCH] 3d text: light --- .../de/bixilon/minosoft/gui/rendering/font/CharData.kt | 8 ++++---- .../gui/rendering/font/renderer/ChatComponentRenderer.kt | 4 ++-- .../entities/renderer/sign/SignBlockEntityRenderer.kt | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt index 87d52124c..076dc96d7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt @@ -128,19 +128,19 @@ class CharData( return (width * scale).ceil } - fun render3d(transform: Mat4, mesh: WorldMesh, color: RGBColor, shadow: Boolean, italic: Boolean, bold: Boolean, strikethrough: Boolean, underlined: Boolean, scale: Float): Float { - val consumer = MeshConsumer(mesh.opaqueMesh!!, transform) + fun render3d(transform: Mat4, mesh: WorldMesh, color: RGBColor, shadow: Boolean, italic: Boolean, bold: Boolean, strikethrough: Boolean, underlined: Boolean, scale: Float, light: Int): Float { + val consumer = MeshConsumer(mesh.opaqueMesh!!, transform, light) render(Vec2i(0, 0), color, shadow, italic, bold, strikethrough, underlined, consumer, null, scale) return width.toFloat() } - private class MeshConsumer(val mesh: SingleWorldMesh, val transform: Mat4) : GUIVertexConsumer { + private class MeshConsumer(val mesh: SingleWorldMesh, val transform: Mat4, val light: Int) : GUIVertexConsumer { override val order: Array> get() = mesh.order override fun addVertex(position: Vec2t<*>, texture: AbstractTexture, uv: Vec2, tint: RGBColor, options: GUIVertexOptions?) { val transformed = transform * Vec4(position.x.toFloat() / ChatComponentRenderer.TEXT_BLOCK_RESOLUTION, -position.y.toFloat() / ChatComponentRenderer.TEXT_BLOCK_RESOLUTION, 1.0f, 1.0f) - mesh.addVertex(transformed.array, uv, texture, tint.rgb, 0xFF) + mesh.addVertex(transformed.array, uv, texture, tint.rgb, light) } override fun addCache(cache: GUIMeshCache) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt index 1c057f75f..9c8522b94 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt @@ -56,7 +56,7 @@ interface ChatComponentRenderer { } } - fun render3dFlat(renderWindow: RenderWindow, position: Vec3, scale: Float, rotation: Vec3, mesh: WorldMesh, text: ChatComponent) { + fun render3dFlat(renderWindow: RenderWindow, position: Vec3, scale: Float, rotation: Vec3, mesh: WorldMesh, text: ChatComponent, light: Int) { val rotationMatrix = Mat4() .rotateDegreesAssign(rotation) .translateAssign(Vec3(0, 0, -1)) @@ -71,7 +71,7 @@ interface ChatComponentRenderer { for ((index, char) in text.codePoints().toArray().withIndex()) { val data = renderWindow.font[char] ?: continue val color = ChatColors[index % ChatColors.VALUES.size] - val width = data.render3d(transformMatrix, mesh, color, false, false, false, false, false, scale) + Font.HORIZONTAL_SPACING + val width = data.render3d(transformMatrix, mesh, color, shadow = false, italic = false, bold = false, strikethrough = false, underlined = false, scale = scale, light = light) + Font.HORIZONTAL_SPACING transformMatrix.translateAssign(Vec3((width / TEXT_BLOCK_RESOLUTION) * scale, 0, 0)) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt index e4a0b01ce..f55c5b89a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt @@ -44,13 +44,13 @@ class SignBlockEntityRenderer( if (block is StandingSignBlock) { // println("Rendering standing sign at $position (${block.resourceLocation})") } else if (block is WallSignBlock) { - renderWallText(position, mesh, blockState) + renderWallText(position, mesh, light[6].toInt()) } return true } - private fun renderWallText(position: Vec3i, mesh: WorldMesh, blockState: BlockState) { + private fun renderWallText(position: Vec3i, mesh: WorldMesh, light: Int) { val yRotation = when (val rotation = this.blockState.properties[BlockProperties.FACING].nullCast() ?: Directions.NORTH) { Directions.SOUTH -> 0.0f Directions.EAST -> 90.0f @@ -64,7 +64,7 @@ class SignBlockEntityRenderer( val textPosition = position.toVec3 + rotationVector for (line in sign.lines) { - ChatComponentRenderer.render3dFlat(renderWindow, textPosition, TEXT_SCALE, Vec3(0.0f, yRotation, 0.0f), mesh, line) + ChatComponentRenderer.render3dFlat(renderWindow, textPosition, TEXT_SCALE, Vec3(0.0f, yRotation, 0.0f), mesh, line, light) textPosition.y -= 0.11f } }