aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt85
1 files changed, 68 insertions, 17 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt
index 0150e7311..405dc1bb5 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt
@@ -4,8 +4,10 @@ import at.hannibal2.skyhanni.config.core.config.Position
import at.hannibal2.skyhanni.data.GuiEditManager
import at.hannibal2.skyhanni.data.GuiEditManager.Companion.getAbsX
import at.hannibal2.skyhanni.data.GuiEditManager.Companion.getAbsY
+import at.hannibal2.skyhanni.events.GuiRenderItemEvent
import at.hannibal2.skyhanni.utils.renderables.Renderable
import io.github.moulberry.moulconfig.internal.TextRenderUtils
+import io.github.moulberry.notenoughupdates.util.Utils
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.FontRenderer
import net.minecraft.client.gui.Gui
@@ -59,6 +61,15 @@ object RenderUtils {
beacon: Boolean = false,
alpha: Float = -1f,
) {
+ drawColor(location, color.toColor(), beacon, alpha)
+ }
+
+ fun RenderWorldLastEvent.drawColor(
+ location: LorenzVec,
+ color: Color,
+ beacon: Boolean = false,
+ alpha: Float = -1f,
+ ) {
val (viewerX, viewerY, viewerZ) = getViewerPos(partialTicks)
val x = location.x - viewerX
val y = location.y - viewerY
@@ -73,11 +84,11 @@ object RenderUtils {
GlStateManager.disableCull()
drawFilledBoundingBox(
AxisAlignedBB(x, y, z, x + 1, y + 1, z + 1).expandBlock(),
- color.toColor(),
+ color,
realAlpha
)
GlStateManager.disableTexture2D()
- if (distSq > 5 * 5 && beacon) renderBeaconBeam(x, y + 1, z, color.toColor().rgb, 1.0f, partialTicks)
+ if (distSq > 5 * 5 && beacon) renderBeaconBeam(x, y + 1, z, color.rgb, 1.0f, partialTicks)
GlStateManager.disableLighting()
GlStateManager.enableTexture2D()
GlStateManager.enableDepth()
@@ -344,6 +355,15 @@ object RenderUtils {
return lastValue + (currentValue - lastValue) * multiplier
}
+
+ fun Position.transform(): Pair<Int, Int> {
+ GlStateManager.translate(getAbsX().toFloat(), getAbsY().toFloat(), 0F)
+ GlStateManager.scale(effectiveScale, effectiveScale, 1F)
+ val x = ((Utils.getMouseX() - getAbsX()) / effectiveScale).toInt()
+ val y = ((Utils.getMouseY() - getAbsY()) / effectiveScale).toInt()
+ return x to y
+ }
+
fun Position.renderString(string: String?, offsetX: Int = 0, offsetY: Int = 0, posLabel: String) {
if (string == null) return
if (string == "") return
@@ -354,12 +374,12 @@ object RenderUtils {
private fun Position.renderString0(string: String?, offsetX: Int = 0, offsetY: Int = 0): Int {
val display = "§f$string"
GlStateManager.pushMatrix()
-
+ transform()
val minecraft = Minecraft.getMinecraft()
val renderer = minecraft.renderManager.fontRenderer
- val x = getAbsX() + offsetX
- val y = getAbsY() + offsetY
+ val x = offsetX
+ val y = offsetY
GlStateManager.translate(x + 1.0, y + 1.0, 0.0)
renderer.drawStringWithShadow(display, 0f, 0f, 0)
@@ -433,15 +453,17 @@ object RenderUtils {
private fun Position.renderLine(line: List<Any?>, offsetY: Int, itemScale: Double = 1.0): Int {
GlStateManager.pushMatrix()
- GlStateManager.translate(getAbsX().toFloat(), (getAbsY() + offsetY).toFloat(), 0F)
+ val (x, y) = transform()
+ GlStateManager.translate(0f, offsetY.toFloat(), 0F)
var offsetX = 0
- for (any in line) {
- val renderable = Renderable.fromAny(any, itemScale = itemScale)
- ?: throw RuntimeException("Unknown render object: $any")
-
- renderable.render(getAbsX() + offsetX, getAbsY() + offsetY)
- offsetX += renderable.width
- GlStateManager.translate(renderable.width.toFloat(), 0F, 0F)
+ Renderable.withMousePosition(x, y) {
+ for (any in line) {
+ val renderable = Renderable.fromAny(any, itemScale = itemScale)
+ ?: throw RuntimeException("Unknown render object: $any")
+ renderable.render(offsetX, offsetY)
+ offsetX += renderable.width
+ GlStateManager.translate(renderable.width.toFloat(), 0F, 0F)
+ }
}
GlStateManager.popMatrix()
return offsetX
@@ -670,7 +692,6 @@ object RenderUtils {
}
fun RenderWorldLastEvent.draw3DLine(p1: LorenzVec, p2: LorenzVec, color: Color, lineWidth: Int, depth: Boolean) {
- GlStateManager.disableDepth()
GlStateManager.disableCull()
val render = Minecraft.getMinecraft().renderViewEntity
@@ -708,8 +729,12 @@ object RenderUtils {
GlStateManager.enableDepth()
}
- fun RenderWorldLastEvent.exactLocation(entity: Entity): LorenzVec {
- return exactLocation(entity, partialTicks)
+ fun RenderWorldLastEvent.exactLocation(entity: Entity) = exactLocation(entity, partialTicks)
+
+ fun RenderWorldLastEvent.exactPlayerEyeLocation(): LorenzVec {
+ val player = Minecraft.getMinecraft().thePlayer
+ val add = if (player.isSneaking) LorenzVec(0.0, 1.54, 0.0) else LorenzVec(0.0, 1.62, 0.0)
+ return exactLocation(player).add(add)
}
fun exactLocation(entity: Entity, partialTicks: Float): LorenzVec {
@@ -958,4 +983,30 @@ object RenderUtils {
)
)
}
-}
+
+ fun GuiRenderItemEvent.RenderOverlayEvent.GuiRenderItemPost.drawSlotText(
+ xPos: Int,
+ yPos: Int,
+ text: String,
+ scale: Float
+ ) {
+ val fontRenderer = Minecraft.getMinecraft().fontRendererObj
+
+ GlStateManager.disableLighting()
+ GlStateManager.disableDepth()
+ GlStateManager.disableBlend()
+
+ GlStateManager.pushMatrix()
+ GlStateManager.translate((xPos - fontRenderer.getStringWidth(text)).toFloat(), yPos.toFloat(), 0f)
+ GlStateManager.scale(scale, scale, 1f)
+ fontRenderer.drawStringWithShadow(text, 0f, 0f, 16777215)
+
+ val reverseScale = 1 / scale
+
+ GlStateManager.scale(reverseScale, reverseScale, 1f)
+ GlStateManager.popMatrix()
+
+ GlStateManager.enableLighting()
+ GlStateManager.enableDepth()
+ }
+} \ No newline at end of file