mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-12 17:07:55 -04:00
make some GridLayout final again
This commit is contained in:
parent
8bd1686593
commit
17e2801465
@ -32,3 +32,8 @@
|
|||||||
## ToDo:
|
## ToDo:
|
||||||
|
|
||||||
- make `TextElement`, `GridLayout` final
|
- make `TextElement`, `GridLayout` final
|
||||||
|
- TextInput
|
||||||
|
- Keyboard navigation
|
||||||
|
- Chat
|
||||||
|
- Inventory
|
||||||
|
- Pause menu
|
||||||
|
@ -24,7 +24,7 @@ import glm_.vec2.Vec2i
|
|||||||
import java.lang.Integer.min
|
import java.lang.Integer.min
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
||||||
open class GridLayout(guiRenderer: GUIRenderer, val grid: Vec2i) : Element(guiRenderer) {
|
class GridLayout(guiRenderer: GUIRenderer, val grid: Vec2i) : Element(guiRenderer) {
|
||||||
val columnConstraints: Array<GridColumnConstraint> = Array(grid.x) { GridColumnConstraint() }
|
val columnConstraints: Array<GridColumnConstraint> = Array(grid.x) { GridColumnConstraint() }
|
||||||
val rowConstraints: Array<GridRowConstraint> = Array(grid.y) { GridRowConstraint() }
|
val rowConstraints: Array<GridRowConstraint> = Array(grid.y) { GridRowConstraint() }
|
||||||
|
|
||||||
|
@ -24,6 +24,6 @@ class PauseMenu(guiRenderer: GUIRenderer) : Menu(guiRenderer) {
|
|||||||
init {
|
init {
|
||||||
addButton(ButtonElement(guiRenderer, "Back to game") { guiRenderer.gui.pause(false) })
|
addButton(ButtonElement(guiRenderer, "Back to game") { guiRenderer.gui.pause(false) })
|
||||||
addButton(ConfirmButtonElement(guiRenderer, "§cDisconnect", "§cClick again to disconnect!") { guiRenderer.connection.network.disconnect() })
|
addButton(ConfirmButtonElement(guiRenderer, "§cDisconnect", "§cClick again to disconnect!") { guiRenderer.connection.network.disconnect() })
|
||||||
addButton(ConfirmButtonElement(guiRenderer, "§4Exit", "§4Click again to exit!") { ShutdownManager.shutdown() })
|
addButton(ConfirmButtonElement(guiRenderer, "§4Exit", "§4Click again to exit!") { guiRenderer.connection.network.disconnect(); ShutdownManager.shutdown() })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,26 +17,31 @@ import de.bixilon.minosoft.data.registries.ResourceLocation
|
|||||||
import de.bixilon.minosoft.data.text.ChatColors
|
import de.bixilon.minosoft.data.text.ChatColors
|
||||||
import de.bixilon.minosoft.data.text.TextComponent
|
import de.bixilon.minosoft.data.text.TextComponent
|
||||||
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.LayoutedElement
|
import de.bixilon.minosoft.gui.rendering.gui.elements.LayoutedElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement
|
import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedGUIElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedGUIElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.Drawable
|
import de.bixilon.minosoft.gui.rendering.renderer.Drawable
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class BreakProgressHUDElement(guiRenderer: GUIRenderer) : TextElement(guiRenderer, ""), LayoutedElement, Drawable {
|
class BreakProgressHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Drawable {
|
||||||
|
private val textElement = TextElement(guiRenderer, "").apply { parent = this@BreakProgressHUDElement }
|
||||||
private val breakInteractionHandler = guiRenderer.renderWindow.inputHandler.interactionManager.`break`
|
private val breakInteractionHandler = guiRenderer.renderWindow.inputHandler.interactionManager.`break`
|
||||||
|
|
||||||
override val layoutOffset: Vec2i
|
override val layoutOffset: Vec2i
|
||||||
get() = Vec2i((guiRenderer.scaledSize.x / 2) + CrosshairHUDElement.CROSSHAIR_SIZE / 2 + 5, (guiRenderer.scaledSize.y - super.size.y) / 2)
|
get() = Vec2i((guiRenderer.scaledSize.x / 2) + CrosshairHUDElement.CROSSHAIR_SIZE / 2 + 5, (guiRenderer.scaledSize.y - textElement.size.y) / 2)
|
||||||
|
|
||||||
|
|
||||||
private var percent = -1
|
private var percent = -1
|
||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
val breakProgress = breakInteractionHandler.breakProgress
|
val breakProgress = breakInteractionHandler.breakProgress
|
||||||
if (breakProgress <= 0 || breakProgress >= 1.0) {
|
if (breakProgress <= 0 || breakProgress >= 1.0) {
|
||||||
super.text = ""
|
textElement.text = ""
|
||||||
this.percent = -1
|
this.percent = -1
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -44,7 +49,7 @@ class BreakProgressHUDElement(guiRenderer: GUIRenderer) : TextElement(guiRendere
|
|||||||
if (percent == this.percent) {
|
if (percent == this.percent) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
super.text = TextComponent("$percent%").apply {
|
textElement.text = TextComponent("$percent%").apply {
|
||||||
color = when {
|
color = when {
|
||||||
percent <= 30 -> ChatColors.RED
|
percent <= 30 -> ChatColors.RED
|
||||||
percent <= 70 -> ChatColors.YELLOW
|
percent <= 70 -> ChatColors.YELLOW
|
||||||
@ -54,6 +59,19 @@ class BreakProgressHUDElement(guiRenderer: GUIRenderer) : TextElement(guiRendere
|
|||||||
this.percent = percent
|
this.percent = percent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int {
|
||||||
|
return textElement.forceRender(offset, z, consumer, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onChildChange(child: Element) {
|
||||||
|
forceSilentApply()
|
||||||
|
super.onChildChange(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun forceSilentApply() {
|
||||||
|
cacheUpToDate = false
|
||||||
|
}
|
||||||
|
|
||||||
companion object : HUDBuilder<LayoutedGUIElement<BreakProgressHUDElement>> {
|
companion object : HUDBuilder<LayoutedGUIElement<BreakProgressHUDElement>> {
|
||||||
override val RESOURCE_LOCATION: ResourceLocation = "minosoft:progress_indicator".toResourceLocation()
|
override val RESOURCE_LOCATION: ResourceLocation = "minosoft:progress_indicator".toResourceLocation()
|
||||||
|
|
||||||
|
@ -38,6 +38,8 @@ import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement
|
|||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable
|
import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedGUIElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedGUIElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions
|
||||||
import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent
|
import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent
|
||||||
import de.bixilon.minosoft.gui.rendering.particle.ParticleRenderer
|
import de.bixilon.minosoft.gui.rendering.particle.ParticleRenderer
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY
|
||||||
@ -55,15 +57,16 @@ import glm_.vec2.Vec2i
|
|||||||
import glm_.vec4.Vec4i
|
import glm_.vec4.Vec4i
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class DebugHUDElement(guiRenderer: GUIRenderer) : GridLayout(guiRenderer, Vec2i(3, 1)), LayoutedElement, Initializable {
|
class DebugHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Initializable {
|
||||||
private val connection = renderWindow.connection
|
private val connection = renderWindow.connection
|
||||||
|
private val layout = GridLayout(guiRenderer, Vec2i(3, 1)).apply { parent = this@DebugHUDElement }
|
||||||
override val layoutOffset: Vec2i = Vec2i.EMPTY
|
override val layoutOffset: Vec2i = Vec2i.EMPTY
|
||||||
|
|
||||||
init {
|
init {
|
||||||
columnConstraints[0].apply {
|
layout.columnConstraints[0].apply {
|
||||||
grow = GridGrow.NEVER
|
grow = GridGrow.NEVER
|
||||||
}
|
}
|
||||||
columnConstraints[2].apply {
|
layout.columnConstraints[2].apply {
|
||||||
grow = GridGrow.NEVER
|
grow = GridGrow.NEVER
|
||||||
alignment = HorizontalAlignments.RIGHT
|
alignment = HorizontalAlignments.RIGHT
|
||||||
}
|
}
|
||||||
@ -73,8 +76,8 @@ class DebugHUDElement(guiRenderer: GUIRenderer) : GridLayout(guiRenderer, Vec2i(
|
|||||||
|
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
this[Vec2i(0, 0)] = initLeft()
|
layout[Vec2i(0, 0)] = initLeft()
|
||||||
this[Vec2i(2, 0)] = initRight()
|
layout[Vec2i(2, 0)] = initRight()
|
||||||
|
|
||||||
this.prefMaxSize = Vec2i(-1, Int.MAX_VALUE)
|
this.prefMaxSize = Vec2i(-1, Int.MAX_VALUE)
|
||||||
this.ignoreDisplaySize = true
|
this.ignoreDisplaySize = true
|
||||||
@ -285,6 +288,23 @@ class DebugHUDElement(guiRenderer: GUIRenderer) : GridLayout(guiRenderer, Vec2i(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int {
|
||||||
|
return layout.forceRender(offset, z, consumer, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun forceSilentApply() {
|
||||||
|
cacheUpToDate = false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onChildChange(child: Element) {
|
||||||
|
super.onChildChange(child)
|
||||||
|
forceSilentApply()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun tick() {
|
||||||
|
layout.tick()
|
||||||
|
}
|
||||||
|
|
||||||
companion object : HUDBuilder<LayoutedGUIElement<DebugHUDElement>> {
|
companion object : HUDBuilder<LayoutedGUIElement<DebugHUDElement>> {
|
||||||
override val RESOURCE_LOCATION: ResourceLocation = "minosoft:debug_hud".toResourceLocation()
|
override val RESOURCE_LOCATION: ResourceLocation = "minosoft:debug_hud".toResourceLocation()
|
||||||
override val ENABLE_KEY_BINDING_NAME: ResourceLocation = "minosoft:enable_debug_hud".toResourceLocation()
|
override val ENABLE_KEY_BINDING_NAME: ResourceLocation = "minosoft:enable_debug_hud".toResourceLocation()
|
||||||
|
@ -67,7 +67,7 @@
|
|||||||
<Text text="Version abc Other text "/>
|
<Text text="Version abc Other text "/>
|
||||||
</TextFlow>
|
</TextFlow>
|
||||||
<TextArea fx:id="copyrightFX" editable="false"
|
<TextArea fx:id="copyrightFX" editable="false"
|
||||||
text="Minosoft Copyright (C) 2021 Moritz Zwerger and contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. This software is not affiliated with Mojang AB, the original developer of Minecraft."
|
text="Minosoft Copyright (C) 2020-2022 Moritz Zwerger and contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. This software is not affiliated with Mojang AB, the original developer of Minecraft."
|
||||||
wrapText="true" GridPane.rowIndex="2">
|
wrapText="true" GridPane.rowIndex="2">
|
||||||
<GridPane.margin>
|
<GridPane.margin>
|
||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user