change: only generate activated/used parts of the sky

This commit is contained in:
ZtereoHYPE 2023-01-03 15:15:20 +01:00
parent 7d45460af4
commit ae12b15da1
4 changed files with 57 additions and 18 deletions

View file

@ -0,0 +1,15 @@
package codes.ztereohype.nicerskies.mixin;
import com.mojang.blaze3d.vertex.VertexBuffer;
import net.minecraft.client.renderer.LevelRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(LevelRenderer.class)
public interface LevelRendererAccessor {
@Accessor("starBuffer")
VertexBuffer getStarBuffer();
@Accessor("ticks")
int getTicks();
}

View file

@ -0,0 +1,11 @@
package codes.ztereohype.nicerskies.mixin;
import net.minecraft.client.renderer.LevelRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(LevelRenderer.class)
public interface LevelRendererInvoker {
@Invoker("createStars")
void nicerSkies_generateSky();
}

View file

@ -3,11 +3,13 @@ package codes.ztereohype.nicerskies.sky;
import codes.ztereohype.nicerskies.NicerSkies;
import codes.ztereohype.nicerskies.config.ConfigManager;
import codes.ztereohype.nicerskies.core.Gradient;
import codes.ztereohype.nicerskies.mixin.LevelRendererAccessor;
import codes.ztereohype.nicerskies.mixin.LevelRendererInvoker;
import codes.ztereohype.nicerskies.sky.nebula.NebulaSkyboxPainter;
import codes.ztereohype.nicerskies.sky.nebula.Skybox;
import codes.ztereohype.nicerskies.sky.star.Starbox;
import com.mojang.blaze3d.vertex.VertexBuffer;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.levelgen.synth.PerlinNoise;
@ -16,12 +18,11 @@ import java.util.stream.IntStream;
public class SkyManager {
private @Getter Starbox starbox;
private @Getter Skybox skybox;
private @Getter boolean isInitialized = false;
private final Gradient starGradient = new Gradient();
private final Gradient nebulaGradient = new Gradient();
public void generateSky(long seed) {
public void generateSky(long seed, boolean starsEnabled, boolean nebulaEnabled) {
ConfigManager cm = NicerSkies.config;
nebulaGradient.clear();
@ -31,16 +32,26 @@ public class SkyManager {
RandomSource randomSource = RandomSource.create(seed);
PerlinNoise perlinNoise = PerlinNoise.create(randomSource, IntStream.of(1, 2, 3, 4, 5));
NebulaSkyboxPainter painter = new NebulaSkyboxPainter(perlinNoise, nebulaGradient, cm.getNebulaNoiseScale(), cm.getNebulaNoiseAmount(), cm.getNebulaBaseColourAmount());
if (nebulaEnabled) {
PerlinNoise perlinNoise = PerlinNoise.create(randomSource.fork(), IntStream.of(1, 2, 3, 4, 5, 6, 7));
NebulaSkyboxPainter painter = new NebulaSkyboxPainter(perlinNoise, nebulaGradient, cm.getNebulaNoiseScale(), cm.getNebulaNoiseAmount(), cm.getNebulaBaseColourAmount());
this.skybox = new Skybox(painter);
}
this.starbox = new Starbox(randomSource, starGradient);
this.skybox = new Skybox(painter);
if (starsEnabled) {
LevelRendererAccessor levelRenderer = (LevelRendererAccessor) Minecraft.getInstance().levelRenderer;
starbox = new Starbox(randomSource, starGradient, levelRenderer.getStarBuffer());
tick(levelRenderer.getTicks());
} else {
((LevelRendererInvoker)Minecraft.getInstance().levelRenderer).nicerSkies_generateSky();
}
}
public void tick(int ticks, VertexBuffer starBuffer) {
this.starbox.updateStars(ticks, starBuffer);
this.isInitialized = true;
public void tick(int ticks) {
if (starbox != null) {
this.starbox.updateStars(ticks);
}
}
public void buildGradients() {
@ -48,10 +59,10 @@ public class SkyManager {
starGradient.add(0.2f, 255, 249, 253);
starGradient.add(1.0f, 175, 199, 255);
nebulaGradient.add(0.2f, 41, 98, 146);
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, 253, 243, 220);
nebulaGradient.add(0.2f, 41, 83, 146);
nebulaGradient.add(0.5f, 120, 47, 93);
nebulaGradient.add(0.7f, 209, 58, 103);
nebulaGradient.add(0.8f, 255, 160, 123);
nebulaGradient.add(1.0f, 253, 194, 220);
}
}

View file

@ -5,10 +5,12 @@
"compatibilityLevel": "JAVA_17",
"mixins": [],
"client": [
"ClientLevelMixin",
"LevelRendererAccessor",
"LevelRendererInvoker",
"MinecraftMixin",
"MixinLightTexutre",
"MixinStarRendering",
"ClientLevelMixin"
"LightTextureMixin",
"LevelRendererMixin"
],
"server": [],
"injectors": {