diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt index e932ec7dc..c30e74577 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/GUIRenderer.kt @@ -33,7 +33,6 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.util.KUtil.toResourceLocation import glm_.glm import glm_.mat4x4.Mat4 -import glm_.vec2.Vec2 import glm_.vec2.Vec2i class GUIRenderer( @@ -75,15 +74,7 @@ class GUIRenderer( } private fun recalculateMatrices(windowSize: Vec2i = renderWindow.window.size, scale: Float = profile.scale) { - val hudNormalSize = Vec2i(windowSize) - // ToDo: This is just a dirty workaround and does not fix the problem at all - if (hudNormalSize.x % 2 != 0) { - hudNormalSize.x-- - } - if (hudNormalSize.y % 2 != 0) { - hudNormalSize.y-- - } - scaledSize = Vec2i(Vec2(hudNormalSize) / scale) + scaledSize = windowSize.scale(scale) matrix = glm.ortho(0.0f, scaledSize.x.toFloat(), scaledSize.y.toFloat(), 0.0f) matrixChange = true @@ -97,7 +88,7 @@ class GUIRenderer( } override fun onMouseMove(position: Vec2i) { - gui.onMouseMove(position / profile.scale) + gui.onMouseMove(position.scale()) } override fun onCharPress(char: Int) { @@ -117,6 +108,24 @@ class GUIRenderer( } } + private fun Vec2i.scale(scale: Float = profile.scale): Vec2i { + val output = Vec2i(this) + // ToDo: This is just a dirty workaround and does not fix the problem at all + while (output.x % scale.toInt() != 0) { + output.x-- + if (output.x < 0) { + output.x = 0 + } + } + while (output.y % scale.toInt() != 0) { + output.y-- + if (output.y < 0) { + output.y = 0 + } + } + return output / scale + } + companion object : RendererBuilder { override val RESOURCE_LOCATION = "minosoft:gui".toResourceLocation() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt index 17689f911..9929aeff3 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.gui.rendering.gui.gui.screen.menu import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer import de.bixilon.minosoft.gui.rendering.gui.elements.Element -import de.bixilon.minosoft.gui.rendering.gui.elements.input.button.ButtonElement import de.bixilon.minosoft.gui.rendering.gui.gui.screen.Screen import de.bixilon.minosoft.gui.rendering.gui.input.InputSpecialKey import de.bixilon.minosoft.gui.rendering.gui.input.mouse.MouseActions @@ -56,12 +55,14 @@ abstract class Menu( cacheUpToDate = false } - fun addButton(button: ButtonElement) { - button.parent = this - elements += button + fun add(element: Element) { + element.parent = this + elements += element forceSilentApply() } + operator fun plusAssign(element: Element) = add(element) + override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int { val size = size var zUsed = super.forceRender(offset, z, consumer, options) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt index d740cf23c..723cbda62 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt @@ -15,17 +15,23 @@ package de.bixilon.minosoft.gui.rendering.gui.gui.screen.menu.pause import de.bixilon.minosoft.data.language.LanguageUtil.i18n import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer +import de.bixilon.minosoft.gui.rendering.gui.elements.HorizontalAlignments import de.bixilon.minosoft.gui.rendering.gui.elements.input.button.ButtonElement import de.bixilon.minosoft.gui.rendering.gui.elements.input.button.NeutralizedButtonElement +import de.bixilon.minosoft.gui.rendering.gui.elements.spacer.SpacerElement +import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement import de.bixilon.minosoft.gui.rendering.gui.gui.screen.menu.Menu import de.bixilon.minosoft.util.ShutdownManager +import glm_.vec2.Vec2i class PauseMenu(guiRenderer: GUIRenderer) : Menu(guiRenderer) { init { - addButton(ButtonElement(guiRenderer, "menu.pause.back_to_game".i18n()) { guiRenderer.gui.pause(false) }) - addButton(ButtonElement(guiRenderer, "menu.pause.options.debug".i18n(), disabled = true) { TODO() }) - addButton(NeutralizedButtonElement(guiRenderer, "menu.pause.disconnect".i18n(), "menu.pause.disconnect.confirm".i18n()) { guiRenderer.connection.network.disconnect() }) - addButton(NeutralizedButtonElement(guiRenderer, "menu.pause.exit".i18n(), "menu.pause.exit.confirm".i18n()) { guiRenderer.connection.network.disconnect(); ShutdownManager.shutdown() }) + add(TextElement(guiRenderer, "Minosoft", HorizontalAlignments.CENTER, false, scale = 3.0f)) + add(SpacerElement(guiRenderer, Vec2i(0, 20))) + add(ButtonElement(guiRenderer, "menu.pause.back_to_game".i18n()) { guiRenderer.gui.pause(false) }) + add(ButtonElement(guiRenderer, "menu.pause.options.debug".i18n(), disabled = true) { TODO() }) + add(NeutralizedButtonElement(guiRenderer, "menu.pause.disconnect".i18n(), "menu.pause.disconnect.confirm".i18n()) { guiRenderer.connection.network.disconnect() }) + add(NeutralizedButtonElement(guiRenderer, "menu.pause.exit".i18n(), "menu.pause.exit.confirm".i18n()) { guiRenderer.connection.network.disconnect(); ShutdownManager.shutdown() }) } }