diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt | 85 |
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 |
