mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 19:35:00 -04:00
pre size calculation
This commit is contained in:
parent
3d198617cb
commit
fa84eff093
@ -99,7 +99,7 @@ class CharData(
|
||||
}
|
||||
|
||||
if (style.formatting.contains(PreChatFormattingCodes.STRIKETHROUGH)) {
|
||||
vertexConsumer.addQuad(startPosition + Vec2(-Font.HORIZONTAL_SPACING, Font.CHAR_HEIGHT / 2.0f + 0.5f), Vec2(endPosition.x + Font.HORIZONTAL_SPACING, startPosition.y + Font.CHAR_HEIGHT / 2.0f + 1.5f), z + 1, renderWindow.WHITE_TEXTURE.texture, renderWindow.WHITE_TEXTURE.uvStart, renderWindow.WHITE_TEXTURE.uvEnd, italic, color)
|
||||
vertexConsumer.addQuad(startPosition + Vec2(-Font.HORIZONTAL_SPACING, Font.CHAR_HEIGHT / 2.0f), Vec2(endPosition.x + Font.HORIZONTAL_SPACING, startPosition.y + Font.CHAR_HEIGHT / 2.0f + 1.0f), z + 1, renderWindow.WHITE_TEXTURE.texture, renderWindow.WHITE_TEXTURE.uvStart, renderWindow.WHITE_TEXTURE.uvEnd, italic, color)
|
||||
}
|
||||
|
||||
if (style.formatting.contains(PreChatFormattingCodes.UNDERLINED)) {
|
||||
|
@ -21,7 +21,7 @@ import glm_.vec2.Vec2i
|
||||
|
||||
object BaseComponentRenderer : ChatComponentRenderer<BaseComponent> {
|
||||
|
||||
override fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer, text: BaseComponent) {
|
||||
override fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer?, text: BaseComponent) {
|
||||
for (part in text.parts) {
|
||||
ChatComponentRenderer.render(initialOffset, offset, size, z, element, renderWindow, consumer, part)
|
||||
}
|
||||
|
@ -23,12 +23,12 @@ import glm_.vec2.Vec2i
|
||||
|
||||
interface ChatComponentRenderer<T : ChatComponent> {
|
||||
|
||||
fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer, text: T)
|
||||
fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer?, text: T)
|
||||
|
||||
|
||||
companion object : ChatComponentRenderer<ChatComponent> {
|
||||
|
||||
override fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer, text: ChatComponent) {
|
||||
override fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer?, text: ChatComponent) {
|
||||
when (text) {
|
||||
is BaseComponent -> BaseComponentRenderer.render(initialOffset, offset, size, z, element, renderWindow, consumer, text)
|
||||
is TextComponent -> TextComponentRenderer.render(initialOffset, offset, size, z, element, renderWindow, consumer, text)
|
||||
|
@ -25,7 +25,7 @@ import glm_.vec2.Vec2i
|
||||
|
||||
object TextComponentRenderer : ChatComponentRenderer<TextComponent> {
|
||||
|
||||
override fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer, text: TextComponent) {
|
||||
override fun render(initialOffset: Vec2i, offset: Vec2i, size: Vec2i, z: Int, element: LabeledElement, renderWindow: RenderWindow, consumer: GUIVertexConsumer?, text: TextComponent) {
|
||||
var first = true
|
||||
|
||||
/**
|
||||
@ -79,6 +79,11 @@ object TextComponentRenderer : ChatComponentRenderer<TextComponent> {
|
||||
|
||||
if (first) {
|
||||
first = false
|
||||
|
||||
// Add initial size
|
||||
if (size.y == 0) {
|
||||
size.y = Font.CHAR_HEIGHT + Font.VERTICAL_SPACING
|
||||
}
|
||||
} else if (offset.x != initialOffset.x && add(Font.HORIZONTAL_SPACING)) {
|
||||
return
|
||||
}
|
||||
@ -88,7 +93,7 @@ object TextComponentRenderer : ChatComponentRenderer<TextComponent> {
|
||||
if (offset.x == initialOffset.x && offset.x - initialOffset.x + width > element.maxSize.x) {
|
||||
return
|
||||
}
|
||||
charData.render(offset, z, text, consumer)
|
||||
consumer?.let { charData.render(offset, z, text, it) }
|
||||
|
||||
if (add(width)) {
|
||||
return
|
||||
|
@ -30,19 +30,29 @@ class TextElement(
|
||||
prepared = false
|
||||
}
|
||||
|
||||
override var textComponent: ChatComponent = ChatComponent.of(text)
|
||||
override var textComponent: ChatComponent = ChatComponent.of("")
|
||||
private set(value) {
|
||||
size = minSize
|
||||
if (value.message.isNotEmpty()) {
|
||||
val size = Vec2i(0, 0)
|
||||
ChatComponentRenderer.render(Vec2i(0, 0), Vec2i(0, 0), size, 0, this, renderWindow, null, value)
|
||||
this.size = size
|
||||
}
|
||||
field = value
|
||||
}
|
||||
|
||||
init {
|
||||
textComponent = ChatComponent.of(text)
|
||||
}
|
||||
|
||||
|
||||
override fun render(offset: Vec2i, z: Int, consumer: GUIVertexConsumer): Int {
|
||||
ChatComponentRenderer.render(Vec2i(offset), offset, Vec2i(0, 0), z, this, renderWindow, consumer, textComponent)
|
||||
prepared = true
|
||||
return LAYERS
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val LAYERS = 4
|
||||
const val LAYERS = 4 // 1 layer for the text, 1 for strikethrough. * 2 for shadow
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ class HUDRenderer(
|
||||
),
|
||||
)
|
||||
if (!text2.prepared) {
|
||||
text2.render(Vec2i(10, 60), 0, mesh)
|
||||
text2.render(Vec2i(0, 40), 0, mesh)
|
||||
}
|
||||
|
||||
mesh.load()
|
||||
|
Loading…
x
Reference in New Issue
Block a user