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 edcbea89d..f03ffab02 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 @@ -1,9 +1,14 @@ package ru.dbotthepony.mc.otm.client.screen.widget import com.mojang.blaze3d.systems.RenderSystem +import com.mojang.blaze3d.vertex.BufferUploader +import com.mojang.blaze3d.vertex.DefaultVertexFormat import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.VertexFormat import net.minecraft.ChatFormatting +import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component +import org.lwjgl.opengl.GL11 import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.client.render.* import ru.dbotthepony.mc.otm.client.screen.MatteryScreen @@ -12,6 +17,9 @@ import ru.dbotthepony.mc.otm.core.formatMatterLevel import ru.dbotthepony.mc.otm.core.formatPowerLevel import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget +import java.util.Random +import kotlin.math.cos +import kotlin.math.sin open class PowerGaugePanel( screen: MatteryScreen<*>, @@ -106,8 +114,42 @@ open class MatterGaugePanel( override fun innerRender(stack: PoseStack, mouseX: Float, mouseY: Float, partialTick: Float) { GAUGE_BACKGROUND.render(stack) - val height = this.height * widget.percentage() - GAUGE_FOREGROUND.renderPartial(stack, y = this.height - height, height = height, winding = UVWindingOrder.U0_V1_U1_V0) + val height = this.height * (1f - widget.percentage()) + + RenderSystem.setShader(GameRenderer::getPositionTexShader) + RenderSystem.enableTexture() + RenderSystem.enableBlend() + RenderSystem.defaultBlendFunc() + RenderSystem.depthFunc(GL11.GL_ALWAYS) + + RenderSystem.setShaderColor(1f, 1f, 1f, 1f) + + val u0 = GAUGE_FOREGROUND.x / GAUGE_FOREGROUND.imageWidth + val u1 = (GAUGE_FOREGROUND.x + GAUGE_FOREGROUND.w) / GAUGE_FOREGROUND.imageWidth + val v1 = (GAUGE_FOREGROUND.y + GAUGE_FOREGROUND.h) / GAUGE_FOREGROUND.imageHeight + + val matrix = stack.last().pose() + val builder = tesselator.builder + + builder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_TEX) + + builder.vertex(matrix, 0f, this.height, 0f).uv(u0, v1).endVertex() + builder.vertex(matrix, width, this.height, 0f).uv(u1, v1).endVertex() + + for (i in 4 downTo 0) { + val sin = sin((System.currentTimeMillis() / 50L + i * 2L).toDouble() / 4.0).toFloat() + val cos = cos((System.currentTimeMillis() / 50L + i * 3L + 27L).toDouble() / 4.0).toFloat() + + val thisX = (width * (i / 4f)) + val thisY = (height + sin + cos).coerceAtLeast(0f) + + builder.vertex(matrix, thisX, thisY, 0f).uv( + (GAUGE_FOREGROUND.x + (i / 4f) * GAUGE_FOREGROUND.w) / GAUGE_FOREGROUND.imageWidth, + (GAUGE_FOREGROUND.y + thisY) / GAUGE_FOREGROUND.imageHeight, + ).endVertex() + } + + BufferUploader.drawWithShader(builder.end()) } override fun innerRenderTooltips(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float): Boolean { @@ -164,7 +206,7 @@ open class PatternGaugePanel( } } -open class ProgressGaugePanel @JvmOverloads constructor( +open class ProgressGaugePanel( screen: MatteryScreen<*>, parent: EditablePanel? = null, val widget: ProgressGaugeWidget,