From 3590bf828a1d7ec3bd83d1052c1c40db871262eb Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 18 Jan 2023 12:44:33 +0100 Subject: [PATCH] entity wawla element --- .../gui/hud/elements/wawla/WawlaElement.kt | 12 +++- .../gui/hud/elements/wawla/WawlaHUDElement.kt | 3 +- .../elements/wawla/block/BlockWawlaElement.kt | 4 +- .../wawla/entity/EntityWawlaElement.kt | 62 +++++++++++++++++++ 4 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/entity/EntityWawlaElement.kt diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaElement.kt index b8b19b138..fa66cfd84 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaElement.kt @@ -13,6 +13,16 @@ package de.bixilon.minosoft.gui.rendering.gui.hud.elements.wawla +import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.gui.rendering.gui.elements.Element +import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement -abstract class WawlaElement(protected val wawla: WawlaHUDElement) : Element(wawla.guiRenderer) +abstract class WawlaElement(protected val wawla: WawlaHUDElement) : Element(wawla.guiRenderer) { + + protected fun createNameElement(translationKey: ResourceLocation?): TextElement { + val name = wawla.context.connection.language.translate(translationKey) + name.setFallbackColor(ChatColors.WHITE) + return TextElement(guiRenderer, name, background = false, scale = 1.2f) + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaHUDElement.kt index 88e48f0c2..796759a68 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaHUDElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/WawlaHUDElement.kt @@ -26,6 +26,7 @@ import de.bixilon.minosoft.gui.rendering.gui.elements.primitive.ColorElement import de.bixilon.minosoft.gui.rendering.gui.gui.LayoutedGUIElement import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder import de.bixilon.minosoft.gui.rendering.gui.hud.elements.wawla.block.BlockWawlaElement +import de.bixilon.minosoft.gui.rendering.gui.hud.elements.wawla.entity.EntityWawlaElement import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions import de.bixilon.minosoft.gui.rendering.renderer.drawable.AsyncDrawable @@ -42,7 +43,7 @@ class WawlaHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), Layouted val target = context.camera.targetHandler.target val element: WawlaElement? = when (target) { is BlockTarget -> BlockWawlaElement(this, target) - is EntityTarget -> null + is EntityTarget -> EntityWawlaElement(this, target) else -> null } this.element = element diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/block/BlockWawlaElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/block/BlockWawlaElement.kt index 02cbef3ab..ef8503e79 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/block/BlockWawlaElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/block/BlockWawlaElement.kt @@ -51,9 +51,7 @@ class BlockWawlaElement(wawla: WawlaHUDElement, private val target: BlockTarget) } private fun createName(): TextElement { - val name = wawla.context.connection.language.translate(target.blockState.block.item.translationKey) // TODO: use key of block and not item - name.setFallbackColor(ChatColors.WHITE) - return TextElement(guiRenderer, name, background = false) + return createNameElement(target.blockState.block.item.translationKey) // TODO: use key of block and not item } private fun createMod(): TextElement? { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/entity/EntityWawlaElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/entity/EntityWawlaElement.kt new file mode 100644 index 000000000..899a9c83c --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/wawla/entity/EntityWawlaElement.kt @@ -0,0 +1,62 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 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 . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.gui.hud.elements.wawla.entity + +import de.bixilon.kotlinglm.vec2.Vec2i +import de.bixilon.minosoft.data.registries.identified.Namespaces +import de.bixilon.minosoft.data.text.TextComponent +import de.bixilon.minosoft.data.text.formatting.color.ChatColors +import de.bixilon.minosoft.gui.rendering.camera.target.targets.EntityTarget +import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement +import de.bixilon.minosoft.gui.rendering.gui.hud.elements.wawla.WawlaElement +import de.bixilon.minosoft.gui.rendering.gui.hud.elements.wawla.WawlaHUDElement +import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer +import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions + +class EntityWawlaElement(wawla: WawlaHUDElement, private val target: EntityTarget) : WawlaElement(wawla) { + private val name = createName() + private val mod = createMod() + + init { + forceSilentApply() + } + + override fun forceRender(offset: Vec2i, consumer: GUIVertexConsumer, options: GUIVertexOptions?) { + name.render(offset, consumer, options) + offset.y += name.size.y + + mod?.let { it.render(offset, consumer, options); offset.y += it.size.y } + } + + override fun forceSilentApply() { + val size = Vec2i( + x = maxOf(name.size.x, mod?.size?.x ?: 0), + y = name.size.y + (mod?.size?.y ?: 0), + ) + + this.size = size + } + + private fun createName(): TextElement { + return createNameElement(target.entity.type.translationKey) + } + + private fun createMod(): TextElement? { + val namespace = target.entity.type.identifier.namespace + if (namespace == Namespaces.DEFAULT) { + return null + } + return TextElement(guiRenderer, TextComponent(namespace).color(ChatColors.BLUE), background = false) + } +}