mirror of
https://github.com/JonasunderscoreJones/nicer-skies.git
synced 2025-10-23 03:39:18 +02:00
refactor config screen and system to be much more robust
This commit is contained in:
parent
c8f8622546
commit
29f30fb53a
3 changed files with 190 additions and 233 deletions
|
@ -1,7 +1,7 @@
|
|||
package codes.ztereohype.nicerskies.gui;
|
||||
|
||||
import codes.ztereohype.nicerskies.NicerSkies;
|
||||
import codes.ztereohype.nicerskies.config.ConfigManager;
|
||||
import codes.ztereohype.nicerskies.config.Config;
|
||||
import codes.ztereohype.nicerskies.core.NebulaSeedManager;
|
||||
import codes.ztereohype.nicerskies.gui.widget.Separator;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -15,73 +15,82 @@ import net.minecraft.network.chat.FormattedText;
|
|||
import net.minecraft.network.chat.Style;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
|
||||
public class ConfigScreen extends Screen {
|
||||
private final Screen lastScreen;
|
||||
private final ConfigManager cm = NicerSkies.config;
|
||||
private final Config config;
|
||||
private final Config.ConfigData newConfig;
|
||||
|
||||
private boolean invalidated = false;
|
||||
|
||||
protected ConfigScreen(Screen lastScreen) {
|
||||
super(Component.translatable("nicer_skies.menu.settings"));
|
||||
this.lastScreen = lastScreen;
|
||||
|
||||
this.config = NicerSkies.getInstance().getConfig();
|
||||
this.newConfig = config.getConfigData().toBuilder().build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
addRenderableWidget(new Checkbox(20, 60, 20, 20, Component.translatable("nicer_skies.option.render_nebulas"), cm.getNebulas()) {
|
||||
int btnDst = 24;
|
||||
int nebulaOptMargin = this.width / 2 + (this.width / 2 - 150) / 2;
|
||||
|
||||
// initial values
|
||||
boolean renderNebulas = newConfig.isRenderNebulas();
|
||||
boolean twinkleStars = newConfig.isTwinklingStars();
|
||||
boolean lightmapTweaked = newConfig.isLightmapTweaked();
|
||||
|
||||
boolean renderDuringDay = newConfig.getNebulaConfig().isRenderDuringDay();
|
||||
float nebulaStrength = newConfig.getNebulaConfig().getNebulaStrength();
|
||||
float nebulaNoiseAmount = newConfig.getNebulaConfig().getNebulaNoiseAmount();
|
||||
int nebulaBaseColourAmount = newConfig.getNebulaConfig().getBaseColourAmount();
|
||||
float nebulaNoiseScale = newConfig.getNebulaConfig().getNebulaNoiseScale();
|
||||
|
||||
int Y = 60;
|
||||
addRenderableWidget(new Checkbox(20, Y, 20, 20, Component.translatable("nicer_skies.option.render_nebulas"), renderNebulas) {
|
||||
@Override
|
||||
public void onPress() {
|
||||
super.onPress();
|
||||
cm.setNebulas(!cm.getNebulas());
|
||||
newConfig.setRenderNebulas(this.selected());
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
addRenderableWidget(new Checkbox(20, 84, 20, 20, Component.translatable("nicer_skies.option.twinkle_stars"), cm.getTwinklingStars()) {
|
||||
addRenderableWidget(new Checkbox(20, (Y += btnDst), 20, 20, Component.translatable("nicer_skies.option.twinkle_stars"), twinkleStars) {
|
||||
@Override
|
||||
public void onPress() {
|
||||
super.onPress();
|
||||
cm.setTwinklingStars(!cm.getTwinklingStars());
|
||||
newConfig.setTwinklingStars(this.selected());
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
addRenderableWidget(new Checkbox(20, 108, 20, 20, Component.translatable("nicer_skies.option.custom_lightmap"), cm.getLightmapTweaked()) {
|
||||
addRenderableWidget(new Checkbox(20, (Y += btnDst), 20, 20, Component.translatable("nicer_skies.option.custom_lightmap"), lightmapTweaked) {
|
||||
@Override
|
||||
public void onPress() {
|
||||
super.onPress();
|
||||
cm.setLightmapTweaked(!cm.getLightmapTweaked());
|
||||
newConfig.setLightmapTweaked(this.selected());
|
||||
Minecraft.getInstance().gameRenderer.lightTexture().tick();
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
addRenderableOnly(new Separator(this.width / 2, 30, this.height - 70));
|
||||
Y = 60;
|
||||
|
||||
// CycleButton<NebulaType> nebulaType = CycleButton.builder((NebulaType value) -> Component.literal(value.getTypeString()))
|
||||
// .withValues(NebulaType.values())
|
||||
// .create(this.width / 2 + (this.width / 2 - 150) / 2, 60, 150, 20, Component.literal("Nebula Type"), (button, value) -> {
|
||||
// invalidated = true;
|
||||
// NicerSkies.config.setNebulaType(value);
|
||||
// });
|
||||
//
|
||||
// if (NebulaType.values().length < 2)
|
||||
// nebulaType.active = false; // deactivate while theres only one!
|
||||
//
|
||||
// addRenderableWidget(nebulaType);
|
||||
|
||||
addRenderableWidget(new Checkbox(this.width / 2 + (this.width / 2 - 150) / 2, 60, 20, 20, Component.literal("Render During Day"), cm.getRenderDuringDay()) {
|
||||
addRenderableWidget(new Checkbox(nebulaOptMargin, Y, 20, 20, Component.literal("Render During Day"), renderDuringDay) {
|
||||
@Override
|
||||
public void onPress() {
|
||||
super.onPress();
|
||||
cm.setRenderDuringDay(!cm.getRenderDuringDay());
|
||||
newConfig.getNebulaConfig().setRenderDuringDay(this.selected());
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
float strength = cm.getNebulaStrength();
|
||||
addRenderableWidget(new AbstractSliderButton(this.width / 2 + (this.width / 2 - 150) / 2, 84, 150, 20, Component.translatable("nicer_skies.option.nebula_transparency", (int) (strength * 100) + "%"), strength) {
|
||||
addRenderableWidget(new AbstractSliderButton(nebulaOptMargin, (Y += btnDst), 150, 20, Component.translatable("nicer_skies.option.nebula_transparency", (int) (nebulaStrength * 100) + "%"), nebulaStrength) {
|
||||
@Override
|
||||
protected void updateMessage() {
|
||||
this.setMessage(Component.translatable("nicer_skies.option.nebula_transparency", (int) (this.value * 100) + "%"));
|
||||
|
@ -89,66 +98,60 @@ public class ConfigScreen extends Screen {
|
|||
|
||||
@Override
|
||||
protected void applyValue() {
|
||||
NicerSkies.config.setNebulaStrength((float) this.value);
|
||||
newConfig.getNebulaConfig().setNebulaStrength((float) this.value);
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
// Nebula Amount
|
||||
float noiseAmount = cm.getNebulaNoiseAmount();
|
||||
addRenderableWidget(new AbstractSliderButton(this.width / 2 + (this.width / 2 - 150) / 2, 108, 150, 20, Component.translatable("nicer_skies.option.nebula_amount", (int) (noiseAmount * 100) + "%"), noiseAmount) {
|
||||
addRenderableWidget(new AbstractSliderButton(nebulaOptMargin, (Y += btnDst), 150, 20, Component.translatable("nicer_skies.option.nebula_amount", (int) (nebulaNoiseAmount * 100) + "%"), nebulaNoiseAmount) {
|
||||
@Override
|
||||
protected void updateMessage() {
|
||||
invalidated = true;
|
||||
this.setMessage(Component.translatable("nicer_skies.option.nebula_amount", (int) (this.value * 100) + "%"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyValue() {
|
||||
NicerSkies.config.setNebulaNoiseAmount((float) this.value);
|
||||
newConfig.getNebulaConfig().setNebulaNoiseAmount((float) this.value);
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
// Background Strength
|
||||
int baseColourAmount = cm.getNebulaBaseColourAmount();
|
||||
addRenderableWidget(new AbstractSliderButton(this.width / 2 + (this.width / 2 - 150) / 2, 132, 150, 20, Component.translatable("nicer_skies.option.background_strength", baseColourAmount), baseColourAmount / 255f) {
|
||||
addRenderableWidget(new AbstractSliderButton(nebulaOptMargin, (Y += btnDst), 150, 20, Component.translatable("nicer_skies.option.background_strength", nebulaBaseColourAmount), nebulaBaseColourAmount / 255f) {
|
||||
@Override
|
||||
protected void updateMessage() {
|
||||
invalidated = true;
|
||||
this.setMessage(Component.translatable("nicer_skies.option.background_strength", (int) (this.value * 255)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyValue() {
|
||||
NicerSkies.config.setNebulaBaseColourAmount((int) (this.value * 255));
|
||||
newConfig.getNebulaConfig().setBaseColourAmount((int) (this.value * 255));
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Nebula Scale
|
||||
float nebulaNoiseScale = cm.getNebulaNoiseScale();
|
||||
addRenderableWidget(new AbstractSliderButton(this.width / 2 + (this.width / 2 - 150) / 2, 156, 150, 20, Component.translatable("nicer_skies.option.nebula_scale", nebulaNoiseScale), Math.round(1f / (nebulaNoiseScale * 1.5f + 0.5f) * 100) / 100f) {
|
||||
addRenderableWidget(new AbstractSliderButton(nebulaOptMargin, (Y += btnDst), 150, 20, Component.translatable("nicer_skies.option.nebula_scale", nebulaNoiseScale), mapValueToScale(nebulaNoiseScale)) {
|
||||
@Override
|
||||
protected void updateMessage() {
|
||||
invalidated = true;
|
||||
this.setMessage(Component.translatable("nicer_skies.option.nebula_scale", getNebulaNoiseScale()));
|
||||
this.setMessage(Component.translatable("nicer_skies.option.nebula_scale", mapScaleToValue((float) this.value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyValue() {
|
||||
NicerSkies.config.setNebulaNoiseScale(getNebulaNoiseScale());
|
||||
}
|
||||
|
||||
private float getNebulaNoiseScale() {
|
||||
return (float) Math.round(1f / (this.value * 1.5f + 0.5f) * 100) / 100f;
|
||||
newConfig.getNebulaConfig().setNebulaNoiseScale(mapScaleToValue((float) this.value));
|
||||
invalidated = true;
|
||||
}
|
||||
});
|
||||
|
||||
// Reset
|
||||
addRenderableWidget(new Button(this.width / 2 + (this.width / 2 - 150) / 2, 184, 150, 20, Component.translatable("nicer_skies.menu.reset"), (button) -> {
|
||||
cm.resetNebulaSettings();
|
||||
this.clearWidgets();
|
||||
this.init();
|
||||
addRenderableWidget(new Button(nebulaOptMargin, (Y += btnDst), 150, 20, Component.translatable("nicer_skies.menu.reset"), (button) -> {
|
||||
newConfig.setNebulaConfig(Config.DEFAULT_CONFIG.getNebulaConfig().toBuilder().build());
|
||||
this.rebuildWidgets();
|
||||
invalidated = true;
|
||||
}, null) {
|
||||
}, Supplier::get) {
|
||||
@Override
|
||||
public void render(GuiGraphics g, int mouseX, int mouseY, float partialTick) {
|
||||
this.active = !isDefaultNebulaSettings();
|
||||
|
@ -158,9 +161,10 @@ public class ConfigScreen extends Screen {
|
|||
|
||||
// Apply
|
||||
addRenderableWidget(new Button(this.width / 2 + 4, this.height - 28, 150, 20, Component.translatable("nicer_skies.menu.apply"), (button) -> {
|
||||
config.updateConfig(newConfig);
|
||||
regenerateSky();
|
||||
invalidated = false;
|
||||
}, null) {
|
||||
}, Supplier::get) {
|
||||
@Override
|
||||
public void render(GuiGraphics g, int mouseX, int mouseY, float partialTick) {
|
||||
this.active = invalidated;
|
||||
|
@ -190,21 +194,18 @@ public class ConfigScreen extends Screen {
|
|||
|
||||
@Override
|
||||
public void onClose() {
|
||||
if (invalidated && NebulaSeedManager.canGenerateSky()) {
|
||||
regenerateSky();
|
||||
}
|
||||
minecraft.setScreen(lastScreen);
|
||||
}
|
||||
|
||||
private void regenerateSky() {
|
||||
if (NebulaSeedManager.canGenerateSky()) {
|
||||
NicerSkies.skyManager.generateSky(NebulaSeedManager.getSeed(), NicerSkies.config.getTwinklingStars(), NicerSkies.config.getNebulas());
|
||||
NicerSkies.getInstance().getSkyManager().generateSky(NebulaSeedManager.getSeed());
|
||||
}
|
||||
invalidated = false;
|
||||
}
|
||||
|
||||
private boolean isDefaultNebulaSettings() {
|
||||
return cm.nebulaConfigEquals(ConfigManager.DEFAULT_CONFIG);
|
||||
return newConfig.getNebulaConfig().equals(Config.DEFAULT_CONFIG.getNebulaConfig());
|
||||
}
|
||||
|
||||
private void drawWrappedComponent(GuiGraphics g, FormattedText component, int x, int y, int wrapWidth, int color) {
|
||||
|
@ -217,4 +218,13 @@ public class ConfigScreen extends Screen {
|
|||
g.drawString(font, renderable.getString(), x, y + i * 9, color);
|
||||
}
|
||||
}
|
||||
|
||||
private float mapScaleToValue(float value) {
|
||||
return (float) Math.round(1f / (value * 1.5f + 0.5f) * 100) / 100f;
|
||||
}
|
||||
|
||||
// inverse of above
|
||||
private float mapValueToScale(float value) {
|
||||
return ((1f / value) - 0.5f) / 1.5f;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue