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 package ru.dbotthepony.mc.otm.client.screen.widget
import com.mojang.blaze3d.systems.RenderSystem 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.PoseStack
import com.mojang.blaze3d.vertex.VertexFormat
import net.minecraft.ChatFormatting import net.minecraft.ChatFormatting
import net.minecraft.client.renderer.GameRenderer
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import org.lwjgl.opengl.GL11
import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.client.render.* import ru.dbotthepony.mc.otm.client.render.*
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen 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.core.formatPowerLevel
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget
import java.util.Random
import kotlin.math.cos
import kotlin.math.sin
open class PowerGaugePanel( open class PowerGaugePanel(
screen: MatteryScreen<*>, screen: MatteryScreen<*>,
@ -106,8 +114,42 @@ open class MatterGaugePanel(
override fun innerRender(stack: PoseStack, mouseX: Float, mouseY: Float, partialTick: Float) { override fun innerRender(stack: PoseStack, mouseX: Float, mouseY: Float, partialTick: Float) {
GAUGE_BACKGROUND.render(stack) GAUGE_BACKGROUND.render(stack)
val height = this.height * widget.percentage() val height = this.height * (1f - widget.percentage())
GAUGE_FOREGROUND.renderPartial(stack, y = this.height - height, height = height, winding = UVWindingOrder.U0_V1_U1_V0)
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 { 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<*>, screen: MatteryScreen<*>,
parent: EditablePanel? = null, parent: EditablePanel? = null,
val widget: ProgressGaugeWidget, val widget: ProgressGaugeWidget,