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 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<GUIRenderer> {
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.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)

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.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() })
}
}