Change climate offsetting to random instead of bitmask (#1690)
This commit is contained in:
parent
5741d6e98b
commit
1a5742af0f
2 changed files with 34 additions and 6 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue