Change climate offsetting to random instead of bitmask (#1690)

This commit is contained in:
SuperCoder79 2020-10-04 21:11:48 -04:00 committed by GitHub
parent 5741d6e98b
commit 1a5742af0f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 6 deletions

View file

@ -7,6 +7,8 @@
******************************************************************************/ ******************************************************************************/
package biomesoplenty.common.world.layer; package biomesoplenty.common.world.layer;
import java.util.Random;
import biomesoplenty.common.world.SimplexNoise; import biomesoplenty.common.world.SimplexNoise;
import biomesoplenty.common.world.layer.traits.IBOPAreaTransformer0; import biomesoplenty.common.world.layer.traits.IBOPAreaTransformer0;
import biomesoplenty.common.world.layer.traits.IBOPContextExtended; import biomesoplenty.common.world.layer.traits.IBOPContextExtended;
@ -19,6 +21,10 @@ public enum RainfallNoiseLayer implements IBOPAreaTransformer0
private final double scale; private final double scale;
private long seed;
private double xOffset;
private double zOffset;
RainfallNoiseLayer(double scale) RainfallNoiseLayer(double scale)
{ {
this.scale = scale; this.scale = scale;
@ -27,9 +33,17 @@ public enum RainfallNoiseLayer implements IBOPAreaTransformer0
@Override @Override
public int applyPixel(IBOPContextExtended context, int x, int z) public int applyPixel(IBOPContextExtended context, int x, int z)
{ {
double xOffset = (double)(context.getWorldSeed() & 0xFFFFFF) * 0.000003D; long seed = context.getWorldSeed();
double zOffset = (double)(context.getWorldSeed() & 0xFFFFFF) * 0.000004D;
double noiseVal = SimplexNoise.noise((x + xOffset) * this.scale, (z + zOffset) * this.scale); // If the seed has changed, re-initialize offsets
if (this.seed != seed) {
Random random = new Random(seed - 123);
this.xOffset = random.nextDouble() * 128;
this.zOffset = random.nextDouble() * 128;
this.seed = seed;
}
double noiseVal = SimplexNoise.noise((x + this.xOffset) * this.scale, (z + this.zOffset) * this.scale);
// boundaries were determined empirically by analyzing statistically output from the SimplexNoise function, and splitting into 12 equally likely groups // boundaries were determined empirically by analyzing statistically output from the SimplexNoise function, and splitting into 12 equally likely groups
if (noiseVal < -0.637D) return 0; if (noiseVal < -0.637D) return 0;

View file

@ -7,6 +7,8 @@
******************************************************************************/ ******************************************************************************/
package biomesoplenty.common.world.layer; package biomesoplenty.common.world.layer;
import java.util.Random;
import biomesoplenty.common.world.SimplexNoise; import biomesoplenty.common.world.SimplexNoise;
import biomesoplenty.common.world.layer.traits.IBOPAreaTransformer0; import biomesoplenty.common.world.layer.traits.IBOPAreaTransformer0;
import biomesoplenty.common.world.layer.traits.IBOPContextExtended; import biomesoplenty.common.world.layer.traits.IBOPContextExtended;
@ -19,6 +21,10 @@ public enum TemperatureNoiseLayer implements IBOPAreaTransformer0
private final double scale; private final double scale;
private long seed;
private double xOffset;
private double zOffset;
TemperatureNoiseLayer(double scale) TemperatureNoiseLayer(double scale)
{ {
this.scale = scale; this.scale = scale;
@ -27,9 +33,17 @@ public enum TemperatureNoiseLayer implements IBOPAreaTransformer0
@Override @Override
public int applyPixel(IBOPContextExtended context, int x, int z) public int applyPixel(IBOPContextExtended context, int x, int z)
{ {
double xOffset = (double)(context.getWorldSeed() & 0xFFFFFF) * 0.000001D; long seed = context.getWorldSeed();
double zOffset = (double)(context.getWorldSeed() & 0xFFFFFF) * 0.000002D;
double noiseVal = SimplexNoise.noise((x + xOffset) * this.scale, (z + zOffset) * this.scale); // If the seed has changed, re-initialize offsets
if (this.seed != seed) {
Random random = new Random(seed + 123);
this.xOffset = random.nextDouble() * 128;
this.zOffset = random.nextDouble() * 128;
this.seed = seed;
}
double noiseVal = SimplexNoise.noise((x + this.xOffset) * this.scale, (z + this.zOffset) * this.scale);
// boundaries were determined empirically by analyzing statistically output from the SimplexNoise function, and splitting into 9 equally likely groups // boundaries were determined empirically by analyzing statistically output from the SimplexNoise function, and splitting into 9 equally likely groups
if (noiseVal < -0.619D) return 0; if (noiseVal < -0.619D) return 0;