wip title

This commit is contained in:
Bixilon 2021-10-25 11:12:52 +02:00
parent aca9ac44e5
commit 8b6389b4c1
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 107 additions and 14 deletions

View File

@ -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")
}
} }

View File

@ -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> {