From f3476c5cc8ca220d976686778bcf0a598582dcd7 Mon Sep 17 00:00:00 2001 From: Astrash Date: Sun, 7 Jan 2024 17:02:08 +1100 Subject: [PATCH] Add feature stage blending --- .../feature/FeatureGenerationStage.java | 15 +++++++++++-- .../feature/config/FeatureStageTemplate.java | 21 ++++++++++++++++++- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java index 6baf88b7a..123107d15 100644 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java @@ -12,6 +12,7 @@ import java.util.Random; import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures; import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.properties.PropertyKey; import com.dfsek.terra.api.registry.key.StringIdentifiable; import com.dfsek.terra.api.util.Rotation; @@ -31,13 +32,20 @@ public class FeatureGenerationStage implements GenerationStage, StringIdentifiab private final int resolution; private final PropertyKey biomeFeaturesKey; + private final NoiseSampler blendSampler; + private final boolean doBlending; + private final double blendAmplitude; - public FeatureGenerationStage(Platform platform, String id, int resolution, PropertyKey biomeFeaturesKey) { + public FeatureGenerationStage(Platform platform, String id, int resolution, PropertyKey biomeFeaturesKey, + NoiseSampler blendSampler, double blendAmplitude) { this.platform = platform; this.id = id; this.profile = "feature_stage:" + id; this.resolution = resolution; this.biomeFeaturesKey = biomeFeaturesKey; + this.blendSampler = blendSampler; + this.doBlending = blendAmplitude != 0d; + this.blendAmplitude = blendAmplitude; } @Override @@ -52,7 +60,10 @@ public class FeatureGenerationStage implements GenerationStage, StringIdentifiab int tx = cx + chunkX; int tz = cz + chunkZ; world.getBiomeProvider() - .getColumn(tx, tz, world) + .getColumn( + tx + (doBlending ? (int) (blendSampler.noise(seed, tx, tz) * blendAmplitude) : 0), + tz + (doBlending ? (int) (blendSampler.noise(seed+1, tx, tz) * blendAmplitude) : 0), + world) .forRanges(resolution, (min, max, biome) -> { for(int subChunkX = 0; subChunkX < resolution; subChunkX++) { for(int subChunkZ = 0; subChunkZ < resolution; subChunkZ++) { diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/FeatureStageTemplate.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/FeatureStageTemplate.java index ffc077f1a..d0fae0e1f 100644 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/FeatureStageTemplate.java +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/FeatureStageTemplate.java @@ -8,6 +8,7 @@ import com.dfsek.tectonic.api.exception.ValidationException; import com.dfsek.terra.addons.generation.feature.FeatureGenerationStage; import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.properties.PropertyKey; import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage; @@ -22,6 +23,24 @@ public class FeatureStageTemplate implements ObjectTemplate, Va @Default private int resolution = 4; + @Value("blend.sampler") + @Default + private NoiseSampler blendSampler = new NoiseSampler() { + @Override + public double noise(long seed, double x, double y) { + return 0; + } + + @Override + public double noise(long seed, double x, double y, double z) { + return 0; + } + }; + + @Value("blend.amplitude") + @Default + private double blendAmplitude = 0d; + public FeatureStageTemplate(Platform platform, PropertyKey biomeFeaturesKey) { this.platform = platform; this.biomeFeaturesKey = biomeFeaturesKey; @@ -30,7 +49,7 @@ public class FeatureStageTemplate implements ObjectTemplate, Va @Override public FeatureGenerationStage get() { - return new FeatureGenerationStage(platform, id, resolution, biomeFeaturesKey); + return new FeatureGenerationStage(platform, id, resolution, biomeFeaturesKey, blendSampler, blendAmplitude); } @Override