Matter, but flowing

This commit is contained in:
DBotThePony 2022-09-02 16:35:52 +07:00
parent 37234e6503
commit 93ffd8bbd3
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -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,