gui rendere: fix scaling bugs, pause menu: add "minosoft" text

This commit is contained in:
Bixilon 2022-01-28 20:41:00 +01:00
parent 6a5a11d151
commit 11bf04302d
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 35 additions and 19 deletions

View File

@ -33,7 +33,6 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import glm_.glm import glm_.glm
import glm_.mat4x4.Mat4 import glm_.mat4x4.Mat4
import glm_.vec2.Vec2
import glm_.vec2.Vec2i import glm_.vec2.Vec2i
class GUIRenderer( class GUIRenderer(
@ -75,15 +74,7 @@ class GUIRenderer(
} }
private fun recalculateMatrices(windowSize: Vec2i = renderWindow.window.size, scale: Float = profile.scale) { private fun recalculateMatrices(windowSize: Vec2i = renderWindow.window.size, scale: Float = profile.scale) {
val hudNormalSize = Vec2i(windowSize) scaledSize = windowSize.scale(scale)
// 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)
matrix = glm.ortho(0.0f, scaledSize.x.toFloat(), scaledSize.y.toFloat(), 0.0f) matrix = glm.ortho(0.0f, scaledSize.x.toFloat(), scaledSize.y.toFloat(), 0.0f)
matrixChange = true matrixChange = true
@ -97,7 +88,7 @@ class GUIRenderer(
} }
override fun onMouseMove(position: Vec2i) { override fun onMouseMove(position: Vec2i) {
gui.onMouseMove(position / profile.scale) gui.onMouseMove(position.scale())
} }
override fun onCharPress(char: Int) { 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<GUIRenderer> { companion object : RendererBuilder<GUIRenderer> {
override val RESOURCE_LOCATION = "minosoft:gui".toResourceLocation() override val RESOURCE_LOCATION = "minosoft:gui".toResourceLocation()

View File

@ -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.GUIRenderer
import de.bixilon.minosoft.gui.rendering.gui.elements.Element 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.gui.screen.Screen
import de.bixilon.minosoft.gui.rendering.gui.input.InputSpecialKey import de.bixilon.minosoft.gui.rendering.gui.input.InputSpecialKey
import de.bixilon.minosoft.gui.rendering.gui.input.mouse.MouseActions import de.bixilon.minosoft.gui.rendering.gui.input.mouse.MouseActions
@ -56,12 +55,14 @@ abstract class Menu(
cacheUpToDate = false cacheUpToDate = false
} }
fun addButton(button: ButtonElement) { fun add(element: Element) {
button.parent = this element.parent = this
elements += button elements += element
forceSilentApply() forceSilentApply()
} }
operator fun plusAssign(element: Element) = add(element)
override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int { override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int {
val size = size val size = size
var zUsed = super.forceRender(offset, z, consumer, options) var zUsed = super.forceRender(offset, z, consumer, options)

View File

@ -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.data.language.LanguageUtil.i18n
import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer 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.ButtonElement
import de.bixilon.minosoft.gui.rendering.gui.elements.input.button.NeutralizedButtonElement 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.gui.rendering.gui.gui.screen.menu.Menu
import de.bixilon.minosoft.util.ShutdownManager import de.bixilon.minosoft.util.ShutdownManager
import glm_.vec2.Vec2i
class PauseMenu(guiRenderer: GUIRenderer) : Menu(guiRenderer) { class PauseMenu(guiRenderer: GUIRenderer) : Menu(guiRenderer) {
init { init {
addButton(ButtonElement(guiRenderer, "menu.pause.back_to_game".i18n()) { guiRenderer.gui.pause(false) }) add(TextElement(guiRenderer, "Minosoft", HorizontalAlignments.CENTER, false, scale = 3.0f))
addButton(ButtonElement(guiRenderer, "menu.pause.options.debug".i18n(), disabled = true) { TODO() }) add(SpacerElement(guiRenderer, Vec2i(0, 20)))
addButton(NeutralizedButtonElement(guiRenderer, "menu.pause.disconnect".i18n(), "menu.pause.disconnect.confirm".i18n()) { guiRenderer.connection.network.disconnect() }) add(ButtonElement(guiRenderer, "menu.pause.back_to_game".i18n()) { guiRenderer.gui.pause(false) })
addButton(NeutralizedButtonElement(guiRenderer, "menu.pause.exit".i18n(), "menu.pause.exit.confirm".i18n()) { guiRenderer.connection.network.disconnect(); ShutdownManager.shutdown() }) 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() })
} }
} }