From 1bbeb91a4e3bd55910ef5c98fcc4eb8e842bfc37 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 22 Apr 2022 17:46:26 +0200 Subject: [PATCH] 3d: fix font spacing --- .../de/bixilon/minosoft/gui/rendering/font/CharData.kt | 2 +- .../bixilon/minosoft/gui/rendering/font/FontLoader.kt | 4 +--- .../rendering/font/renderer/TextComponentRenderer.kt | 10 +++++++--- .../entities/renderer/sign/SignBlockEntityRenderer.kt | 4 ++-- 4 files changed, 11 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 55c1d7e6d..9f7a44e8f 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 @@ -130,7 +130,7 @@ class CharData( fun render3d(transform: Mat4, mesh: SingleWorldMesh, color: RGBColor, shadow: Boolean, italic: Boolean, bold: Boolean, strikethrough: Boolean, underlined: Boolean, scale: Float, light: Int): Float { val consumer = MeshConsumer(mesh, transform, light) render(Vec2i(0, 0), color, shadow, italic, bold, strikethrough, underlined, consumer, null, scale) - return width.toFloat() + return scaledWidth.toFloat() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt index 1776d470c..6afb5cac4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt @@ -39,16 +39,14 @@ object FontLoader : DefaultFactory>( val providersRaw = fontIndex["providers"].listCast>()!! val providers: Array = arrayOfNulls(providersRaw.size) - val fontLatch = CountUpAndDownLatch(1, latch) + val fontLatch = CountUpAndDownLatch(providersRaw.size, latch) for ((index, provider) in providersRaw.withIndex()) { val type = provider["type"].toResourceLocation() - fontLatch.inc() DefaultThreadPool += { providers[index] = this[type].check { "Unknown font provider type $type" }.build(renderWindow, provider) fontLatch.dec() } } - fontLatch.dec() fontLatch.await() return Font( diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt index 79bbcfb71..404d6f6e6 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt @@ -191,10 +191,14 @@ object TextComponentRenderer : ChatComponentRenderer { } override fun render3dFlat(renderWindow: RenderWindow, matrix: Mat4, scale: Float, mesh: SingleWorldMesh, text: TextComponent, light: Int) { - for ((index, char) in text.message.codePoints().toArray().withIndex()) { + val color = text.color ?: ChatColors.BLACK + val italic = text.formatting.contains(PreChatFormattingCodes.ITALIC) + val bold = text.formatting.contains(PreChatFormattingCodes.BOLD) + val strikethrough = text.formatting.contains(PreChatFormattingCodes.STRIKETHROUGH) + val underlined = text.formatting.contains(PreChatFormattingCodes.UNDERLINED) + for (char in text.message.codePoints()) { val data = renderWindow.font[char] ?: continue - val color = ChatColors[index % ChatColors.VALUES.size] - val width = data.render3d(matrix, mesh, color, shadow = false, italic = false, bold = false, strikethrough = false, underlined = false, scale = scale, light = light) + Font.HORIZONTAL_SPACING + val width = data.render3d(matrix, mesh, color, shadow = false, italic = italic, bold = bold, strikethrough = strikethrough, underlined = underlined, scale = scale, light = light) + Font.HORIZONTAL_SPACING matrix.translateAssign(Vec3((width / ChatComponentRenderer.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 5eb7834ad..9dd44c6ad 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 @@ -93,9 +93,9 @@ class SignBlockEntityRenderer( companion object { private const val PIXEL_SCALE = 1.0f / ChatComponentRenderer.TEXT_BLOCK_RESOLUTION - private const val TEXT_SCALE = 1.2f + private const val TEXT_SCALE = 1.35f private const val Z_OFFSET = 0.001f - private const val X_OFFSET = PIXEL_SCALE * 5 + private const val X_OFFSET = PIXEL_SCALE * 6 private const val Y_OFFSET = 0.03f } }