diff options
| author | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-05-15 15:57:52 +0200 |
|---|---|---|
| committer | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-05-15 15:57:52 +0200 |
| commit | 18e0b6fcaa1916d87ba176755d160c6d456292f1 (patch) | |
| tree | 709cf6ac79fd04b2cc5febb7eca352f23f215301 /src/main/java/at/hannibal2/skyhanni/utils/renderables | |
| parent | 1097c46e471a81e41849287b64b0cb4b37a778c3 (diff) | |
| download | skyhanni-18e0b6fcaa1916d87ba176755d160c6d456292f1.tar.gz skyhanni-18e0b6fcaa1916d87ba176755d160c6d456292f1.tar.bz2 skyhanni-18e0b6fcaa1916d87ba176755d160c6d456292f1.zip | |
Added Contest Time Needed
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/renderables')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt | 61 |
1 files changed, 60 insertions, 1 deletions
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 4d8351083..9917799f7 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -2,12 +2,14 @@ package at.hannibal2.skyhanni.utils.renderables import at.hannibal2.skyhanni.config.core.config.gui.GuiPositionEditor import at.hannibal2.skyhanni.data.ToolTipData +import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.NEUItems.renderOnScreen import io.github.moulberry.moulconfig.gui.GuiScreenElementWrapper import io.github.moulberry.notenoughupdates.util.Utils import net.minecraft.client.Minecraft import net.minecraft.client.gui.Gui +import net.minecraft.client.gui.GuiScreen import net.minecraft.client.gui.inventory.GuiEditSign import net.minecraft.client.renderer.GlStateManager import net.minecraft.item.ItemStack @@ -16,9 +18,10 @@ import kotlin.math.max interface Renderable { val width: Int + val height: Int fun isHovered(posX: Int, posY: Int) = Utils.getMouseX() in (posX..posX + width) - && Utils.getMouseY() in (posY..posY + 10) // TODO: adjust for variable height? + && Utils.getMouseY() in (posY..posY + height) // TODO: adjust for variable height? /** * N.B.: the offset is absolute, not relative to the position and should not be used for rendering @@ -49,6 +52,7 @@ interface Renderable { object : Renderable { override val width: Int get() = render.width + override val height = 10 private var wasDown = false @@ -62,8 +66,58 @@ interface Renderable { wasDown = isDown render.render(posX, posY) } + } + + fun hoverTips(text: String, tips: List<String>, condition: () -> Boolean = { true }): Renderable { + val render = string(text) + return object : Renderable { + override val width: Int + get() = render.width + override val height = 11 + override fun render(posX: Int, posY: Int) { + render.render(posX, posY) + if (isHovered(posX, posY)) { + if (condition() && shouldAllowLink(true)) { + renderToolTips(posX, posY, tips) + } + } + } } + } + + private fun renderToolTips(posX: Int, posY: Int, tips: List<String>, border: Int = 1) { + val x = Utils.getMouseX() - posX + 10 + val startY = Utils.getMouseY() - posY - 10 + var maxX = 0 + var y = startY + val renderer = Minecraft.getMinecraft().fontRendererObj + + GlStateManager.translate(0f, 0f, 2f) + for (line in tips) { + renderer.drawStringWithShadow( + "§f$line", + 1f + x, + 1f + y, + 0 + ) + val currentX = renderer.getStringWidth(line) + if (currentX > maxX) { + maxX = currentX + } + y += 10 + } + GlStateManager.translate(0f, 0f, -1f) + + GuiScreen.drawRect( + x - border, + startY - border, + x + maxX + 10 + border, + y + border, + LorenzColor.DARK_GRAY.toColor().rgb + ) + GlStateManager.translate(0f, 0f, -1f) + } private fun shouldAllowLink(debug: Boolean = false): Boolean { val isGuiScreen = Minecraft.getMinecraft().currentScreen != null @@ -94,6 +148,7 @@ interface Renderable { fun underlined(renderable: Renderable) = object : Renderable { override val width: Int get() = renderable.width + override val height = 10 override fun render(posX: Int, posY: Int) { Gui.drawRect(0, 10, width, 11, 0xFFFFFFFF.toInt()) @@ -106,6 +161,7 @@ interface Renderable { object : Renderable { override val width: Int get() = max(hovered.width, unhovered.width) + override val height = 10 override fun render(posX: Int, posY: Int) { if (isHovered(posX, posY) && condition() && shouldAllowLink()) @@ -118,6 +174,7 @@ interface Renderable { fun itemStack(any: ItemStack, scale: Double = 1.0) = object : Renderable { override val width: Int get() = 12 + override val height = 10 override fun render(posX: Int, posY: Int) { any.renderOnScreen(0F, 0F, scaleMultiplier = scale) @@ -127,6 +184,7 @@ interface Renderable { fun string(string: String) = object : Renderable { override val width: Int get() = Minecraft.getMinecraft().fontRendererObj.getStringWidth(string) + override val height = 10 override fun render(posX: Int, posY: Int) { Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow("§f$string", 1f, 1f, 0) @@ -135,6 +193,7 @@ interface Renderable { fun placeholder(width: Int) = object : Renderable { override val width: Int = width + override val height = 10 override fun render(posX: Int, posY: Int) { } |
