aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament')
-rw-r--r--src/main/kotlin/moe/nea/firmament/Firmament.kt3
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/WBar.kt69
-rw-r--r--src/main/kotlin/moe/nea/firmament/util/colorconversion.kt6
3 files changed, 78 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/Firmament.kt b/src/main/kotlin/moe/nea/firmament/Firmament.kt
index b3e2115..6132d3b 100644
--- a/src/main/kotlin/moe/nea/firmament/Firmament.kt
+++ b/src/main/kotlin/moe/nea/firmament/Firmament.kt
@@ -49,6 +49,7 @@ import kotlinx.coroutines.runBlocking
import kotlinx.serialization.json.Json
import kotlin.coroutines.EmptyCoroutineContext
import net.minecraft.command.CommandRegistryAccess
+import net.minecraft.util.Identifier
import moe.nea.firmament.commands.registerFirmamentCommand
import moe.nea.firmament.dbus.FirmamentDbusObject
import moe.nea.firmament.features.FeatureManager
@@ -129,4 +130,6 @@ object Firmament : ModInitializer, ClientModInitializer {
})
}
+
+ fun identifier(path: String) = Identifier(MOD_ID, path)
}
diff --git a/src/main/kotlin/moe/nea/firmament/gui/WBar.kt b/src/main/kotlin/moe/nea/firmament/gui/WBar.kt
new file mode 100644
index 0000000..879805d
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/gui/WBar.kt
@@ -0,0 +1,69 @@
+package moe.nea.firmament.gui
+
+import io.github.cottonmc.cotton.gui.client.ScreenDrawing
+import io.github.cottonmc.cotton.gui.widget.WWidget
+import io.github.cottonmc.cotton.gui.widget.data.Texture
+import me.shedaniel.math.Color
+import net.minecraft.client.util.math.MatrixStack
+import moe.nea.firmament.Firmament
+
+data class WBar(
+ var progress: Double,
+ val total: Double,
+ val fillColor: Color,
+ val emptyColor: Color,
+) : WWidget() {
+ 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, 4 / 64F, 8 / 64F)
+ val right = Texture(resource, 8 / 64F, 0 / 64F, 4 / 64F, 8 / 64F)
+ val segmentOverlay = Texture(resource, 12 / 64F, 0 / 64F, 15 / 64F, 8 / 64F)
+
+ override fun canResize(): Boolean {
+ return true
+ }
+
+ private fun drawSection(
+ matrices: MatrixStack,
+ texture: Texture,
+ x: Int,
+ y: Int,
+ width: Int,
+ sectionStart: Double,
+ sectionEnd: Double
+ ) {
+ if (sectionEnd < progress && width == 4) {
+ ScreenDrawing.texturedRect(matrices, x, y, 4, 8, texture, fillColor.color)
+ return
+ }
+ if (sectionStart > progress && width == 4) {
+ ScreenDrawing.texturedRect(matrices, x, y, 4, 8, texture, emptyColor.color)
+ return
+ }
+ val increasePerPixel = (sectionEnd - sectionStart / 4)
+ var valueAtPixel = sectionStart
+ for (i in (0 until width)) {
+ ScreenDrawing.texturedRect(
+ matrices, x + i, y, 1, 8,
+ texture.image, texture.u1 + i / 64F, texture.v1, texture.u1 + (i + 1) / 64F, texture.v2,
+ if (valueAtPixel < progress) fillColor.color else emptyColor.color
+ )
+ valueAtPixel += increasePerPixel
+ }
+ }
+
+ override fun paint(matrices: MatrixStack, x: Int, y: Int, mouseX: Int, mouseY: Int) {
+ var i = 0
+ while (i < width - 4) {
+ drawSection(
+ matrices,
+ if (i == 0) left else middle,
+ x + i, y,
+ (width - (i + 4)).coerceAtMost(4),
+ i * total / width, (i + 4) * total / width
+ )
+ i += 4
+ }
+ drawSection(matrices, right, x + width - 4, y, 4, (width - 4) * total / width, total)
+ }
+}
diff --git a/src/main/kotlin/moe/nea/firmament/util/colorconversion.kt b/src/main/kotlin/moe/nea/firmament/util/colorconversion.kt
new file mode 100644
index 0000000..c19eefa
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/util/colorconversion.kt
@@ -0,0 +1,6 @@
+package moe.nea.firmament.util
+
+import net.minecraft.util.DyeColor
+
+fun DyeColor.toShedaniel(): me.shedaniel.math.Color =
+ me.shedaniel.math.Color.ofOpaque(this.signColor)