aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils/renderables
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-05-15 15:57:52 +0200
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-05-15 15:57:52 +0200
commit18e0b6fcaa1916d87ba176755d160c6d456292f1 (patch)
tree709cf6ac79fd04b2cc5febb7eca352f23f215301 /src/main/java/at/hannibal2/skyhanni/utils/renderables
parent1097c46e471a81e41849287b64b0cb4b37a778c3 (diff)
downloadskyhanni-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.kt61
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) {
}