aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/gui/BarComponent.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-03 01:24:24 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-03 01:24:24 +0100
commite2677d6ee5c3f74d5f547ca48bf6641f047a2a1e (patch)
treefecc0322e48a399df7697da11adfb022d5641a6c /src/main/kotlin/gui/BarComponent.kt
parent646843ba3b960ac48f9866b3640438d3cc1dafc4 (diff)
downloadFirmament-e2677d6ee5c3f74d5f547ca48bf6641f047a2a1e.tar.gz
Firmament-e2677d6ee5c3f74d5f547ca48bf6641f047a2a1e.tar.bz2
Firmament-e2677d6ee5c3f74d5f547ca48bf6641f047a2a1e.zip
1.21.3 WIP
Diffstat (limited to 'src/main/kotlin/gui/BarComponent.kt')
-rw-r--r--src/main/kotlin/gui/BarComponent.kt182
1 files changed, 90 insertions, 92 deletions
diff --git a/src/main/kotlin/gui/BarComponent.kt b/src/main/kotlin/gui/BarComponent.kt
index 8ef0753..b82c666 100644
--- a/src/main/kotlin/gui/BarComponent.kt
+++ b/src/main/kotlin/gui/BarComponent.kt
@@ -1,4 +1,3 @@
-
package moe.nea.firmament.gui
import com.mojang.blaze3d.systems.RenderSystem
@@ -10,116 +9,115 @@ import io.github.notenoughupdates.moulconfig.observer.GetSetter
import io.github.notenoughupdates.moulconfig.platform.ModernRenderContext
import me.shedaniel.math.Color
import net.minecraft.client.gui.DrawContext
+import net.minecraft.client.render.RenderLayer
import net.minecraft.util.Identifier
import moe.nea.firmament.Firmament
class BarComponent(
- val progress: GetSetter<Double>, val total: GetSetter<Double>,
- val fillColor: Color,
- val emptyColor: Color,
+ val progress: GetSetter<Double>, val total: GetSetter<Double>,
+ val fillColor: Color,
+ val emptyColor: Color,
) : GuiComponent() {
- override fun getWidth(): Int {
- return 80
- }
+ override fun getWidth(): Int {
+ return 80
+ }
- override fun getHeight(): Int {
- return 8
- }
+ override fun getHeight(): Int {
+ return 8
+ }
- data class Texture(
- val identifier: Identifier,
- val u1: Float, val v1: Float,
- val u2: Float, val v2: Float,
- ) {
- fun draw(context: DrawContext, x: Int, y: Int, width: Int, height: Int, color: Color) {
- context.drawTexturedQuad(
- identifier,
- x, y, x + width, x + height, 0,
- u1, u2, v1, v2,
- color.red / 255F,
- color.green / 255F,
- color.blue / 255F,
- color.alpha / 255F,
- )
- }
- }
+ data class Texture(
+ val identifier: Identifier,
+ val u1: Float, val v1: Float,
+ val u2: Float, val v2: Float,
+ ) {
+ fun draw(context: DrawContext, x: Int, y: Int, width: Int, height: Int, color: Color) {
+ context.drawTexturedQuad(
+ RenderLayer::getGuiTextured,
+ identifier,
+ x, y, x + width, x + height,
+ u1, u2, v1, v2,
+ color.color
+ )
+ }
+ }
- companion object {
- val resource = Firmament.identifier("textures/gui/bar.png")
- val left = Texture(resource, 0 / 64F, 0 / 64F, 4 / 64F, 8 / 64F)
- val middle = Texture(resource, 4 / 64F, 0 / 64F, 8 / 64F, 8 / 64F)
- val right = Texture(resource, 8 / 64F, 0 / 64F, 12 / 64F, 8 / 64F)
- val segmentOverlay = Texture(resource, 12 / 64F, 0 / 64F, 15 / 64F, 8 / 64F)
- }
+ companion object {
+ val resource = Firmament.identifier("textures/gui/bar.png")
+ val left = Texture(resource, 0 / 64F, 0 / 64F, 4 / 64F, 8 / 64F)
+ val middle = Texture(resource, 4 / 64F, 0 / 64F, 8 / 64F, 8 / 64F)
+ val right = Texture(resource, 8 / 64F, 0 / 64F, 12 / 64F, 8 / 64F)
+ val segmentOverlay = Texture(resource, 12 / 64F, 0 / 64F, 15 / 64F, 8 / 64F)
+ }
- private fun drawSection(
- context: DrawContext,
- texture: Texture,
- x: Int,
- y: Int,
- width: Int,
- sectionStart: Double,
- sectionEnd: Double
- ) {
- if (sectionEnd < progress.get() && width == 4) {
- texture.draw(context, x, y, 4, 8, fillColor)
- return
- }
- if (sectionStart > progress.get() && width == 4) {
- texture.draw(context, x, y, 4, 8, emptyColor)
- return
- }
- val increasePerPixel = (sectionEnd - sectionStart) / width
- var valueAtPixel = sectionStart
- for (i in (0 until width)) {
- val newTex =
- Texture(texture.identifier, texture.u1 + i / 64F, texture.v1, texture.u1 + (i + 1) / 64F, texture.v2)
- newTex.draw(
- context, x + i, y, 1, 8,
- if (valueAtPixel < progress.get()) fillColor else emptyColor
- )
- valueAtPixel += increasePerPixel
- }
- }
+ private fun drawSection(
+ context: DrawContext,
+ texture: Texture,
+ x: Int,
+ y: Int,
+ width: Int,
+ sectionStart: Double,
+ sectionEnd: Double
+ ) {
+ if (sectionEnd < progress.get() && width == 4) {
+ texture.draw(context, x, y, 4, 8, fillColor)
+ return
+ }
+ if (sectionStart > progress.get() && width == 4) {
+ texture.draw(context, x, y, 4, 8, emptyColor)
+ return
+ }
+ val increasePerPixel = (sectionEnd - sectionStart) / width
+ var valueAtPixel = sectionStart
+ for (i in (0 until width)) {
+ val newTex =
+ Texture(texture.identifier, texture.u1 + i / 64F, texture.v1, texture.u1 + (i + 1) / 64F, texture.v2)
+ newTex.draw(
+ context, x + i, y, 1, 8,
+ if (valueAtPixel < progress.get()) fillColor else emptyColor
+ )
+ valueAtPixel += increasePerPixel
+ }
+ }
- override fun render(context: GuiImmediateContext) {
- val renderContext = (context.renderContext as ModernRenderContext).drawContext
- var i = 0
- val x = 0
- val y = 0
- while (i < context.width - 4) {
- drawSection(
- renderContext,
- if (i == 0) left else middle,
- x + i, y,
- (context.width - (i + 4)).coerceAtMost(4),
- i * total.get() / context.width, (i + 4) * total.get() / context.width
- )
- i += 4
- }
- drawSection(
- renderContext,
- right,
- x + context.width - 4,
- y,
- 4,
- (context.width - 4) * total.get() / context.width,
- total.get()
- )
- RenderSystem.setShaderColor(1F, 1F, 1F, 1F)
+ override fun render(context: GuiImmediateContext) {
+ val renderContext = (context.renderContext as ModernRenderContext).drawContext
+ var i = 0
+ val x = 0
+ val y = 0
+ while (i < context.width - 4) {
+ drawSection(
+ renderContext,
+ if (i == 0) left else middle,
+ x + i, y,
+ (context.width - (i + 4)).coerceAtMost(4),
+ i * total.get() / context.width, (i + 4) * total.get() / context.width
+ )
+ i += 4
+ }
+ drawSection(
+ renderContext,
+ right,
+ x + context.width - 4,
+ y,
+ 4,
+ (context.width - 4) * total.get() / context.width,
+ total.get()
+ )
+ RenderSystem.setShaderColor(1F, 1F, 1F, 1F)
- }
+ }
}
fun Identifier.toMoulConfig(): MyResourceLocation {
- return MyResourceLocation(this.namespace, this.path)
+ return MyResourceLocation(this.namespace, this.path)
}
fun RenderContext.color(color: Color) {
- color(color.red, color.green, color.blue, color.alpha)
+ color(color.red, color.green, color.blue, color.alpha)
}
fun RenderContext.color(red: Int, green: Int, blue: Int, alpha: Int) {
- color(red / 255f, green / 255f, blue / 255f, alpha / 255f)
+ color(red / 255f, green / 255f, blue / 255f, alpha / 255f)
}