aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
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
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')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt26
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt61
2 files changed, 86 insertions, 1 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
index 135335067..b7930bfd1 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
@@ -7,6 +7,7 @@ import at.hannibal2.skyhanni.features.dungeon.DungeonData
import at.hannibal2.skyhanni.test.TestBingo
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
import at.hannibal2.skyhanni.utils.StringUtils.toDashlessUUID
+import at.hannibal2.skyhanni.utils.renderables.Renderable
import io.github.moulberry.moulconfig.observer.Observer
import io.github.moulberry.moulconfig.observer.Property
import io.github.moulberry.notenoughupdates.mixins.AccessorGuiEditSign
@@ -286,4 +287,29 @@ object LorenzUtils {
else -> "Special"
}
}
+
+ fun <T> MutableList<List<Any>>.addSelector(
+ prefix: String,
+ values: Array<T>,
+ getName: (T) -> String,
+ isCurrent: (T) -> Boolean,
+ onChange: (T) -> Unit,
+ ) {
+ val newList = mutableListOf<Any>()
+ newList.add(prefix)
+ for (entry in values) {
+ val display = getName(entry)
+ if (isCurrent(entry)) {
+ newList.add("§a[$display]")
+ } else {
+ newList.add("§e[")
+ newList.add(Renderable.link("§e$display") {
+ onChange(entry)
+ })
+ newList.add("§e]")
+ }
+ newList.add(" ")
+ }
+ add(newList)
+ }
} \ No newline at end of file
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) {
}