ui stuff and smooth blur
@@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
# check these on https://modmuss50.me/fabric.html
|
# check these on https://modmuss50.me/fabric.html
|
||||||
minecraft_version=1.21.4
|
minecraft_version=1.21.4
|
||||||
yarn_mappings=1.21.4+build.7
|
yarn_mappings=1.21.4+build.7
|
||||||
loader_version=0.16.9
|
loader_version=0.16.10
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 0.0.1-alpha0
|
mod_version = 0.0.1-alpha0
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class CloaksMenu extends SaturnUi {
|
|||||||
int tabsY = rectY - 17;
|
int tabsY = rectY - 17;
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
new SaturnSprite(Textures.TABS)
|
new SaturnSprite(Textures.RECT)
|
||||||
.setX(tabsX)
|
.setX(tabsX)
|
||||||
.setY(tabsY)
|
.setY(tabsY)
|
||||||
.setWidth(43)
|
.setWidth(43)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class HatsMenu extends SaturnUi {
|
|||||||
int tabsY = rectY - 17;
|
int tabsY = rectY - 17;
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
new SaturnSprite(Textures.TABS)
|
new SaturnSprite(Textures.RECT)
|
||||||
.setX(tabsX)
|
.setX(tabsX)
|
||||||
.setY(tabsY)
|
.setY(tabsY)
|
||||||
.setWidth(43)
|
.setWidth(43)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class ModMenu extends SaturnUi {
|
|||||||
int tabsY = modsY - 17;
|
int tabsY = modsY - 17;
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
new SaturnSprite(Textures.TABS)
|
new SaturnSprite(Textures.RECT)
|
||||||
.setX(tabsX)
|
.setX(tabsX)
|
||||||
.setY(tabsY)
|
.setY(tabsY)
|
||||||
.setWidth(43)
|
.setWidth(43)
|
||||||
|
|||||||
@@ -1,189 +1,64 @@
|
|||||||
package org.saturnclient.saturnclient.menus;
|
package org.saturnclient.saturnclient.menus;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import net.minecraft.text.Text;
|
|
||||||
import org.saturnclient.saturnclient.SaturnClient;
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.config.Property;
|
|
||||||
import org.saturnclient.ui.SaturnUi;
|
|
||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.components.SaturnFloat;
|
import org.saturnclient.ui.widgets.SaturnClickableImage;
|
||||||
import org.saturnclient.ui.components.SaturnHex;
|
|
||||||
import org.saturnclient.ui.components.SaturnInteger;
|
|
||||||
import org.saturnclient.ui.components.SaturnString;
|
|
||||||
import org.saturnclient.ui.components.SaturnToggle;
|
|
||||||
import org.saturnclient.ui.widgets.SaturnScroll;
|
|
||||||
import org.saturnclient.ui.widgets.SaturnSprite;
|
import org.saturnclient.ui.widgets.SaturnSprite;
|
||||||
import org.saturnclient.ui.widgets.SaturnText;
|
|
||||||
|
|
||||||
public class SaturnConfigEditor extends SaturnUi {
|
public class SaturnConfigEditor extends ConfigEditor {
|
||||||
|
|
||||||
public SaturnConfigEditor() {
|
public SaturnConfigEditor() {
|
||||||
super(Text.of("Config editor"));
|
super(SaturnClient.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
int rectWidth = 330;
|
|
||||||
int rectHeight = 228;
|
int rectHeight = 228;
|
||||||
int rectX = (width - rectWidth) / 2;
|
|
||||||
int rectY = (height - rectHeight + 15) / 2;
|
int rectY = (height - rectHeight + 15) / 2;
|
||||||
|
|
||||||
|
int tabsX = (width - 43) / 2;
|
||||||
|
int tabsY = rectY - 17;
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
new SaturnSprite(Textures.SETTINGS_BG)
|
new SaturnSprite(Textures.RECT)
|
||||||
.setX(rectX)
|
.setX(tabsX)
|
||||||
.setY(rectY)
|
.setY(tabsY)
|
||||||
.setWidth(rectWidth)
|
.setWidth(43)
|
||||||
.setHeight(rectHeight)
|
.setHeight(15)
|
||||||
.setAnimations(SaturnClient.getAnimations()));
|
.setAnimations(SaturnClient.getAnimations()));
|
||||||
|
|
||||||
SaturnScroll configScroll = new SaturnScroll();
|
int tabSize = 9;
|
||||||
|
tabsX = (width - tabSize) / 2;
|
||||||
int row = 0;
|
draw(
|
||||||
int col = 0;
|
new SaturnClickableImage(Textures.SETTINGS, () -> {
|
||||||
|
})
|
||||||
drawProperties(configScroll, SaturnClient.config.getProperties(), rectWidth, row, col);
|
.setSelected(true)
|
||||||
|
.setX(tabsX)
|
||||||
|
.setY(tabsY + 3)
|
||||||
|
.setWidth(tabSize)
|
||||||
|
.setHeight(tabSize)
|
||||||
|
.setAnimations(SaturnClient.getAnimations()));
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
configScroll
|
new SaturnClickableImage(Textures.MODS_TAB, () -> {
|
||||||
.setX(rectX + 17)
|
client.setScreen(new ModMenu());
|
||||||
.setY(rectY + 10)
|
})
|
||||||
.setWidth(rectWidth - 17)
|
.setX(tabsX - 12)
|
||||||
.setHeight(rectHeight - 10)
|
.setY(tabsY + 3)
|
||||||
|
.setWidth(tabSize)
|
||||||
|
.setHeight(tabSize)
|
||||||
|
.setAnimations(SaturnClient.getAnimations()));
|
||||||
|
|
||||||
|
draw(
|
||||||
|
new SaturnClickableImage(Textures.SEARCH, () -> {
|
||||||
|
System.out.println("Pressed");
|
||||||
|
})
|
||||||
|
.setX(tabsX + 12)
|
||||||
|
.setY(tabsY + 3)
|
||||||
|
.setWidth(tabSize)
|
||||||
|
.setHeight(tabSize)
|
||||||
.setAnimations(SaturnClient.getAnimations()));
|
.setAnimations(SaturnClient.getAnimations()));
|
||||||
|
|
||||||
super.init();
|
super.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private int drawProperties(SaturnScroll configScroll, Map<String, Property<?>> properties, int rectWidth,
|
|
||||||
int row, int col) {
|
|
||||||
int totalRows = row;
|
|
||||||
for (Map.Entry<String, Property<?>> propEntry : properties.entrySet()) {
|
|
||||||
Property<?> prop = propEntry.getValue();
|
|
||||||
String propName = propEntry.getKey();
|
|
||||||
|
|
||||||
boolean full = isFull(prop);
|
|
||||||
|
|
||||||
if (full && col > 0) {
|
|
||||||
col = 0;
|
|
||||||
totalRows++;
|
|
||||||
}
|
|
||||||
|
|
||||||
int modX = ((rectWidth / 2) - 17) * col;
|
|
||||||
int modY = 14 * totalRows;
|
|
||||||
|
|
||||||
switch (prop.getType()) {
|
|
||||||
case BOOLEAN:
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnToggle((Property<Boolean>) prop)
|
|
||||||
.setX(modX)
|
|
||||||
.setY(modY));
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnText(
|
|
||||||
propName.substring(0, 1).toUpperCase() +
|
|
||||||
propName.substring(1))
|
|
||||||
.setX(modX + 18)
|
|
||||||
.setY(modY)
|
|
||||||
.setScale(0.8f));
|
|
||||||
break;
|
|
||||||
case INTEGER:
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnText(
|
|
||||||
propName.substring(0, 1).toUpperCase() +
|
|
||||||
propName.substring(1))
|
|
||||||
.setX(modX)
|
|
||||||
.setY(modY)
|
|
||||||
.setScale(0.8f));
|
|
||||||
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnInteger(
|
|
||||||
(Property<Integer>) prop,
|
|
||||||
(rectWidth / 2) - 17,
|
|
||||||
modY,
|
|
||||||
70));
|
|
||||||
break;
|
|
||||||
case FLOAT:
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnText(
|
|
||||||
propName.substring(0, 1).toUpperCase() +
|
|
||||||
propName.substring(1))
|
|
||||||
.setX(modX)
|
|
||||||
.setY(modY)
|
|
||||||
.setScale(0.8f));
|
|
||||||
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnFloat(
|
|
||||||
(Property<Float>) prop,
|
|
||||||
(rectWidth / 2) - 17,
|
|
||||||
modY,
|
|
||||||
70));
|
|
||||||
break;
|
|
||||||
case STRING:
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnText(
|
|
||||||
propName.substring(0, 1).toUpperCase() +
|
|
||||||
propName.substring(1))
|
|
||||||
.setX(modX)
|
|
||||||
.setY(modY)
|
|
||||||
.setScale(0.8f));
|
|
||||||
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnString(
|
|
||||||
(Property<String>) prop,
|
|
||||||
(rectWidth / 2) - 17,
|
|
||||||
modY,
|
|
||||||
70));
|
|
||||||
break;
|
|
||||||
case HEX:
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnText(
|
|
||||||
propName.substring(0, 1).toUpperCase() +
|
|
||||||
propName.substring(1))
|
|
||||||
.setX(modX)
|
|
||||||
.setY(modY)
|
|
||||||
.setScale(0.8f));
|
|
||||||
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnHex(
|
|
||||||
(Property<Integer>) prop,
|
|
||||||
(rectWidth / 2) - 17,
|
|
||||||
modY,
|
|
||||||
70));
|
|
||||||
break;
|
|
||||||
case NAMESPACE:
|
|
||||||
configScroll.draw(
|
|
||||||
new SaturnText(
|
|
||||||
propName.substring(0, 1).toUpperCase() +
|
|
||||||
propName.substring(1))
|
|
||||||
.setX(modX)
|
|
||||||
.setY(modY)
|
|
||||||
.setScale(0.8f));
|
|
||||||
|
|
||||||
// Recursively draw nested properties and update total rows
|
|
||||||
Map<String, Property<?>> nestedProperties = (Map<String, Property<?>>) prop.value;
|
|
||||||
totalRows = drawProperties(configScroll, nestedProperties, rectWidth,
|
|
||||||
totalRows + 1, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (full) {
|
|
||||||
totalRows++;
|
|
||||||
} else {
|
|
||||||
col++;
|
|
||||||
if (col > 1) {
|
|
||||||
col = 0;
|
|
||||||
totalRows++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return totalRows;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isFull(Property<?> prop) {
|
|
||||||
switch (prop.getType()) {
|
|
||||||
case BOOLEAN:
|
|
||||||
return false;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,9 +5,13 @@ import java.util.List;
|
|||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import net.minecraft.client.gl.PostEffectProcessor;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.render.DefaultFramebufferSet;
|
||||||
import net.minecraft.client.render.RenderLayer;
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.client.util.Pool;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.MutableText;
|
import net.minecraft.text.MutableText;
|
||||||
import net.minecraft.text.Style;
|
import net.minecraft.text.Style;
|
||||||
@@ -19,6 +23,9 @@ public class SaturnUi extends Screen {
|
|||||||
|
|
||||||
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
||||||
|
|
||||||
|
private final Pool pool = new Pool(3);
|
||||||
|
private float f = 0.0f;
|
||||||
|
|
||||||
public static MutableText text(String text) {
|
public static MutableText text(String text) {
|
||||||
return Text.literal(text).setStyle(
|
return Text.literal(text).setStyle(
|
||||||
Style.EMPTY.withFont(Identifier.of("saturnclient:panton")));
|
Style.EMPTY.withFont(Identifier.of("saturnclient:panton")));
|
||||||
@@ -101,7 +108,17 @@ public class SaturnUi extends Screen {
|
|||||||
int mouseX,
|
int mouseX,
|
||||||
int mouseY,
|
int mouseY,
|
||||||
float delta) {
|
float delta) {
|
||||||
renderBackground(context, mouseX, mouseY, delta);
|
// Blur
|
||||||
|
if (!(f < 1.0F)) {
|
||||||
|
PostEffectProcessor postEffectProcessor = this.client.getShaderLoader().loadPostEffect(
|
||||||
|
Identifier.ofVanilla("blur"),
|
||||||
|
DefaultFramebufferSet.MAIN_ONLY);
|
||||||
|
if (postEffectProcessor != null) {
|
||||||
|
postEffectProcessor.setUniforms("Radius", f);
|
||||||
|
postEffectProcessor.render(this.client.getFramebuffer(), this.pool);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
||||||
if (!widget.visible)
|
if (!widget.visible)
|
||||||
@@ -236,6 +253,11 @@ public class SaturnUi extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void saturnTick() {
|
public void saturnTick() {
|
||||||
|
synchronized (scheduler) {
|
||||||
|
if (f < 20.0f) {
|
||||||
|
f += 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
synchronized (widgets) {
|
synchronized (widgets) {
|
||||||
for (SaturnWidget widget : widgets) {
|
for (SaturnWidget widget : widgets) {
|
||||||
if (widget.visible && widget.animations != null) {
|
if (widget.visible && widget.animations != null) {
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ public class Textures {
|
|||||||
public static final Identifier LOGO_TEXT = Identifier.of("saturnclient", "textures/logo/text.png");
|
public static final Identifier LOGO_TEXT = Identifier.of("saturnclient", "textures/logo/text.png");
|
||||||
|
|
||||||
// Widgets
|
// Widgets
|
||||||
public static final Identifier BUTTON_BORDER = Identifier.ofVanilla("saturn/button_border");
|
public static final Identifier BUTTON_BORDER = Identifier.of("saturnclient", "button_border");
|
||||||
public static final Identifier BUTTON = Identifier.ofVanilla("saturn/button");
|
public static final Identifier BUTTON = Identifier.of("saturnclient", "button");
|
||||||
public static final Identifier SETTINGS_BG = Identifier.ofVanilla("saturn/settings_bg");
|
public static final Identifier SETTINGS_BG = Identifier.of("saturnclient", "settings_bg");
|
||||||
public static final Identifier TABS = Identifier.ofVanilla("saturn/tabs");
|
public static final Identifier RECT = Identifier.of("saturnclient", "rect");
|
||||||
public static final Identifier MOD = Identifier.of("saturnclient", "textures/gui/components/mod.png");
|
public static final Identifier MOD = Identifier.of("saturnclient", "textures/gui/components/mod.png");
|
||||||
public static final Identifier MOD_BG = Identifier.of("saturnclient", "textures/gui/components/mod_bg.png");
|
public static final Identifier MOD_BG = Identifier.of("saturnclient", "textures/gui/components/mod_bg.png");
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 672 B After Width: | Height: | Size: 672 B |
|
Before Width: | Height: | Size: 753 B After Width: | Height: | Size: 753 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
@@ -7,7 +7,7 @@
|
|||||||
"authors": ["Saturn Mc", "ORUS"],
|
"authors": ["Saturn Mc", "ORUS"],
|
||||||
"contact": {
|
"contact": {
|
||||||
"website": "https://kleo-dev.netlify.app",
|
"website": "https://kleo-dev.netlify.app",
|
||||||
"sources": "https://github.com/kleo-dev/saturnclient"
|
"sources": "https://github.com/saturnclientmc/saturnclient"
|
||||||
},
|
},
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"icon": "assets/saturnclient/icon.png",
|
"icon": "assets/saturnclient/icon.png",
|
||||||
|
|||||||