From a421a55cf7e6121ab28ef1d37f81a47573c529b4 Mon Sep 17 00:00:00 2001 From: ZtereoHYPE <57519662+ZtereoHYPE@users.noreply.github.com> Date: Mon, 14 Nov 2022 23:01:41 +0100 Subject: [PATCH] neww: wip config sstufff --- .../codes/ztereohype/example/NicerSkies.java | 12 ++- .../ztereohype/example/config/Config.java | 71 ++++++++++++++ .../example/config/ConfigManager.java | 94 +++++++++++++++++++ .../ztereohype/example/config/NebulaType.java | 25 +++++ .../ztereohype/example/gui/ConfigScreen.java | 31 ++++++ .../example/mixin/MixinStarRendering.java | 2 +- .../mixin/debug/MixinKeyboardHandler.java | 4 +- .../ztereohype/example/sky/SkyManager.java | 4 + .../sky/nebula/NebulaSkyboxPainter.java | 16 +++- .../ztereohype/example/sky/nebula/Skybox.java | 2 +- 10 files changed, 250 insertions(+), 11 deletions(-) create mode 100644 src/main/java/codes/ztereohype/example/config/Config.java create mode 100644 src/main/java/codes/ztereohype/example/config/ConfigManager.java create mode 100644 src/main/java/codes/ztereohype/example/config/NebulaType.java create mode 100644 src/main/java/codes/ztereohype/example/gui/ConfigScreen.java diff --git a/src/main/java/codes/ztereohype/example/NicerSkies.java b/src/main/java/codes/ztereohype/example/NicerSkies.java index a86bf85..f218dca 100644 --- a/src/main/java/codes/ztereohype/example/NicerSkies.java +++ b/src/main/java/codes/ztereohype/example/NicerSkies.java @@ -1,12 +1,20 @@ package codes.ztereohype.example; +import codes.ztereohype.example.config.ConfigManager; import codes.ztereohype.example.sky.SkyManager; import net.fabricmc.api.ModInitializer; +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.impl.game.minecraft.launchwrapper.FabricClientTweaker; + +import java.io.File; public class NicerSkies implements ModInitializer { - public static boolean toggle = true; + public static ConfigManager config = ConfigManager.fromFile(new File(FabricLoader.getInstance() + .getConfigDir() + .toFile(), "nicerskies.json")); public static SkyManager skyManager = new SkyManager(); @Override - public void onInitialize() {} + public void onInitialize() { + } } diff --git a/src/main/java/codes/ztereohype/example/config/Config.java b/src/main/java/codes/ztereohype/example/config/Config.java new file mode 100644 index 0000000..ca2db91 --- /dev/null +++ b/src/main/java/codes/ztereohype/example/config/Config.java @@ -0,0 +1,71 @@ +package codes.ztereohype.example.config; + +public class Config { + public Config(boolean tweakedLigthmap, boolean twinklingStars, boolean nebulas, String nebulaType) { + this.tweakedLigthmap = tweakedLigthmap; + this.twinklingStars = twinklingStars; + this.nebulas = nebulas; + + this.nebulaConfig = new NebulaConfig(nebulaType); + } + + private boolean tweakedLigthmap; + private boolean twinklingStars; + private boolean nebulas; + + private final NebulaConfig nebulaConfig; + + public boolean isTweakedLigthmap() { + return this.tweakedLigthmap; + } + + public boolean isTwinklingStars() { + return this.twinklingStars; + } + + public boolean isNebulas() { + return this.nebulas; + } + + public NebulaConfig getNebulaConfig() { + return this.nebulaConfig; + } + + public void setTweakedLigthmap(boolean tweakedLigthmap) { + this.tweakedLigthmap = tweakedLigthmap; + } + + public void setTwinklingStars(boolean twinklingStars) { + this.twinklingStars = twinklingStars; + } + + public void setNebulas(boolean nebulas) { + this.nebulas = nebulas; + } + + public static final class NebulaConfig { + public NebulaConfig(String nebulaType) { + this.nebulaType = nebulaType; + } + + private String nebulaType; + + public String getNebulaType() { + return this.nebulaType; + } + + public void setNebulaType(String nebulaType) { + this.nebulaType = nebulaType; + } + } + + @Override + public String toString() { + return "Config{" + + "tweakedLigthmap=" + tweakedLigthmap + + ", twinklingStars=" + twinklingStars + + ", nebulas=" + nebulas + + ", nebulaConfig type=" + nebulaConfig.getNebulaType() + + '}'; + } +} diff --git a/src/main/java/codes/ztereohype/example/config/ConfigManager.java b/src/main/java/codes/ztereohype/example/config/ConfigManager.java new file mode 100644 index 0000000..3a1244b --- /dev/null +++ b/src/main/java/codes/ztereohype/example/config/ConfigManager.java @@ -0,0 +1,94 @@ +package codes.ztereohype.example.config; + +import com.google.gson.Gson; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.logging.LogManager; + +public class ConfigManager { + private static final Gson gson = new Gson(); + private final Config config; + private final File file; + + public static ConfigManager fromFile(File file) { + Config config; + try { + if (!file.exists()) { + file.getParentFile().mkdirs(); + file.createNewFile(); + + config = new Config(false, true, true, "rainbow"); + + gson.toJson(config, new FileWriter(file)); + } else { + config = gson.fromJson(new FileReader(file), Config.class); + + if (config == null) { + throw new IOException("Failed to read config file"); + } + } + } catch (IOException e) { + // todo setup logger properly + e.printStackTrace(); + config = new Config(false, true, true, "rainbow"); + } + + return new ConfigManager(config, file); + } + + private ConfigManager(Config config, File file) { + this.config = config; + this.file = file; + save(file); + } + + public boolean getLightmapTweaked() { + return config.isTweakedLigthmap(); + } + + public boolean getTwinklingStars() { + return config.isTwinklingStars(); + } + + public boolean getNebulas() { + return config.isNebulas(); + } + + public NebulaType getNebulaType() { + return NebulaType.getFromString(config.getNebulaConfig().getNebulaType()); + } + + public void setLightmapTweaked(boolean tweaked) { + config.setTweakedLigthmap(tweaked); + save(file); + } + + public void setTwinklingStars(boolean twinkling) { + config.setTwinklingStars(twinkling); + save(file); + } + + public void setNebulas(boolean nebulas) { + config.setNebulas(nebulas); + save(file); + } + + public void setNebulaType(NebulaType type) { + config.getNebulaConfig().setNebulaType(type.getTypeString()); + save(file); + } + + public void save(File file) { + try (FileWriter writer = new FileWriter(file)) { + writer.write(gson.toJson(config)); +// System.out.println("Saved config " + ); + } catch (IOException e) { + e.printStackTrace(); + // todo setup logger properly +// LogManager.getLogManager().getLogger("NicerSkies").warning("Failed to save config file!"); + } + } +} diff --git a/src/main/java/codes/ztereohype/example/config/NebulaType.java b/src/main/java/codes/ztereohype/example/config/NebulaType.java new file mode 100644 index 0000000..62f9409 --- /dev/null +++ b/src/main/java/codes/ztereohype/example/config/NebulaType.java @@ -0,0 +1,25 @@ +package codes.ztereohype.example.config; + +public enum NebulaType { + RAINBOW("rainbow"); + + private final String type; + + NebulaType(String type) { + this.type = type; + } + + public String getTypeString() { + return type; + } + + // bad? + public static NebulaType getFromString(String type) { + for (NebulaType nebulaType : NebulaType.values()) { + if (nebulaType.getTypeString().equals(type)) { + return nebulaType; + } + } + return null; + } +} diff --git a/src/main/java/codes/ztereohype/example/gui/ConfigScreen.java b/src/main/java/codes/ztereohype/example/gui/ConfigScreen.java new file mode 100644 index 0000000..4a76b4f --- /dev/null +++ b/src/main/java/codes/ztereohype/example/gui/ConfigScreen.java @@ -0,0 +1,31 @@ +package codes.ztereohype.example.gui; + +import codes.ztereohype.example.config.Config; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; + +import java.lang.reflect.Field; + +public class ConfigScreen extends Screen { + private Screen lastScreen; + protected ConfigScreen(Screen lastScreen) { + super(Component.literal("Nicer Skies Config")); + this.lastScreen = lastScreen; + } + + @Override + public void init() { + Field[] fields = Config.class.getFields(); + for (int i = 0; i < fields.length; i++) { + int finalI = i; + addRenderableWidget(new Button(0, 0, 100, 20, Component.literal(fields[i].getName()), (button) -> { + try { + fields[finalI].setBoolean(null, !fields[finalI].getBoolean(null)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + })); + } + } +} diff --git a/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java b/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java index 5b69dc6..7e6ec85 100644 --- a/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java +++ b/src/main/java/codes/ztereohype/example/mixin/MixinStarRendering.java @@ -29,7 +29,7 @@ public abstract class MixinStarRendering { @Inject(at = @At("HEAD"), method = "createStars", cancellable = true) private void generateStars(CallbackInfo ci) { - NicerSkies.skyManager.generateSky(321L); + NicerSkies.skyManager.generateSky(212421L); starBuffer = new VertexBuffer(); NicerSkies.skyManager.tick(ticks, starBuffer); ci.cancel(); diff --git a/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java b/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java index fd97279..a02e2b2 100644 --- a/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java +++ b/src/main/java/codes/ztereohype/example/mixin/debug/MixinKeyboardHandler.java @@ -13,8 +13,8 @@ public class MixinKeyboardHandler { private void printKey(long windowPointer, int key, int scanCode, int action, int modifiers, CallbackInfo ci) { // \ key, keydown action if (key == 92 && action == 1) { - NicerSkies.skyManager.generateSky(321L); - NicerSkies.toggle = !NicerSkies.toggle; + NicerSkies.skyManager.generateSky(15156); +// NicerSkies.toggle = !NicerSkies.toggle; } } } diff --git a/src/main/java/codes/ztereohype/example/sky/SkyManager.java b/src/main/java/codes/ztereohype/example/sky/SkyManager.java index a40ccf6..0cead73 100644 --- a/src/main/java/codes/ztereohype/example/sky/SkyManager.java +++ b/src/main/java/codes/ztereohype/example/sky/SkyManager.java @@ -45,10 +45,14 @@ public class SkyManager { starGradient.add(0.2f, 255, 249, 253); starGradient.add(1.0f, 175, 199, 255); +// nebulaGradient.add(0.21f, 255, 0, 0); + nebulaGradient.add(0.2f, 41, 98, 146); +// nebulaGradient.add(0.2f, 0, 0, 0); nebulaGradient.add(0.5f, 120, 59, 93); nebulaGradient.add(0.7f, 209, 72, 103); nebulaGradient.add(0.8f, 255, 200, 123); +// nebulaGradient.add(1.0f, 30, 20, 20); nebulaGradient.add(1.0f, 253, 243, 220); // starryGradient.add(0.0f, 128, 128, 200); diff --git a/src/main/java/codes/ztereohype/example/sky/nebula/NebulaSkyboxPainter.java b/src/main/java/codes/ztereohype/example/sky/nebula/NebulaSkyboxPainter.java index fc9f411..9bbbc75 100644 --- a/src/main/java/codes/ztereohype/example/sky/nebula/NebulaSkyboxPainter.java +++ b/src/main/java/codes/ztereohype/example/sky/nebula/NebulaSkyboxPainter.java @@ -46,18 +46,24 @@ public class NebulaSkyboxPainter extends SkyboxPainter { int baseG = (int) ((y/2 + 0.5) * 127); int baseR = (int) ((z/2 + 0.5) * 127); - int alpha = (int)(Mth.clamp((noiseValue * (1 / BASE_NOISE_AMOUNT) - (1 / BASE_NOISE_AMOUNT - 1)) * 255, 20, 254.99f)); // otherwise death occurs +// double noiseAmount = (Mth.clamp((noiseValue * (1 / BASE_NOISE_AMOUNT) - (1 / BASE_NOISE_AMOUNT - 1)) * 255, 0, 255)); // otherwise death occurs +// +// int alpha = (int) Mth.clamp((int)noiseAmount - subtractionValue * 128, 50, 255); - alpha = (int) Mth.clamp(alpha - subtractionValue * 128, 50, 255); - - double nebulaFactor = (Mth.clamp((noiseValue * (1D / BASE_NOISE_AMOUNT) - (1D / BASE_NOISE_AMOUNT - 1)), 0.01, 0.9999)); + double nebulaFactor = (Mth.clamp((noiseValue * (1D / BASE_NOISE_AMOUNT) - (1D / BASE_NOISE_AMOUNT - 1)), 0, 0.99)); Color nebula = nebulaGradient.getAt(nebulaFactor); double bgFactor = Mth.clamp(Math.log10(-nebulaFactor + 1) + 1, 0, 1); int r = Mth.clamp((int) ((nebulaFactor * nebula.getRed()) + baseR * bgFactor) - (int)(ds[0] * nebulaFactor * 127), 0, 255); - int g = Mth.clamp((int) ((nebulaFactor * nebula.getGreen()) + baseG * bgFactor) - (int)(ds[1] * nebulaFactor * 64), 0, 255); + int g = Mth.clamp((int) ((nebulaFactor * nebula.getGreen()) + baseG * bgFactor) - (int)(ds[1] * nebulaFactor * 63), 0, 255); int b = Mth.clamp((int) ((nebulaFactor * nebula.getBlue()) + baseB * bgFactor) - (int)(ds[2] * nebulaFactor * 127), 0, 255); +// int r = Mth.clamp((int) (baseR * bgFactor), 0, 255); +// int g = Mth.clamp((int) (baseG * bgFactor), 0, 255); +// int b = Mth.clamp((int) (baseB * bgFactor), 0, 255); + + int alpha = Mth.clamp((int)((1 - bgFactor) * 255), 50, 255); + return FastColor.ARGB32.color(alpha, b, g, r); } } diff --git a/src/main/java/codes/ztereohype/example/sky/nebula/Skybox.java b/src/main/java/codes/ztereohype/example/sky/nebula/Skybox.java index d8bf3fa..f5ad90b 100644 --- a/src/main/java/codes/ztereohype/example/sky/nebula/Skybox.java +++ b/src/main/java/codes/ztereohype/example/sky/nebula/Skybox.java @@ -9,7 +9,7 @@ import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.texture.DynamicTexture; public class Skybox { - public static final int RESOLUTION = 256; + public static final int RESOLUTION = 512; private final DynamicTexture skyTexture = new DynamicTexture(RESOLUTION * 4, RESOLUTION * 4, false);