diff options
Diffstat (limited to 'src/main/java/dev/isxander/yacl3/gui/AbstractWidget.java')
-rw-r--r-- | src/main/java/dev/isxander/yacl3/gui/AbstractWidget.java | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/main/java/dev/isxander/yacl3/gui/AbstractWidget.java b/src/main/java/dev/isxander/yacl3/gui/AbstractWidget.java index 6f92749..1f7c29b 100644 --- a/src/main/java/dev/isxander/yacl3/gui/AbstractWidget.java +++ b/src/main/java/dev/isxander/yacl3/gui/AbstractWidget.java @@ -1,7 +1,8 @@ package dev.isxander.yacl3.gui; +import com.mojang.blaze3d.vertex.VertexConsumer; import dev.isxander.yacl3.api.utils.Dimension; -import dev.isxander.yacl3.gui.utils.ButtonTextureRenderer; +import dev.isxander.yacl3.gui.utils.YACLRenderHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; @@ -9,8 +10,10 @@ import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.sounds.SoundEvents; +import org.joml.Matrix4f; import java.awt.Color; @@ -75,7 +78,7 @@ public abstract class AbstractWidget implements GuiEventListener, Renderable, Na int width = x2 - x1; int height = y2 - y1; - ButtonTextureRenderer.render(graphics, x1, y1, width, height, enabled, hovered); + YACLRenderHelper.renderButtonTexture(graphics, x1, y1, width, height, enabled, hovered); } protected void drawOutline(GuiGraphics graphics, int x1, int y1, int x2, int y2, int width, int color) { @@ -85,6 +88,37 @@ public abstract class AbstractWidget implements GuiEventListener, Renderable, Na graphics.fill(x1, y1, x1 + width, y2, color); } + protected void fillSidewaysGradient(GuiGraphics graphics, int x1, int y1, int x2, int y2, int startColor, int endColor) { + //Fills a gradient, left to right + //Uses practically the same method as the GuiGraphics class, but with the x/y moved + //Has a custom "z" value in case needed for later + VertexConsumer vertex = graphics.bufferSource().getBuffer(RenderType.gui()); + Matrix4f matrix4f = graphics.pose().last().pose(); + vertex.vertex(matrix4f, x1, y1, 0).color(startColor).endVertex(); + vertex.vertex(matrix4f, x1, y2, 0).color(startColor).endVertex(); + vertex.vertex(matrix4f, x2, y2, 0).color(endColor).endVertex(); + vertex.vertex(matrix4f, x2, y1, 0).color(endColor).endVertex(); + } + + + protected void drawRainbowGradient(GuiGraphics graphics, int x1, int y1, int x2, int y2) { + //Draws a rainbow gradient, left to right + int[] colors = new int[] {Color.red.getRGB(), Color.yellow.getRGB(), Color.green.getRGB(), + Color.cyan.getRGB(), Color.blue.getRGB(), Color.magenta.getRGB(), Color.red.getRGB()}; //all the colors in the gradient + int width = x2 - x1; + int maxColors = colors.length - 1; + for (int color = 0; color < maxColors; color++) { + //First checks if the final color is being rendered, if true -> uses x2 int instead of x1 + //if false -> it adds the width divided by the max colors multiplied by the current color plus one to the x1 int + //the x2 int for the fillSidewaysGradient is the same formula, excluding the additional plus one. + //The gradient colors is determined by the color int and the color int plus one, which is why red is in the colors array twice + fillSidewaysGradient(graphics, + x1 + (width / maxColors * color), y1, + color == maxColors - 1 ? x2 : x1 + (width / maxColors * (color + 1)), y2, + colors[color], colors[color + 1]); + } + } + protected int multiplyColor(int hex, float amount) { Color color = new Color(hex, true); |