From 4aaf4295152d211b1c8853a173cc4cf6a9d000a2 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Mon, 8 Apr 2024 20:27:38 +0200 Subject: Fix/Backend: Renderable.itemStack itemScale (#1390) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/utils/renderables/Renderable.kt | 123 ++++++++++----------- 1 file changed, 59 insertions(+), 64 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/utils/renderables') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt index 3b1249808..542b62c42 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -10,6 +10,7 @@ import at.hannibal2.skyhanni.utils.ColorUtils import at.hannibal2.skyhanni.utils.ColorUtils.darker import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzLogger +import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.renderOnScreen import at.hannibal2.skyhanni.utils.RenderUtils.HorizontalAlignment import at.hannibal2.skyhanni.utils.RenderUtils.VerticalAlignment @@ -18,8 +19,8 @@ import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.calculateTableYOf import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderXAligned import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderXYAligned import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderYAligned -import io.github.notenoughupdates.moulconfig.gui.GuiScreenElementWrapper import io.github.moulberry.notenoughupdates.util.Utils +import io.github.notenoughupdates.moulconfig.gui.GuiScreenElementWrapper import net.minecraft.client.Minecraft import net.minecraft.client.gui.Gui import net.minecraft.client.gui.inventory.GuiEditSign @@ -39,8 +40,7 @@ interface Renderable { val horizontalAlign: HorizontalAlignment val verticalAlign: VerticalAlignment fun isHovered(posX: Int, posY: Int) = currentRenderPassMousePosition?.let { (x, y) -> - x in (posX..posX + width) - && y in (posY..posY + height) // TODO: adjust for variable height? + x in (posX..posX + width) && y in (posY..posY + height) // TODO: adjust for variable height? } ?: false /** @@ -65,7 +65,7 @@ interface Renderable { } } - fun fromAny(any: Any?, itemScale: Double = 1.0): Renderable? = when (any) { + fun fromAny(any: Any?, itemScale: Double = NEUItems.itemFontSize): Renderable? = when (any) { null -> placeholder(12) is Renderable -> any is String -> string(any) @@ -81,8 +81,7 @@ interface Renderable { onClick: () -> Unit, bypassChecks: Boolean = false, condition: () -> Boolean = { true }, - ): Renderable = - link(string(text), onClick, bypassChecks, condition) + ): Renderable = link(string(text), onClick, bypassChecks, condition) fun link( renderable: Renderable, @@ -119,28 +118,25 @@ interface Renderable { button: Int = 0, bypassChecks: Boolean = false, condition: () -> Boolean = { true }, - ) = - object : Renderable { - override val width = render.width - override val height = render.height - override val horizontalAlign = render.horizontalAlign - override val verticalAlign = render.verticalAlign + ) = object : Renderable { + override val width = render.width + override val height = render.height + override val horizontalAlign = render.horizontalAlign + override val verticalAlign = render.verticalAlign - private var wasDown = false + private var wasDown = false - override fun render(posX: Int, posY: Int) { - val isDown = Mouse.isButtonDown(button) - if (isDown > wasDown && isHovered(posX, posY) && condition() && shouldAllowLink( - true, - bypassChecks - ) - ) { - onClick() - } - wasDown = isDown - render.render(posX, posY) + override fun render(posX: Int, posY: Int) { + val isDown = Mouse.isButtonDown(button) + if (isDown > wasDown && isHovered(posX, posY) && condition() && + shouldAllowLink(true, bypassChecks) + ) { + onClick() } + wasDown = isDown + render.render(posX, posY) } + } fun hoverTips( content: Any, @@ -248,43 +244,40 @@ interface Renderable { unhovered: Renderable, bypassChecks: Boolean = false, condition: () -> Boolean = { true }, - ) = - object : Renderable { - override val width: Int - get() = max(hovered.width, unhovered.width) - override val height = 10 - override val horizontalAlign get() = if (isHovered) hovered.horizontalAlign else unhovered.horizontalAlign - override val verticalAlign get() = if (isHovered) hovered.verticalAlign else unhovered.verticalAlign + ) = object : Renderable { + override val width: Int + get() = max(hovered.width, unhovered.width) + override val height = 10 + override val horizontalAlign get() = if (isHovered) hovered.horizontalAlign else unhovered.horizontalAlign + override val verticalAlign get() = if (isHovered) hovered.verticalAlign else unhovered.verticalAlign - var isHovered = false + var isHovered = false - override fun render(posX: Int, posY: Int) { - isHovered = if (isHovered(posX, posY) && condition() && shouldAllowLink(true, bypassChecks)) { - hovered.render(posX, posY) - true - } else { - unhovered.render(posX, posY) - false - } + override fun render(posX: Int, posY: Int) { + isHovered = if (isHovered(posX, posY) && condition() && shouldAllowLink(true, bypassChecks)) { + hovered.render(posX, posY) + true + } else { + unhovered.render(posX, posY) + false } } + } fun itemStack( - any: ItemStack, - scale: Double = 1.0, + item: ItemStack, + scale: Double = NEUItems.itemFontSize, + xSpacing: Int = 2, horizontalAlign: HorizontalAlignment = HorizontalAlignment.LEFT, - verticalAlign: VerticalAlignment = VerticalAlignment.TOP, + verticalAlign: VerticalAlignment = VerticalAlignment.CENTER, ) = object : Renderable { - override val width: Int - get() = 12 - override val height = 10 + override val width = (15.5 * scale + 1.5).toInt() + xSpacing + override val height = (15.5 * scale + 1.5).toInt() override val horizontalAlign = horizontalAlign override val verticalAlign = verticalAlign override fun render(posX: Int, posY: Int) { - GlStateManager.pushMatrix() - any.renderOnScreen(0F, 0F, scaleMultiplier = scale) - GlStateManager.popMatrix() + item.renderOnScreen(xSpacing / 2.0f, 0F, scaleMultiplier = scale) } } @@ -297,7 +290,7 @@ interface Renderable { scale: Double = 1.0, color: Color = Color.WHITE, horizontalAlign: HorizontalAlignment = HorizontalAlignment.LEFT, - verticalAlign: VerticalAlignment = VerticalAlignment.TOP, + verticalAlign: VerticalAlignment = VerticalAlignment.CENTER, ) = object : Renderable { override val width by lazy { (Minecraft.getMinecraft().fontRendererObj.getStringWidth(text) * scale).toInt() + 1 } @@ -449,18 +442,12 @@ interface Renderable { } } else { val (textureX, textureY) = if (texture == SkillProgressBarConfig.TexturedBar.UsedTexture.MATCH_PACK) Pair( - 0, - 64 + 0, 64 ) else Pair(0, 0) Minecraft.getMinecraft().renderEngine.bindTexture(ResourceLocation(texture.path)) Minecraft.getMinecraft().ingameGUI.drawTexturedModalRect( - posX, - posY, - textureX, - textureY, - width, - height + posX, posY, textureX, textureY, width, height ) if (useChroma) { @@ -470,12 +457,7 @@ interface Renderable { GlStateManager.color(color.red / 255f, color.green / 255f, color.blue / 255f, 1f) } Minecraft.getMinecraft().ingameGUI.drawTexturedModalRect( - posX, - posY, - textureX, - textureY + height, - progress, - height + posX, posY, textureX, textureY + height, progress, height ) if (useChroma) { @@ -485,6 +467,19 @@ interface Renderable { } } + fun Renderable.renderBounds(color: Color = LorenzColor.GREEN.toColor()) = object : Renderable { + override val width = this@renderBounds.width + override val height = this@renderBounds.height + override val horizontalAlign = this@renderBounds.horizontalAlign + override val verticalAlign = this@renderBounds.verticalAlign + + override fun render(posX: Int, posY: Int) { + Gui.drawRect(0, 0, width, height, color.rgb) + this@renderBounds.render(posX, posY) + } + + } + fun fixedSizeLine( content: Renderable, width: Int, -- cgit