mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 19:35:00 -04:00
restructure hud renderer
This commit is contained in:
parent
f1ca745c50
commit
1dc2323073
21
src/main/java/de/bixilon/minosoft/gui/rendering/Drawable.kt
Normal file
21
src/main/java/de/bixilon/minosoft/gui/rendering/Drawable.kt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Minosoft
|
||||||
|
* Copyright (C) 2021 Moritz Zwerger
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.bixilon.minosoft.gui.rendering
|
||||||
|
|
||||||
|
interface Drawable {
|
||||||
|
/**
|
||||||
|
* Functions gets called every frame
|
||||||
|
*/
|
||||||
|
fun draw()
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Minosoft
|
||||||
|
* Copyright (C) 2021 Moritz Zwerger
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.bixilon.minosoft.gui.rendering.gui.hud
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||||
|
|
||||||
|
interface HUDElement {
|
||||||
|
val hudRenderer: HUDRenderer
|
||||||
|
val renderWindow: RenderWindow
|
||||||
|
var enabled: Boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the element (e.g. getting atlas elements, creating shaders, creating textures, etc)
|
||||||
|
*/
|
||||||
|
fun init() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Phase after everything is initialized. May be used to load shaders, ...
|
||||||
|
* Can not be used to load static textures
|
||||||
|
*/
|
||||||
|
fun postInit() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Functions that gets called every tick
|
||||||
|
*/
|
||||||
|
fun tick() {}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Functions that sets new texts, changes data in the element
|
||||||
|
* May be used to poll data (see Pollable)
|
||||||
|
*/
|
||||||
|
fun apply() {}
|
||||||
|
}
|
@ -18,17 +18,25 @@ import de.bixilon.minosoft.config.key.KeyAction
|
|||||||
import de.bixilon.minosoft.config.key.KeyBinding
|
import de.bixilon.minosoft.config.key.KeyBinding
|
||||||
import de.bixilon.minosoft.config.key.KeyCodes
|
import de.bixilon.minosoft.config.key.KeyCodes
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
|
import de.bixilon.minosoft.gui.rendering.Drawable
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||||
import de.bixilon.minosoft.gui.rendering.Renderer
|
import de.bixilon.minosoft.gui.rendering.Renderer
|
||||||
import de.bixilon.minosoft.gui.rendering.RendererBuilder
|
import de.bixilon.minosoft.gui.rendering.RendererBuilder
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.elements.Pollable
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.atlas.HUDAtlasManager
|
import de.bixilon.minosoft.gui.rendering.gui.hud.atlas.HUDAtlasManager
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.*
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.chat.ChatHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.chat.InternalMessagesHUDElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.hotbar.HotbarHUDElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.hotbar.HotbarHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.other.BreakProgressHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.other.CrosshairHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.other.DebugHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.other.WorldInfoHUDElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.tab.TabListHUDElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.tab.TabListHUDElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh
|
||||||
import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent
|
import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
|
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.Vec2Util.EMPTY
|
|
||||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
@ -53,7 +61,7 @@ class HUDRenderer(
|
|||||||
var matrixChange = true
|
var matrixChange = true
|
||||||
private set
|
private set
|
||||||
|
|
||||||
private val hudElements: MutableMap<ResourceLocation, HUDElement<*>> = synchronizedMapOf()
|
private val hudElements: MutableMap<ResourceLocation, HUDElement> = synchronizedMapOf()
|
||||||
|
|
||||||
private var lastTickTime = 0L
|
private var lastTickTime = 0L
|
||||||
|
|
||||||
@ -95,7 +103,9 @@ class HUDRenderer(
|
|||||||
matrixChange = true
|
matrixChange = true
|
||||||
|
|
||||||
for (element in hudElements.toSynchronizedMap().values) {
|
for (element in hudElements.toSynchronizedMap().values) {
|
||||||
element.layout?.silentApply()
|
if (element is LayoutedHUDElement<*>) {
|
||||||
|
element.layout.silentApply()
|
||||||
|
}
|
||||||
element.apply()
|
element.apply()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -142,28 +152,37 @@ class HUDRenderer(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
element.tick()
|
element.tick()
|
||||||
|
if (element is Pollable) {
|
||||||
|
if (element.poll()) {
|
||||||
|
element.apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lastTickTime = time
|
lastTickTime = time
|
||||||
}
|
}
|
||||||
// ToDo: size > maxSize
|
|
||||||
|
|
||||||
|
renderWindow.renderSystem.reset()
|
||||||
|
renderWindow.renderSystem.clear(IntegratedBufferTypes.DEPTH_BUFFER)
|
||||||
|
|
||||||
var z = 0
|
var z = 0
|
||||||
for (element in hudElements) {
|
for (element in hudElements) {
|
||||||
if (!element.enabled) {
|
if (!element.enabled) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
element.draw()
|
if (element is Drawable) {
|
||||||
z += element.layout?.render(element.layoutOffset ?: Vec2i.EMPTY, z, mesh, null) ?: 0
|
element.draw()
|
||||||
|
}
|
||||||
|
if (element is LayoutedHUDElement<*>) {
|
||||||
|
z += element.layout.render(element.layoutOffset, z, mesh, null)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
renderWindow.renderSystem.reset()
|
renderWindow.renderSystem.reset()
|
||||||
renderWindow.renderSystem.clear(IntegratedBufferTypes.DEPTH_BUFFER)
|
renderWindow.renderSystem.clear(IntegratedBufferTypes.DEPTH_BUFFER)
|
||||||
|
|
||||||
mesh.load()
|
mesh.load()
|
||||||
|
|
||||||
|
|
||||||
shader.use()
|
shader.use()
|
||||||
mesh.draw()
|
mesh.draw()
|
||||||
|
|
||||||
@ -172,7 +191,7 @@ class HUDRenderer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun <T : HUDElement<*>> get(hudBuilder: HUDBuilder<*>): T? {
|
operator fun <T : LayoutedHUDElement<*>> get(hudBuilder: HUDBuilder<*>): T? {
|
||||||
return hudElements[hudBuilder.RESOURCE_LOCATION].unsafeCast()
|
return hudElements[hudBuilder.RESOURCE_LOCATION].unsafeCast()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Minosoft
|
||||||
|
* Copyright (C) 2021 Moritz Zwerger
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.gui.rendering.Drawable
|
||||||
|
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
|
|
||||||
|
abstract class CustomHUDElement(final override val hudRenderer: HUDRenderer) : HUDElement, Drawable {
|
||||||
|
override val renderWindow: RenderWindow = hudRenderer.renderWindow
|
||||||
|
override var enabled = true
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to draw the custom content.
|
||||||
|
* May create buffers, changes shaders, resets the render system, etc
|
||||||
|
*/
|
||||||
|
override fun draw() {}
|
||||||
|
}
|
@ -16,9 +16,10 @@ package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
|||||||
import de.bixilon.minosoft.config.key.KeyBinding
|
import de.bixilon.minosoft.config.key.KeyBinding
|
||||||
import de.bixilon.minosoft.data.registries.CompanionResourceLocation
|
import de.bixilon.minosoft.data.registries.CompanionResourceLocation
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
|
|
||||||
interface HUDBuilder<T : HUDElement<*>> : CompanionResourceLocation {
|
interface HUDBuilder<T : HUDElement> : CompanionResourceLocation {
|
||||||
val ENABLE_KEY_BINDING_NAME: ResourceLocation?
|
val ENABLE_KEY_BINDING_NAME: ResourceLocation?
|
||||||
get() = null
|
get() = null
|
||||||
val ENABLE_KEY_BINDING: KeyBinding?
|
val ENABLE_KEY_BINDING: KeyBinding?
|
||||||
|
@ -15,28 +15,18 @@ package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
|||||||
|
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||||
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.hud.HUDElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
abstract class HUDElement<T : Element>(val hudRenderer: HUDRenderer) {
|
abstract class LayoutedHUDElement<T : Element>(final override val hudRenderer: HUDRenderer) : HUDElement {
|
||||||
val renderWindow: RenderWindow = hudRenderer.renderWindow
|
override val renderWindow: RenderWindow = hudRenderer.renderWindow
|
||||||
var enabled = true
|
override var enabled = true
|
||||||
|
|
||||||
open val layout: T?
|
abstract val layout: T
|
||||||
get() = null
|
abstract val layoutOffset: Vec2i
|
||||||
|
|
||||||
open val layoutOffset: Vec2i?
|
override fun tick() {
|
||||||
get() = null
|
layout.tick()
|
||||||
|
|
||||||
open fun init() {}
|
|
||||||
|
|
||||||
open fun postInit() {}
|
|
||||||
|
|
||||||
open fun draw() {}
|
|
||||||
|
|
||||||
open fun tick() {
|
|
||||||
layout?.tick()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun apply() {}
|
|
||||||
}
|
}
|
@ -11,19 +11,21 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.chat
|
||||||
|
|
||||||
import de.bixilon.minosoft.Minosoft
|
import de.bixilon.minosoft.Minosoft
|
||||||
import de.bixilon.minosoft.data.ChatTextPositions
|
import de.bixilon.minosoft.data.ChatTextPositions
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextFlowElement
|
import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextFlowElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent
|
import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent
|
||||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class ChatHUDElement(hudRenderer: HUDRenderer) : HUDElement<TextFlowElement>(hudRenderer) {
|
class ChatHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<TextFlowElement>(hudRenderer) {
|
||||||
private val connection = renderWindow.connection
|
private val connection = renderWindow.connection
|
||||||
override val layout = TextFlowElement(hudRenderer, 20000)
|
override val layout = TextFlowElement(hudRenderer, 20000)
|
||||||
|
|
@ -11,18 +11,20 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.chat
|
||||||
|
|
||||||
import de.bixilon.minosoft.Minosoft
|
import de.bixilon.minosoft.Minosoft
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextFlowElement
|
import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextFlowElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent
|
import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent
|
||||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class InternalMessagesHUDElement(hudRenderer: HUDRenderer) : HUDElement<TextFlowElement>(hudRenderer) {
|
class InternalMessagesHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<TextFlowElement>(hudRenderer) {
|
||||||
private val connection = renderWindow.connection
|
private val connection = renderWindow.connection
|
||||||
override val layout = TextFlowElement(hudRenderer, 15000)
|
override val layout = TextFlowElement(hudRenderer, 15000)
|
||||||
|
|
@ -18,7 +18,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation
|
|||||||
import de.bixilon.minosoft.data.registries.other.game.event.handlers.gamemode.GamemodeChangeEvent
|
import de.bixilon.minosoft.data.registries.other.game.event.handlers.gamemode.GamemodeChangeEvent
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
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.HUDElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent
|
import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent
|
||||||
import de.bixilon.minosoft.modding.event.events.ExperienceChangeEvent
|
import de.bixilon.minosoft.modding.event.events.ExperienceChangeEvent
|
||||||
import de.bixilon.minosoft.modding.event.events.SelectHotbarSlotEvent
|
import de.bixilon.minosoft.modding.event.events.SelectHotbarSlotEvent
|
||||||
@ -27,7 +27,7 @@ import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
|||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class HotbarHUDElement(hudRenderer: HUDRenderer) : HUDElement<HotbarElement>(hudRenderer) {
|
class HotbarHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<HotbarElement>(hudRenderer) {
|
||||||
private val connection = renderWindow.connection
|
private val connection = renderWindow.connection
|
||||||
override lateinit var layout: HotbarElement
|
override lateinit var layout: HotbarElement
|
||||||
|
|
||||||
|
@ -11,44 +11,47 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.other
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
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.Drawable
|
||||||
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.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class BreakProgressHUDElement(hudRenderer: HUDRenderer) : HUDElement<TextElement>(hudRenderer) {
|
class BreakProgressHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<TextElement>(hudRenderer), Drawable {
|
||||||
override val layout: TextElement = TextElement(hudRenderer, "")
|
override val layout: TextElement = TextElement(hudRenderer, "")
|
||||||
private val leftClickHandler = hudRenderer.renderWindow.inputHandler.leftClickHandler
|
private val leftClickHandler = hudRenderer.renderWindow.inputHandler.leftClickHandler
|
||||||
|
|
||||||
override val layoutOffset: Vec2i
|
override val layoutOffset: Vec2i
|
||||||
get() = Vec2i((hudRenderer.scaledSize.x / 2) + CrosshairHUDElement.CROSSHAIR_SIZE / 2 + 5, (hudRenderer.scaledSize.y - layout.size.y) / 2)
|
get() = Vec2i((hudRenderer.scaledSize.x / 2) + CrosshairHUDElement.CROSSHAIR_SIZE / 2 + 5, (hudRenderer.scaledSize.y - layout.size.y) / 2)
|
||||||
|
|
||||||
private var lastPercent = -1
|
private var percent = -1
|
||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
val breakProgress = leftClickHandler.breakProgress
|
val breakProgress = leftClickHandler.breakProgress
|
||||||
if (breakProgress <= 0 || breakProgress >= 1.0) {
|
if (breakProgress <= 0 || breakProgress >= 1.0) {
|
||||||
layout.text = ""
|
layout.text = ""
|
||||||
lastPercent = -1
|
this.percent = -1
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val percent = (leftClickHandler.breakProgress * 100).toInt()
|
val percent = (leftClickHandler.breakProgress * 100).toInt()
|
||||||
if (percent == lastPercent) {
|
if (percent == this.percent) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val text = TextComponent("$percent%")
|
layout.text = TextComponent("$percent%").apply {
|
||||||
text.color = when {
|
color = when {
|
||||||
percent <= 30 -> ChatColors.RED
|
percent <= 30 -> ChatColors.RED
|
||||||
percent <= 70 -> ChatColors.YELLOW
|
percent <= 70 -> ChatColors.YELLOW
|
||||||
else -> ChatColors.GREEN
|
else -> ChatColors.GREEN
|
||||||
|
}
|
||||||
}
|
}
|
||||||
layout.text = text
|
this.percent = percent
|
||||||
lastPercent = percent
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : HUDBuilder<BreakProgressHUDElement> {
|
companion object : HUDBuilder<BreakProgressHUDElement> {
|
@ -11,21 +11,22 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.other
|
||||||
|
|
||||||
import de.bixilon.minosoft.Minosoft
|
import de.bixilon.minosoft.Minosoft
|
||||||
import de.bixilon.minosoft.data.abilities.Gamemodes
|
import de.bixilon.minosoft.data.abilities.Gamemodes
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.Element
|
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.atlas.HUDAtlasElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.atlas.HUDAtlasElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.CustomHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh
|
||||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
|
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
|
||||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.EntityRaycastHit
|
import de.bixilon.minosoft.gui.rendering.input.camera.hit.EntityRaycastHit
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions
|
import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
|
|
||||||
class CrosshairHUDElement(hudRenderer: HUDRenderer) : HUDElement<Element>(hudRenderer) {
|
class CrosshairHUDElement(hudRenderer: HUDRenderer) : CustomHUDElement(hudRenderer) {
|
||||||
private lateinit var crosshairAtlasElement: HUDAtlasElement
|
private lateinit var crosshairAtlasElement: HUDAtlasElement
|
||||||
private var mesh: GUIMesh? = null
|
private var mesh: GUIMesh? = null
|
||||||
private var previousDebugEnabled: Boolean? = true
|
private var previousDebugEnabled: Boolean? = true
|
@ -11,7 +11,7 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.other
|
||||||
|
|
||||||
import de.bixilon.minosoft.Minosoft
|
import de.bixilon.minosoft.Minosoft
|
||||||
import de.bixilon.minosoft.config.key.KeyAction
|
import de.bixilon.minosoft.config.key.KeyAction
|
||||||
@ -35,8 +35,11 @@ import de.bixilon.minosoft.gui.rendering.gui.elements.spacer.LineSpacerElement
|
|||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.text.AutoTextElement
|
import de.bixilon.minosoft.gui.rendering.gui.elements.text.AutoTextElement
|
||||||
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.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
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.Vec2Util.EMPTY
|
||||||
import de.bixilon.minosoft.modding.event.events.DifficultyChangeEvent
|
import de.bixilon.minosoft.modding.event.events.DifficultyChangeEvent
|
||||||
import de.bixilon.minosoft.modding.event.events.GameEventChangeEvent
|
import de.bixilon.minosoft.modding.event.events.GameEventChangeEvent
|
||||||
import de.bixilon.minosoft.modding.event.events.TimeChangeEvent
|
import de.bixilon.minosoft.modding.event.events.TimeChangeEvent
|
||||||
@ -54,8 +57,9 @@ import glm_.vec2.Vec2i
|
|||||||
import glm_.vec4.Vec4i
|
import glm_.vec4.Vec4i
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class DebugHUDElement(hudRenderer: HUDRenderer) : HUDElement<GridLayout>(hudRenderer) {
|
class DebugHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<GridLayout>(hudRenderer) {
|
||||||
private val connection = renderWindow.connection
|
private val connection = renderWindow.connection
|
||||||
|
override val layoutOffset: Vec2i = Vec2i.EMPTY
|
||||||
override val layout = GridLayout(hudRenderer, Vec2i(3, 1)).apply {
|
override val layout = GridLayout(hudRenderer, Vec2i(3, 1)).apply {
|
||||||
columnConstraints[0].apply {
|
columnConstraints[0].apply {
|
||||||
grow = GridGrow.NEVER
|
grow = GridGrow.NEVER
|
@ -11,23 +11,22 @@
|
|||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.other
|
||||||
|
|
||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.Pollable
|
import de.bixilon.minosoft.gui.rendering.gui.elements.Pollable
|
||||||
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.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import de.bixilon.minosoft.util.MMath.round10
|
import de.bixilon.minosoft.util.MMath.round10
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class WorldInfoHUDElement(hudRenderer: HUDRenderer) : HUDElement<TextElement>(hudRenderer), Pollable {
|
class WorldInfoHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<TextElement>(hudRenderer), Pollable {
|
||||||
override val layout: TextElement = TextElement(hudRenderer, "", scale = 3.0f)
|
override val layout: TextElement = TextElement(hudRenderer, "")
|
||||||
|
|
||||||
override val layoutOffset: Vec2i = Vec2i(2, 2)
|
override val layoutOffset: Vec2i = Vec2i(2, 2)
|
||||||
|
|
||||||
private var fps = -1.0
|
private var fps = -1.0
|
||||||
|
|
||||||
private var hide: Boolean = false
|
private var hide: Boolean = false
|
||||||
|
|
||||||
override fun tick() {
|
override fun tick() {
|
||||||
@ -41,10 +40,13 @@ class WorldInfoHUDElement(hudRenderer: HUDRenderer) : HUDElement<TextElement>(hu
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun poll(): Boolean {
|
override fun poll(): Boolean {
|
||||||
|
val debugHUDElement: DebugHUDElement? = hudRenderer[DebugHUDElement]
|
||||||
|
val hide = debugHUDElement?.enabled == true
|
||||||
val fps = hudRenderer.renderWindow.renderStats.smoothAvgFPS.round10
|
val fps = hudRenderer.renderWindow.renderStats.smoothAvgFPS.round10
|
||||||
if (this.fps == fps) {
|
if (this.hide == hide && this.fps == fps) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
this.hide = hide
|
||||||
this.fps = fps
|
this.fps = fps
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -57,17 +59,6 @@ class WorldInfoHUDElement(hudRenderer: HUDRenderer) : HUDElement<TextElement>(hu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun draw() {
|
|
||||||
val debugHUDElement: DebugHUDElement? = hudRenderer[DebugHUDElement]
|
|
||||||
|
|
||||||
val debugEnabled = debugHUDElement?.enabled == true
|
|
||||||
if (this.hide != debugEnabled) {
|
|
||||||
this.hide = debugEnabled
|
|
||||||
poll()
|
|
||||||
apply()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object : HUDBuilder<WorldInfoHUDElement> {
|
companion object : HUDBuilder<WorldInfoHUDElement> {
|
||||||
override val RESOURCE_LOCATION: ResourceLocation = "minosoft:world_info".toResourceLocation()
|
override val RESOURCE_LOCATION: ResourceLocation = "minosoft:world_info".toResourceLocation()
|
||||||
|
|
@ -19,14 +19,14 @@ import de.bixilon.minosoft.config.key.KeyCodes
|
|||||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||||
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.HUDElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
import de.bixilon.minosoft.modding.event.events.TabListEntryChangeEvent
|
import de.bixilon.minosoft.modding.event.events.TabListEntryChangeEvent
|
||||||
import de.bixilon.minosoft.modding.event.events.TabListInfoChangeEvent
|
import de.bixilon.minosoft.modding.event.events.TabListInfoChangeEvent
|
||||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class TabListHUDElement(hudRenderer: HUDRenderer) : HUDElement<TabListElement>(hudRenderer) {
|
class TabListHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<TabListElement>(hudRenderer) {
|
||||||
private val connection = renderWindow.connection
|
private val connection = renderWindow.connection
|
||||||
override val layout = TabListElement(hudRenderer)
|
override val layout = TabListElement(hudRenderer)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user