Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
plugins {
id 'fabric-loom' version '1.9-SNAPSHOT'
id 'fabric-loom' version '1.11-SNAPSHOT'
id 'maven-publish'
id 'me.fallenbreath.yamlang' version '1.3.1'
id 'me.fallenbreath.yamlang' version '1.4.1'
}

version = project.mod_version
Expand All @@ -18,12 +18,12 @@ repositories {
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url "https://maven.shedaniel.me/" }
maven { url "https://maven.terraformersmc.com/releases/" }
maven { url = 'https://jitpack.io' }
maven { url = "https://maven.shedaniel.me/" }
maven { url = "https://maven.terraformersmc.com/releases/" }
maven {
name "Ladysnake Mods"
url "https://maven.ladysnake.org/releases"
name = "Ladysnake Mods"
url = "https://maven.ladysnake.org/releases"
}

exclusiveContent {
Expand Down
16 changes: 8 additions & 8 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@ org.gradle.parallel=true

# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_version=1.21.4
yarn_mappings=1.21.4+build.8
loader_version=0.16.10
minecraft_version=1.21.8
yarn_mappings=1.21.8+build.1
loader_version=0.16.14

# Fabric API
fabric_version=0.119.0+1.21.4
fabric_version=0.129.0+1.21.8

# Mod Properties
mod_version=0.4.2+1.21.4
mod_version=0.4.2+1.21.8
maven_group=com.goby56.wakes
archives_base_name=wakes

# Dependencies
midnightlib_version = 1.6.9+1.21.4-fabric
iris_version=1.8.8+1.21.4-fabric
modmenu_version=13.0.3
midnightlib_version = 1.7.5+1.21.6-fabric
iris_version=1.9.0+1.21.6-fabric
modmenu_version=15.0.0-beta.3
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
13 changes: 13 additions & 0 deletions src/main/java/com/goby56/wakes/WakesClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,20 @@
import com.goby56.wakes.particle.ModParticles;
import com.goby56.wakes.render.SplashPlaneRenderer;
import com.goby56.wakes.render.WakeRenderer;
import com.mojang.blaze3d.pipeline.BlendFunction;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import com.mojang.blaze3d.vertex.VertexFormat;
import eu.midnightdust.lib.config.MidnightConfig;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.metadata.ModMetadata;
import net.irisshaders.iris.api.v0.IrisApi;
import net.minecraft.client.gl.RenderPipelines;
import net.minecraft.client.gl.UniformType;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.Identifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -23,6 +30,12 @@ public class WakesClient implements ClientModInitializer {
public static ModMetadata METADATA;
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
public static boolean areShadersEnabled = false;
public static final RenderPipeline GUI_HSV_PIPELINE = RenderPipelines.register(
RenderPipeline.builder(RenderPipelines.POSITION_TEX_COLOR_SNIPPET)
.withLocation(Identifier.of("wakes", "pipeline/gui_hsv"))
.withFragmentShader(Identifier.of("wakes", "gui_hsv"))
.build()
);

@Override
public void onInitializeClient() {
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/goby56/wakes/config/WakesConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ public class WakesConfig extends MidnightConfig {

// Debug
@Entry(category = GENERAL) public static boolean disableMod = false; // TODO SWITCH TO ENABLE MOD TOGGLE
@Entry(category = GENERAL) public static boolean pickBoat = true;


// Spawning
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.goby56.wakes.render.WakeColor;
import com.goby56.wakes.simulation.WakeHandler;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gl.RenderPipelines;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.SliderWidget;
Expand All @@ -22,7 +23,7 @@ public class ColorIntervalSlider extends SliderWidget {
public ColorIntervalSlider(ColorPickerScreen screenContext, int x, int y, int width, int height) {
super(x, y, width, height, Text.of(""), 0f);
this.initHandles();
this.colorPicker = new ColorPicker(screenContext, 10, screenContext.height / 2 - 64, 128, 128);
this.colorPicker = new ColorPicker(screenContext, 10, screenContext.height / 2, 128, 128);
colorPicker.registerListener(this::onColorPicked);
}

Expand All @@ -49,10 +50,10 @@ private void unfocusHandles() {

@Override
public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.enableDepthTest();
context.drawGuiTexture(RenderLayer::getGuiTextured, this.getTexture(), this.getX(), this.getY(), this.getWidth(), this.getHeight());
//RenderSystem.enableBlend();
//RenderSystem.defaultBlendFunc();
//RenderSystem.enableDepthTest();
context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, this.getTexture(), this.getX(), this.getY(), this.getWidth(), this.getHeight());

this.hovered = context.scissorContains(mouseX, mouseY) && mouseX >= this.getX() && mouseY >= this.getY() && mouseX < this.getX() + this.width && mouseY < this.getY() + this.height;
int n = handles.size();
Expand All @@ -75,7 +76,7 @@ public void renderWidget(DrawContext context, int mouseX, int mouseY, float delt
boolean correctY = mouseY >= getY() && mouseY < getY() + height;
for (SliderHandle handle : handles) {
boolean isHovered = handle.inProximity(hoveredVal, width, 8) && correctY;
context.drawGuiTexture(RenderLayer::getGuiTextured, handle.getHandleTexture(isHovered), this.getX() + (int)(handle.value * (double)(this.width - 4)), this.getY(), 8, this.getHeight());
context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, handle.getHandleTexture(isHovered), this.getX() + (int)(handle.value * (double)(this.width - 4)), this.getY(), 8, this.getHeight());
}
}

Expand Down
108 changes: 51 additions & 57 deletions src/main/java/com/goby56/wakes/config/gui/ColorPicker.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,18 @@

import com.goby56.wakes.WakesClient;
import com.goby56.wakes.render.WakeColor;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gl.ShaderProgramKey;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.gl.RenderPipelines;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.render.*;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import org.joml.Matrix3x2f;
import org.joml.Vector2f;

import java.awt.*;
Expand All @@ -25,8 +23,8 @@
import java.util.regex.Pattern;

public class ColorPicker extends ClickableWidget {
private static final Identifier FRAME_TEXTURE = Identifier.ofVanilla("textures/gui/sprites/widget/slot_frame.png");
private static final Identifier PICKER_BG_TEXTURE = Identifier.of(WakesClient.MOD_ID, "textures/picker_background.png");
private static final Identifier PICKER_RIM_TEXTURE = Identifier.of(WakesClient.MOD_ID, "textures/picker_rim.png");
private static final Identifier PICKER_KNOB_TEXTURE = Identifier.of(WakesClient.MOD_ID, "textures/picker_knob.png");
private static final int pickerKnobDim = 7;

Expand All @@ -46,7 +44,7 @@ public ColorPicker(ColorPickerScreen screenContext, int x, int y, int width, int
this.pickerCenter.y = this.colorPickerBounds.y + this.colorPickerBounds.height / 2f;
this.pickerRadius = this.colorPickerBounds.width / 2f;

this.widgets.put("valueSlider", new ColorPickerSlider(new AABB(0f, 4f / 6f, 1f, 5f / 6f, x, y, width, height), "Brightness", this, SliderUpdateType.VALUE));
this.widgets.put("hueSlider", new ColorPickerSlider(new AABB(0f, 4f / 6f, 1f, 5f / 6f, x, y, width, height), "Hue", this, SliderUpdateType.HUE));
this.widgets.put("alphaSlider", new ColorPickerSlider(new AABB(3f / 6f, 5f / 6f, 1f, 1f, x, y, width, height), "Opacity", this, SliderUpdateType.OPACITY));
this.widgets.put("hexInputField", new HexInputField(new AABB(0f, 5f / 6f, 3f / 6f, 1f, x, y, width, height), this, MinecraftClient.getInstance().textRenderer));

Expand All @@ -70,8 +68,8 @@ public void setColor(WakeColor currentColor, WidgetUpdateFlag updateFlag) {
return;
}
float[] hsv = Color.RGBtoHSB(currentColor.r, currentColor.g, currentColor.b, null);
float x = (float) (this.pickerCenter.x + hsv[1] * this.pickerRadius * Math.cos(hsv[0]));
float y = (float) (this.pickerCenter.y + hsv[1] * this.pickerRadius * Math.sin(hsv[0]));
float x = this.colorPickerBounds.x + hsv[1] * this.colorPickerBounds.width;
float y = this.colorPickerBounds.y + (1 - hsv[2]) * this.colorPickerBounds.height;
this.pickerPos.set(x, y);
for (var widgetKey : this.widgets.keySet()) {
if (updateFlag.equals(WidgetUpdateFlag.IGNORE_HEX) && widgetKey.equals("hexInputField")) {
Expand Down Expand Up @@ -145,16 +143,16 @@ public Vector2f getPolarPos(double mouseX, double mouseY) {
}

public void updatePickerPos(double mouseX, double mouseY) {
Vector2f rv = getPolarPos(mouseX, mouseY);
this.pickerPos.set(this.pickerCenter.x + rv.x * Math.cos(rv.y), this.pickerCenter.y + rv.x * Math.sin(rv.y));
mouseX = Math.min(this.colorPickerBounds.x + this.colorPickerBounds.width, Math.max(this.colorPickerBounds.x, mouseX));
mouseY = Math.min(this.colorPickerBounds.y + this.colorPickerBounds.height, Math.max(this.colorPickerBounds.y, mouseY));
this.pickerPos.set(mouseX, mouseY);
this.updateColor();
}

public void updateColor() {
Vector2f rv = getPolarPos(pickerPos.x, pickerPos.y);
float hue = (float) (1 - (rv.y + Math.PI / 2) / (2f * Math.PI));
float saturation = rv.x / pickerRadius;
float value = ((ColorPickerSlider) this.widgets.get("valueSlider").getWidget()).getValue();
float hue = ((ColorPickerSlider) this.widgets.get("hueSlider").getWidget()).getValue();
float saturation = (pickerPos.x - this.colorPickerBounds.x) / this.colorPickerBounds.width;
float value = 1f - (pickerPos.y - this.colorPickerBounds.y) / this.colorPickerBounds.height;
float opacity = ((ColorPickerSlider) this.widgets.get("alphaSlider").getWidget()).getValue();
WakeColor newColor = new WakeColor(hue, saturation, value, opacity);
this.setColor(newColor, WidgetUpdateFlag.ONLY_HEX);
Expand All @@ -164,45 +162,33 @@ public void updateColor() {
@Override
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
if (!active) return;
context.drawTexture(RenderLayer::getGuiTextured, PICKER_BG_TEXTURE, colorPickerBounds.x - 1, colorPickerBounds.y - 1, 0, 0, colorPickerBounds.width, colorPickerBounds.height, colorPickerBounds.width, colorPickerBounds.height);
context.drawTexture(RenderLayer::getGuiTextured, PICKER_RIM_TEXTURE, colorPickerBounds.x - 1, colorPickerBounds.y - 1, 0, 0, colorPickerBounds.width, colorPickerBounds.height, colorPickerBounds.width, colorPickerBounds.height);
drawHSVCircle();
context.drawTexture(RenderPipelines.GUI_TEXTURED, PICKER_BG_TEXTURE, colorPickerBounds.x, colorPickerBounds.y, 0, 0, colorPickerBounds.width, colorPickerBounds.height, colorPickerBounds.width, colorPickerBounds.height);
context.drawTexture(RenderPipelines.GUI_TEXTURED, FRAME_TEXTURE, colorPickerBounds.x, colorPickerBounds.y, 0, 0, colorPickerBounds.width, colorPickerBounds.height, colorPickerBounds.width, colorPickerBounds.height);

drawPickerBox(context);
// Draw picker knob
int d = pickerKnobDim;
Vector2f rv = getPolarPos(pickerPos.x, pickerPos.y);
this.pickerPos.set(this.pickerCenter.x + rv.x * Math.cos(rv.y), this.pickerCenter.y + rv.x * Math.sin(rv.y));
int pickerX = (int) (this.pickerCenter.x + rv.x * Math.cos(rv.y));
int pickerY = (int) (this.pickerCenter.y + rv.x * Math.sin(rv.y));
context.drawTexture(RenderLayer::getGuiTextured, PICKER_KNOB_TEXTURE, pickerX - 3, pickerY - 3, 0, 0, d, d, d, d);
context.drawTexture(RenderPipelines.GUI_TEXTURED, PICKER_KNOB_TEXTURE, (int) pickerPos.x - 3, (int) pickerPos.y - 3, 0, 0, d, d, d, d);
}

private void drawHSVCircle() {
// Credit goes to @mchorse on the Fabric Discord server
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableDepthTest();

RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
BufferBuilder buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
int radius = colorPickerBounds.width / 2;
int x = colorPickerBounds.x + radius;
int y = colorPickerBounds.y + radius;
int segments = 24;
float value = ((ColorPickerSlider) this.widgets.get("valueSlider").getWidget()).getValue();
float opacity = ((ColorPickerSlider) this.widgets.get("alphaSlider").getWidget()).getValue() * 0.5f;

WakeColor middleColor = new WakeColor(0, 0, value, opacity);
buffer.vertex(x, y, 0F).color(middleColor.argb);

for (int i = 0; i <= segments; i ++) {
double a = i / (double) segments * Math.PI * 2 - Math.PI / 2;
float hue = i / (float) segments;
int color = new WakeColor(hue, 1f, value, opacity).argb;

buffer.vertex((int) (x - Math.cos(a) * radius), (int) (y + Math.sin(a) * radius), 0).color(color);
}

BufferRenderer.drawWithGlobalProgram(buffer.end());
private void drawPickerBox(DrawContext context) {
int y = colorPickerBounds.y + 3;
int x = colorPickerBounds.x + 3;
int w = colorPickerBounds.width - 6;
int h = colorPickerBounds.height - 6;

int hue = (int) (((ColorPickerSlider) this.widgets.get("hueSlider").getWidget()).getValue() * 255);

context.state.addSimpleElement(new HsvQuadGuiElementRenderState(
new Matrix3x2f(context.getMatrices()),
x, y, w, h,
0x7F0000FF | hue << 16,
0x7F000000 | hue << 16,
0x7F00FF00 | hue << 16,
0x7F00FFFF | hue << 16,
context.scissorStack.peekLast()
)
);
}

@Override
Expand Down Expand Up @@ -349,15 +335,23 @@ public float getValue() {

@Override
public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableDepthTest();

context.drawGuiTexture(RenderLayer::getGuiTextured, this.getTexture(), this.getX(), this.getY(), this.getWidth(), this.getHeight());

context.drawGuiTexture(RenderLayer::getGuiTextured, this.getHandleTexture(), this.getX() + (int)(this.value * (double)(this.width - 8)), this.getY(), 8, this.getHeight());
context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, this.getTexture(), this.getX(), this.getY(), this.getWidth(), this.getHeight());

if (this.type.equals(SliderUpdateType.HUE)) {
context.state.addSimpleElement(new HsvQuadGuiElementRenderState(
new Matrix3x2f(context.getMatrices()),
this.getX() + 1, this.getY() + 1, this.getWidth() - 2, this.getHeight() - 2,
0x4000FFFF,
0x4000FFFF,
0x40FFFFFF,
0x40FFFFFF,
context.scissorStack.peekLast()
)
);
}
context.drawGuiTexture(RenderPipelines.GUI_TEXTURED, this.getHandleTexture(), this.getX() + (int)(this.value * (double)(this.width - 8)), this.getY(), 8, this.getHeight());
int i = this.active ? 0xFFFFFF : 0xA0A0A0;
this.drawScrollableText(context, MinecraftClient.getInstance().textRenderer, 2, i | MathHelper.ceil((float)(this.alpha * 255.0f)) << 24);
this.drawScrollableText(context, MinecraftClient.getInstance().textRenderer, 2, i | MathHelper.ceil(this.alpha * 255.0f) << 24);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,15 @@ public void close() {
@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta);
context.drawCenteredTextWithShadow(textRenderer, WakesUtils.translatable("gui", "colorIntervalSlider", "title"), width / 2, 10, 0xffffff);
context.drawCenteredTextWithShadow(textRenderer, WakesUtils.translatable("gui", "colorIntervalSlider", "title"), width / 2, 10, 0xffffffff);
if (this.showInfoText) {
context.drawWrappedText(textRenderer, WakesUtils.translatable("gui", "colorIntervalSlider", "infoText"), width - 350, height - 60, 325, 0xa8a8a8, true);
context.drawWrappedText(textRenderer, WakesUtils.translatable("gui", "colorIntervalSlider", "infoText"), width - 325, height - 45, 320, 0xffffffff, true);
}
}

@Override
protected void applyBlur() {
// No Song 2
protected void applyBlur(DrawContext context) {

}

public void addWidget(ClickableWidget widget) {
Expand Down
Loading