mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 19:05:02 -04:00
hud: don't rely on atlas
This commit is contained in:
parent
89343bec0f
commit
73b9d4c541
@ -30,7 +30,7 @@ object RenderUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun RenderContext.runAsync(runnable: () -> Unit) {
|
inline fun RenderContext.runAsync(crossinline runnable: () -> Unit) {
|
||||||
DefaultThreadPool += SimplePoolRunnable(ThreadPool.HIGHER) {
|
DefaultThreadPool += SimplePoolRunnable(ThreadPool.HIGHER) {
|
||||||
try {
|
try {
|
||||||
runnable()
|
runnable()
|
||||||
|
@ -64,7 +64,6 @@ class GUIRenderer(
|
|||||||
gui.init()
|
gui.init()
|
||||||
hud.init()
|
hud.init()
|
||||||
popper.init()
|
popper.init()
|
||||||
dragged.init()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun postInit(latch: AbstractLatch) {
|
override fun postInit(latch: AbstractLatch) {
|
||||||
@ -77,7 +76,6 @@ class GUIRenderer(
|
|||||||
gui.postInit()
|
gui.postInit()
|
||||||
hud.postInit()
|
hud.postInit()
|
||||||
popper.postInit()
|
popper.postInit()
|
||||||
dragged.postInit()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateResolution(windowSize: Vec2 = Vec2(context.window.size), scale: Float = profile.scale, systemScale: Vec2 = context.window.systemScale) {
|
private fun updateResolution(windowSize: Vec2 = Vec2(context.window.size), scale: Float = profile.scale, systemScale: Vec2 = context.window.systemScale) {
|
||||||
|
@ -33,6 +33,7 @@ class AtlasManager(val context: RenderContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(atlas: ResourceLocation): Atlas? {
|
operator fun get(atlas: ResourceLocation): Atlas? {
|
||||||
|
if (loader != null) throw IllegalStateException("Atlas is still in loading phase!")
|
||||||
return this.atlas[atlas]
|
return this.atlas[atlas]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,11 +26,10 @@ import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable
|
|||||||
import de.bixilon.minosoft.gui.rendering.system.window.CursorModes
|
import de.bixilon.minosoft.gui.rendering.system.window.CursorModes
|
||||||
import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes
|
import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.Initializable
|
|
||||||
|
|
||||||
class DraggedManager(
|
class DraggedManager(
|
||||||
private val guiRenderer: GUIRenderer,
|
private val guiRenderer: GUIRenderer,
|
||||||
) : Initializable, InputHandler, AsyncDrawable, Drawable {
|
) : InputHandler, AsyncDrawable, Drawable {
|
||||||
private val clickCounter = MouseClickCounter()
|
private val clickCounter = MouseClickCounter()
|
||||||
var element: DraggedGUIElement<*>? = null
|
var element: DraggedGUIElement<*>? = null
|
||||||
set(value) {
|
set(value) {
|
||||||
@ -52,12 +51,6 @@ class DraggedManager(
|
|||||||
}
|
}
|
||||||
private var lastTickTime: Long = -1L
|
private var lastTickTime: Long = -1L
|
||||||
|
|
||||||
override fun init() {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun postInit() {
|
|
||||||
}
|
|
||||||
|
|
||||||
fun onScreenChange() {
|
fun onScreenChange() {
|
||||||
element?.element?.forceSilentApply()
|
element?.element?.forceSilentApply()
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ class HUDManager(
|
|||||||
|
|
||||||
private var values: Collection<HUDElement> = emptyList()
|
private var values: Collection<HUDElement> = emptyList()
|
||||||
|
|
||||||
fun registerElement(hudBuilder: HUDBuilder<*>) {
|
fun register(hudBuilder: HUDBuilder<*>) {
|
||||||
val hudElement = hudBuilder.build(guiRenderer)
|
val hudElement = hudBuilder.build(guiRenderer)
|
||||||
hudElements[hudBuilder.identifier] = hudElement
|
hudElements[hudBuilder.identifier] = hudElement
|
||||||
|
|
||||||
@ -64,13 +64,18 @@ class HUDManager(
|
|||||||
context.input.bindings.register(toggleKeyBindingName, toggleKeyBinding, pressed = hudBuilder.DEFAULT_ENABLED) { hudElement.enabled = it }
|
context.input.bindings.register(toggleKeyBindingName, toggleKeyBinding, pressed = hudBuilder.DEFAULT_ENABLED) { hudElement.enabled = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun registerDefaultElements() {
|
private fun registerDefaults() {
|
||||||
val latch = SimpleLatch(DEFAULT_ELEMENTS.size + 1)
|
for (builder in DEFAULT_ELEMENTS) {
|
||||||
|
builder.register(guiRenderer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildDefaults() {
|
||||||
|
val latch = SimpleLatch(DEFAULT_ELEMENTS.size)
|
||||||
|
|
||||||
for (builder in DEFAULT_ELEMENTS) {
|
for (builder in DEFAULT_ELEMENTS) {
|
||||||
context.runAsync { registerElement(builder); latch.dec() }
|
context.runAsync { register(builder); latch.dec() }
|
||||||
}
|
}
|
||||||
latch.dec()
|
|
||||||
latch.await()
|
latch.await()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +91,7 @@ class HUDManager(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
registerDefaultElements()
|
registerDefaults()
|
||||||
|
|
||||||
for (element in this.hudElements.toSynchronizedMap().values) {
|
for (element in this.hudElements.toSynchronizedMap().values) {
|
||||||
element.init()
|
element.init()
|
||||||
@ -100,6 +105,8 @@ class HUDManager(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun postInit() {
|
override fun postInit() {
|
||||||
|
buildDefaults()
|
||||||
|
|
||||||
for (element in this.hudElements.toSynchronizedMap().values) {
|
for (element in this.hudElements.toSynchronizedMap().values) {
|
||||||
element.postInit()
|
element.postInit()
|
||||||
if (element is LayoutedGUIElement<*>) {
|
if (element is LayoutedGUIElement<*>) {
|
||||||
|
@ -81,7 +81,7 @@ class ChatElement(guiRenderer: GUIRenderer) : AbstractChatElement(guiRenderer),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun init() {
|
override fun postInit() {
|
||||||
connection.events.listen<ChatMessageEvent> {
|
connection.events.listen<ChatMessageEvent> {
|
||||||
if (it.message.type.position == ChatTextPositions.HOTBAR) {
|
if (it.message.type.position == ChatTextPositions.HOTBAR) {
|
||||||
return@listen
|
return@listen
|
||||||
@ -108,7 +108,7 @@ class ChatElement(guiRenderer: GUIRenderer) : AbstractChatElement(guiRenderer),
|
|||||||
this.input.value = "/"
|
this.input.value = "/"
|
||||||
}
|
}
|
||||||
|
|
||||||
internal.init()
|
internal.postInit()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun forceRender(offset: Vec2, consumer: GUIVertexConsumer, options: GUIVertexOptions?) {
|
override fun forceRender(offset: Vec2, consumer: GUIVertexConsumer, options: GUIVertexOptions?) {
|
||||||
|
@ -47,7 +47,7 @@ class InternalChatElement(guiRenderer: GUIRenderer) : AbstractChatElement(guiRen
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun init() {
|
override fun postInit() {
|
||||||
connection.events.listen<ChatMessageEvent> {
|
connection.events.listen<ChatMessageEvent> {
|
||||||
if (it.message !is InternalChatMessage || profile.chat.internal.hidden) {
|
if (it.message !is InternalChatMessage || profile.chat.internal.hidden) {
|
||||||
return@listen
|
return@listen
|
||||||
|
@ -31,7 +31,7 @@ class HotbarBaseElement(guiRenderer: GUIRenderer) : Element(guiRenderer), Pollab
|
|||||||
private val atlas = guiRenderer.atlas[ATLAS]
|
private val atlas = guiRenderer.atlas[ATLAS]
|
||||||
private val baseAtlasElement = atlas["base"]
|
private val baseAtlasElement = atlas["base"]
|
||||||
private val base = AtlasImageElement(guiRenderer, baseAtlasElement)
|
private val base = AtlasImageElement(guiRenderer, baseAtlasElement)
|
||||||
private val frame = AtlasImageElement(guiRenderer, atlas["frame"]!!, size = Vec2i(FRAME_SIZE))
|
private val frame = AtlasImageElement(guiRenderer, atlas["frame"], size = Vec2i(FRAME_SIZE))
|
||||||
|
|
||||||
private val containerElement = ContainerItemsElement(guiRenderer, guiRenderer.context.connection.player.items.inventory, baseAtlasElement?.slots ?: Int2ObjectOpenHashMap())
|
private val containerElement = ContainerItemsElement(guiRenderer, guiRenderer.context.connection.player.items.inventory, baseAtlasElement?.slots ?: Int2ObjectOpenHashMap())
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.hotbar
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.hotbar
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec2.Vec2
|
import de.bixilon.kotlinglm.vec2.Vec2
|
||||||
|
import de.bixilon.kotlinglm.vec2.Vec2i
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.Arms
|
import de.bixilon.minosoft.data.entities.entities.player.Arms
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.Arms.Companion.opposite
|
import de.bixilon.minosoft.data.entities.entities.player.Arms.Companion.opposite
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer
|
import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer
|
||||||
@ -23,6 +24,7 @@ import de.bixilon.minosoft.gui.rendering.gui.elements.items.ContainerItemsElemen
|
|||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.primitive.AtlasImageElement
|
import de.bixilon.minosoft.gui.rendering.gui.elements.primitive.AtlasImageElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions
|
||||||
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec4.Vec4Util.marginOf
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec4.Vec4Util.marginOf
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
|
||||||
|
|
||||||
@ -34,13 +36,13 @@ class HotbarOffhandElement(guiRenderer: GUIRenderer) : Element(guiRenderer) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
val offArm = guiRenderer.context.connection.player.mainArm.opposite // ToDo: Support arm change
|
val offArm = guiRenderer.context.connection.player.mainArm.opposite // ToDo: Support arm change
|
||||||
private val frame = frames[offArm.ordinal]!!
|
private val frame = frames[offArm.ordinal]
|
||||||
|
|
||||||
private var frameImage = AtlasImageElement(guiRenderer, frame)
|
private var frameImage = AtlasImageElement(guiRenderer, frame)
|
||||||
private val containerElement = ContainerItemsElement(guiRenderer, guiRenderer.context.connection.player.items.inventory, frame.slots ?: Int2ObjectOpenHashMap())
|
private val containerElement = ContainerItemsElement(guiRenderer, guiRenderer.context.connection.player.items.inventory, frame?.slots ?: Int2ObjectOpenHashMap())
|
||||||
|
|
||||||
init {
|
init {
|
||||||
_size = Vec2(frame.size)
|
_size = Vec2(frame?.size ?: Vec2i.EMPTY)
|
||||||
val margin = if (offArm == Arms.LEFT) {
|
val margin = if (offArm == Arms.LEFT) {
|
||||||
marginOf(right = 5.0f)
|
marginOf(right = 5.0f)
|
||||||
} else {
|
} else {
|
||||||
|
@ -39,7 +39,7 @@ class CrosshairHUDElement(guiRenderer: GUIRenderer) : CustomHUDElement(guiRender
|
|||||||
private var reapply = true
|
private var reapply = true
|
||||||
private var previousNeedsDraw = needsDraw
|
private var previousNeedsDraw = needsDraw
|
||||||
|
|
||||||
override fun init() {
|
override fun postInit() {
|
||||||
crosshairAtlasElement = guiRenderer.atlas[ATLAS]?.get("crosshair")
|
crosshairAtlasElement = guiRenderer.atlas[ATLAS]?.get("crosshair")
|
||||||
crosshairProfile::color.observe(this) { reapply = true }
|
crosshairProfile::color.observe(this) { reapply = true }
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ class DebugHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), Layouted
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun init() {
|
override fun postInit() {
|
||||||
layout[Vec2i(0, 0)] = initLeft()
|
layout[Vec2i(0, 0)] = initLeft()
|
||||||
layout[Vec2i(2, 0)] = initRight()
|
layout[Vec2i(2, 0)] = initRight()
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ class ScoreboardSideElement(guiRenderer: GUIRenderer) : Element(guiRenderer), La
|
|||||||
queueSizeRecalculation()
|
queueSizeRecalculation()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun init() {
|
override fun postInit() {
|
||||||
val connection = context.connection
|
val connection = context.connection
|
||||||
connection.events.listen<ObjectivePositionSetEvent> {
|
connection.events.listen<ObjectivePositionSetEvent> {
|
||||||
if (it.position != ScoreboardPositions.SIDEBAR) {
|
if (it.position != ScoreboardPositions.SIDEBAR) {
|
||||||
|
@ -216,7 +216,7 @@ class TabListElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedE
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun init() {
|
override fun postInit() {
|
||||||
val connection = context.connection
|
val connection = context.connection
|
||||||
connection.tabList::header.observe(this) { header.text = it }
|
connection.tabList::header.observe(this) { header.text = it }
|
||||||
connection.tabList::footer.observe(this) { footer.text = it }
|
connection.tabList::footer.observe(this) { footer.text = it }
|
||||||
|
@ -106,7 +106,7 @@ class TitleElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedEle
|
|||||||
times = DEFAULT_TIMES
|
times = DEFAULT_TIMES
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun init() {
|
override fun postInit() {
|
||||||
val connection = context.connection
|
val connection = context.connection
|
||||||
|
|
||||||
connection.events.listen<TitleResetEvent> {
|
connection.events.listen<TitleResetEvent> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user