mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 01:16:46 -04:00
wip title
This commit is contained in:
parent
aca9ac44e5
commit
8b6389b4c1
@ -14,32 +14,88 @@
|
|||||||
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.title
|
package de.bixilon.minosoft.gui.rendering.gui.hud.elements.title
|
||||||
|
|
||||||
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.HorizontalAlignments
|
||||||
|
import de.bixilon.minosoft.gui.rendering.gui.elements.HorizontalAlignments.Companion.getOffset
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.elements.text.FadingTextElement
|
import de.bixilon.minosoft.gui.rendering.gui.elements.text.FadingTextElement
|
||||||
|
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.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.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
import java.lang.Integer.max
|
||||||
|
|
||||||
class TitleElement(hudRenderer: HUDRenderer) : Element(hudRenderer) {
|
class TitleElement(hudRenderer: HUDRenderer) : Element(hudRenderer) {
|
||||||
val text = FadingTextElement(hudRenderer, "", scale = 4.0f)
|
val title = FadingTextElement(hudRenderer, "", scale = 4.0f, parent = this)
|
||||||
val subTest = FadingTextElement(hudRenderer, "")
|
val subtitle = FadingTextElement(hudRenderer, "", parent = this)
|
||||||
var fadeInTime = DEFAULT_FADE_IN_TIME
|
var fadeInTime = 0L
|
||||||
var stayTime = DEFAULT_STAY_TIME
|
set(value) {
|
||||||
var fadeOutTime = DEFAULT_FADE_OUT_TIME
|
title.fadeInTime = value
|
||||||
|
subtitle.fadeInTime = value
|
||||||
|
field = value
|
||||||
|
}
|
||||||
|
var stayTime = 0L
|
||||||
|
set(value) {
|
||||||
|
title.stayTime = value
|
||||||
|
subtitle.stayTime = value
|
||||||
|
field = value
|
||||||
|
}
|
||||||
|
var fadeOutTime = 0L
|
||||||
|
set(value) {
|
||||||
|
title.fadeOutTime = value
|
||||||
|
subtitle.fadeOutTime = value
|
||||||
|
field = value
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
fadeInTime = DEFAULT_FADE_IN_TIME
|
||||||
|
stayTime = DEFAULT_STAY_TIME
|
||||||
|
fadeOutTime = DEFAULT_FADE_OUT_TIME
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int {
|
||||||
|
val size = size
|
||||||
|
title.render(offset + Vec2i(HorizontalAlignments.CENTER.getOffset(size.x, title.size.x), 0), z, consumer, options)
|
||||||
|
subtitle.render(offset + Vec2i(HorizontalAlignments.CENTER.getOffset(size.x, subtitle.size.x), title.size.y + SUBTITLE_VERTICAL_OFFSET), z, consumer, options)
|
||||||
|
|
||||||
|
|
||||||
|
return TextElement.LAYERS
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun forceSilentApply() {
|
||||||
|
val size = title.size
|
||||||
|
|
||||||
|
size.x = max(size.x, subtitle.size.x)
|
||||||
|
size.y += subtitle.size.y
|
||||||
|
|
||||||
|
this._size = size
|
||||||
|
}
|
||||||
|
|
||||||
|
fun show() {
|
||||||
|
title.show()
|
||||||
|
subtitle.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hide() {
|
||||||
|
title.hide()
|
||||||
|
subtitle.hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun reset() {
|
||||||
|
title.forceHide()
|
||||||
|
subtitle.forceHide()
|
||||||
|
title.text = ""
|
||||||
|
subtitle.text = ""
|
||||||
|
|
||||||
|
fadeInTime = DEFAULT_FADE_IN_TIME
|
||||||
|
stayTime = DEFAULT_STAY_TIME
|
||||||
|
fadeOutTime = DEFAULT_FADE_OUT_TIME
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
const val SUBTITLE_VERTICAL_OFFSET = 10
|
||||||
const val DEFAULT_FADE_IN_TIME = 20L * ProtocolDefinition.TICK_TIME
|
const val DEFAULT_FADE_IN_TIME = 20L * ProtocolDefinition.TICK_TIME
|
||||||
const val DEFAULT_STAY_TIME = 60L * ProtocolDefinition.TICK_TIME
|
const val DEFAULT_STAY_TIME = 60L * ProtocolDefinition.TICK_TIME
|
||||||
const val DEFAULT_FADE_OUT_TIME = 20L * ProtocolDefinition.TICK_TIME
|
const val DEFAULT_FADE_OUT_TIME = 20L * ProtocolDefinition.TICK_TIME
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun forceSilentApply() {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -17,13 +17,50 @@ 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.LayoutedHUDElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.LayoutedHUDElement
|
||||||
|
import de.bixilon.minosoft.gui.rendering.util.vec.Vec2Util.EMPTY
|
||||||
|
import de.bixilon.minosoft.modding.event.events.title.*
|
||||||
|
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||||
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class TitleHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<TitleElement>(hudRenderer) {
|
class TitleHUDElement(hudRenderer: HUDRenderer) : LayoutedHUDElement<TitleElement>(hudRenderer) {
|
||||||
override val layout: TitleElement = TitleElement(hudRenderer)
|
override val layout: TitleElement = TitleElement(hudRenderer)
|
||||||
override val layoutOffset: Vec2i
|
override val layoutOffset: Vec2i
|
||||||
get() = TODO("Not yet implemented")
|
get() {
|
||||||
|
val layoutOffset = Vec2i.EMPTY
|
||||||
|
|
||||||
|
val scaledSize = hudRenderer.scaledSize
|
||||||
|
|
||||||
|
layoutOffset.x = (scaledSize.x - layout.size.x / 2) / 2
|
||||||
|
layoutOffset.y = (scaledSize.y - layout.title.size.y) / 2
|
||||||
|
|
||||||
|
return layoutOffset
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
val connection = hudRenderer.connection
|
||||||
|
|
||||||
|
connection.registerEvent(CallbackEventInvoker.of<TitleResetEvent> {
|
||||||
|
layout.reset()
|
||||||
|
})
|
||||||
|
connection.registerEvent(CallbackEventInvoker.of<TitleHideEvent> {
|
||||||
|
layout.hide()
|
||||||
|
})
|
||||||
|
connection.registerEvent(CallbackEventInvoker.of<TitleSetEvent> {
|
||||||
|
layout.title.text = it.title
|
||||||
|
layout.show()
|
||||||
|
})
|
||||||
|
connection.registerEvent(CallbackEventInvoker.of<TitleSubtitleSetEvent> {
|
||||||
|
layout.subtitle.text = it.subtitle
|
||||||
|
// layout.show() // non vanilla behavior
|
||||||
|
})
|
||||||
|
connection.registerEvent(CallbackEventInvoker.of<TitleTimesSetEvent> {
|
||||||
|
layout.fadeInTime = it.fadeInTime * ProtocolDefinition.TICK_TIME.toLong()
|
||||||
|
layout.stayTime = it.stayTime * ProtocolDefinition.TICK_TIME.toLong()
|
||||||
|
layout.fadeOutTime = it.fadeOutTime * ProtocolDefinition.TICK_TIME.toLong()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
companion object : HUDBuilder<TitleHUDElement> {
|
companion object : HUDBuilder<TitleHUDElement> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user