From 65aa3392ba31e90c58e7443a1d38335b3a4a9dec Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Tue, 28 Dec 2021 23:12:10 +0700 Subject: [PATCH] Now gauges render properly --- .../mc/otm/client/render/SkinElement.kt | 45 +++++++++++++++++++ .../client/screen/ChemicalGeneratorScreen.kt | 2 +- .../mc/otm/client/screen/widget/Gauges.kt | 23 +++++++--- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt index 30ec143dd..53d2fe574 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt @@ -31,6 +31,22 @@ data class SkinElement( renderRaw(stack, x, y, width, height, winding) } + @JvmOverloads + fun renderPartial( + stack: PoseStack, + x: Float = 0f, + y: Float = 0f, + width: Float = rect_w, + height: Float = rect_h, + winding: UVWindingOrder = UVWindingOrder.U0_V0_U1_V1 + ) { + RenderSystem.setShaderTexture(0, texture) + RenderSystem.enableBlend() + RenderSystem.defaultBlendFunc() + + renderRawPartial(stack, x, y, width, height, winding) + } + @JvmOverloads fun renderW( stack: PoseStack, @@ -81,4 +97,33 @@ data class SkinElement( winded.v1, ) } + + @JvmOverloads + fun renderRawPartial( + stack: PoseStack, + x: Float = 0f, + y: Float = 0f, + width: Float = rect_w, + height: Float = rect_h, + winding: UVWindingOrder = UVWindingOrder.U0_V0_U1_V1 + ) { + val u0 = image_x / defined_width + val v0 = image_y / defined_height + val u1 = (image_x + width) / defined_width + val v1 = (image_y + height) / defined_height + + val winded = winding.translate(u0, v0, u1, v1) + + RenderHelper.drawTexturedRectUV( + stack, + x, + y, + width, + height, + winded.u0, + winded.v0, + winded.u1, + winded.v1, + ) + } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ChemicalGeneratorScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ChemicalGeneratorScreen.kt index 1dd3d88a8..31c0c5c89 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ChemicalGeneratorScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ChemicalGeneratorScreen.kt @@ -18,7 +18,7 @@ class ChemicalGeneratorScreen(menu: ChemicalGeneratorMenu, inventory: Inventory, PowerGaugePanel(this, frame, menu.energy, LEFT_MARGIN, GAUGE_TOP_WITH_SLOT) SlotPanel(this, frame, menu.batterySlot, LEFT_MARGIN, SLOT_TOP_UNDER_GAUGE) - ProgressGaugePanel(this, frame, menu.progress, 63f, PROGRESS_ARROW_TOP) + ProgressGaugePanel(this, frame, menu.progress, 63f, PROGRESS_ARROW_TOP).flop = true SlotPanel(this, frame, menu.fuelSlot, 93f, PROGRESS_SLOT_TOP) return frame diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/Gauges.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/Gauges.kt index f79c11cba..fc569e423 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/Gauges.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/Gauges.kt @@ -6,6 +6,7 @@ import net.minecraft.network.chat.Component import net.minecraft.network.chat.TranslatableComponent import ru.dbotthepony.mc.otm.client.render.SkinElement import ru.dbotthepony.mc.otm.client.screen.MatteryScreen +import ru.dbotthepony.mc.otm.client.screen.UVWindingOrder import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.menu.FormattingHelper import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget @@ -24,7 +25,8 @@ class PowerGaugePanel @JvmOverloads constructor( override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) { GAUGE_BACKGROUND.render(stack) - GAUGE_FOREGROUND.render(stack) + val height = this.height * widget.percentage() + GAUGE_FOREGROUND.renderPartial(stack, y = this.height - height, height = height, winding = UVWindingOrder.U0_V1_U1_V0) } override fun innerRenderTooltips(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float): Boolean { @@ -61,7 +63,8 @@ class MatterGaugePanel @JvmOverloads constructor( override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) { GAUGE_BACKGROUND.render(stack) - GAUGE_FOREGROUND.render(stack) + val height = this.height * widget.percentage() + GAUGE_FOREGROUND.renderPartial(stack, y = this.height - height, height = height, winding = UVWindingOrder.U0_V1_U1_V0) } override fun innerRenderTooltips(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float): Boolean { @@ -98,7 +101,8 @@ class PatternGaugePanel @JvmOverloads constructor( override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) { GAUGE_BACKGROUND.render(stack) - GAUGE_FOREGROUND.render(stack) + val height = this.height * widget.percentage() + GAUGE_FOREGROUND.renderPartial(stack, y = this.height - height, height = height, winding = UVWindingOrder.U0_V1_U1_V0) } override fun innerRenderTooltips(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float): Boolean { @@ -133,9 +137,18 @@ class ProgressGaugePanel @JvmOverloads constructor( scissor = true } + var flop = false + override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) { - GAUGE_BACKGROUND.render(stack) - GAUGE_FOREGROUND.render(stack) + if (flop) { + GAUGE_BACKGROUND.render(stack, winding = UVWindingOrder.U1_V0_U0_V1) + val width = this.width * widget.percentage() + GAUGE_FOREGROUND.renderPartial(stack, x = this.width - width, width = width, winding = UVWindingOrder.U1_V0_U0_V1) + } else { + GAUGE_BACKGROUND.render(stack) + val width = this.width * widget.percentage() + GAUGE_FOREGROUND.renderPartial(stack, width = width) + } } override fun innerRenderTooltips(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float): Boolean {