diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/renderables')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt | 113 |
1 files changed, 78 insertions, 35 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 5316b68cc..c1b382ba8 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -1,14 +1,18 @@ package at.hannibal2.skyhanni.utils.renderables import at.hannibal2.skyhanni.config.core.config.gui.GuiPositionEditor +import at.hannibal2.skyhanni.config.features.skillprogress.SkillProgressBarConfig import at.hannibal2.skyhanni.data.ToolTipData +import at.hannibal2.skyhanni.features.chroma.ChromaShaderManager +import at.hannibal2.skyhanni.features.chroma.ChromaType import at.hannibal2.skyhanni.utils.ColorUtils +import at.hannibal2.skyhanni.utils.ColorUtils.darker +import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderXAligned +import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderYAligned import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.NEUItems.renderOnScreen import at.hannibal2.skyhanni.utils.RenderUtils.HorizontalAlignment import at.hannibal2.skyhanni.utils.RenderUtils.VerticalAlignment -import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderXAligned -import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderYAligned import io.github.moulberry.moulconfig.gui.GuiScreenElementWrapper import io.github.moulberry.notenoughupdates.util.Utils import net.minecraft.client.Minecraft @@ -16,6 +20,7 @@ import net.minecraft.client.gui.Gui import net.minecraft.client.gui.inventory.GuiEditSign import net.minecraft.client.renderer.GlStateManager import net.minecraft.item.ItemStack +import net.minecraft.util.ResourceLocation import org.lwjgl.input.Mouse import java.awt.Color import java.util.Collections @@ -29,8 +34,8 @@ interface Renderable { val horizontalAlign: HorizontalAlignment val verticalAlign: VerticalAlignment fun isHovered(posX: Int, posY: Int) = currentRenderPassMousePosition?.let { (x, y) -> - x in (posX..posX + width) - && y in (posY..posY + height) // TODO: adjust for variable height? + x in (posX .. posX + width) + && y in (posY .. posY + height) // TODO: adjust for variable height? } ?: false /** @@ -43,7 +48,6 @@ interface Renderable { val logger = LorenzLogger("debug/renderable") val list = mutableMapOf<Pair<Int, Int>, List<Int>>() - var currentRenderPassMousePosition: Pair<Int, Int>? = null set @@ -237,12 +241,12 @@ interface Renderable { var isHovered = false override fun render(posX: Int, posY: Int) { - if (isHovered(posX, posY) && condition() && shouldAllowLink(true, bypassChecks)) { + isHovered = if (isHovered(posX, posY) && condition() && shouldAllowLink(true, bypassChecks)) { hovered.render(posX, posY) - isHovered = true + true } else { unhovered.render(posX, posY) - isHovered = false + false } } } @@ -301,25 +305,82 @@ interface Renderable { percent: Double, startColor: Color = Color(255, 0, 0), endColor: Color = Color(0, 255, 0), - width: Int = 30, - height: Int = 4, + useChroma: Boolean = false, + texture: SkillProgressBarConfig.TexturedBar.UsedTexture? = null, + width: Int = 182, + height: Int = 5, horizontalAlign: HorizontalAlignment = HorizontalAlignment.LEFT, - verticalAlign: VerticalAlignment = VerticalAlignment.TOP, + verticalAlign: VerticalAlignment = VerticalAlignment.TOP ) = object : Renderable { override val width = width override val height = height override val horizontalAlign = horizontalAlign override val verticalAlign = verticalAlign - val progress = (1.0 + percent * (width - 2.0)).toInt() - val color = ColorUtils.blendRGB(startColor, endColor, percent) + private val progress = if (texture == null) { + (1.0 + percent * (width - 2.0)).toInt() + } else { + percent.toInt() + } + + private var color = if (texture == null) { + ColorUtils.blendRGB(startColor, endColor, percent) + } else { + startColor + } override fun render(posX: Int, posY: Int) { - Gui.drawRect(0, 0, width, height, 0xFF43464B.toInt()) - Gui.drawRect(1, 1, width - 1, height - 1, color.darker().rgb) - Gui.drawRect(1, 1, progress, height - 1, color.rgb) + if (texture == null) { + Gui.drawRect(0, 0, width, height, 0xFF43464B.toInt()) + + if (useChroma) { + ChromaShaderManager.begin(ChromaType.STANDARD) + } + + val factor = 0.2 + val bgColor = if (useChroma) Color.GRAY.darker() else color + Gui.drawRect(1, 1, width - 1, height - 1, bgColor.darker(factor).rgb) + Gui.drawRect(1, 1, progress, height - 1, color.rgb) + + if (useChroma) { + ChromaShaderManager.end() + } + } else { + val (textureX, textureY) = if (texture == SkillProgressBarConfig.TexturedBar.UsedTexture.MATCH_PACK) Pair(0, 64) else Pair(0, 0) + + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceLocation(texture.path)) + Minecraft.getMinecraft().ingameGUI.drawTexturedModalRect(posX, posY, textureX, textureY, width, height) + + if (useChroma) { + ChromaShaderManager.begin(ChromaType.TEXTURED) + GlStateManager.color(1f, 1f, 1f, 1f) + } else { + GlStateManager.color(color.red / 255f, color.green / 255f, color.blue / 255f, 1f) + } + Minecraft.getMinecraft().ingameGUI.drawTexturedModalRect(posX, posY, textureX, textureY + height, progress, height) + + if (useChroma) { + ChromaShaderManager.end() + } + } } + } + + fun fixedSizeLine( + content: Renderable, + width: Int, + horizontalAlign: HorizontalAlignment = HorizontalAlignment.LEFT, + verticalAlign: VerticalAlignment = VerticalAlignment.TOP, + ) = object : Renderable { + val render = content + override val width = width + override val height = render.height + override val horizontalAlign = horizontalAlign + override val verticalAlign = verticalAlign + override fun render(posX: Int, posY: Int) { + render.renderXAligned(0, 0, width) + } } fun horizontalContainer( @@ -345,23 +406,5 @@ interface Renderable { GlStateManager.translate(-width.toFloat() - spacing.toFloat(), 0f, 0f) } } - - fun fixedSizeLine( - content: Renderable, - width: Int, - horizontalAlign: HorizontalAlignment = HorizontalAlignment.LEFT, - verticalAlign: VerticalAlignment = VerticalAlignment.TOP, - ) = object : Renderable { - val render = content - - override val width = width - override val height = render.height - override val horizontalAlign = horizontalAlign - override val verticalAlign = verticalAlign - - override fun render(posX: Int, posY: Int) { - render.renderXAligned(0, 0, width) - } - } } -} +}
\ No newline at end of file |
