package micdoodle8.mods.galacticraft.core.perlin.generator; import micdoodle8.mods.galacticraft.core.perlin.FishyNoise; import micdoodle8.mods.galacticraft.core.perlin.NoiseModule; import java.util.Random; public class RidgedMulti extends NoiseModule { private final FishyNoise noiseGen; private final float offsetX; private final float offsetY; private final float offsetZ; private final int numOctaves; public RidgedMulti(long seed, int nOctaves) { this.numOctaves = nOctaves; final Random rand = new Random(seed); this.offsetX = rand.nextFloat() / 2 + 0.01F; this.offsetY = rand.nextFloat() / 2 + 0.01F; this.offsetZ = rand.nextFloat() / 2 + 0.01F; this.noiseGen = new FishyNoise(seed); } @Override public float getNoise(float i) { i *= this.frequencyX; float val = 0; float weight = 1.0F; final float offset = 1.0F; final float gain = 2.0F; for (int n = 0; n < this.numOctaves; n++) { float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, this.offsetY)); noise = offset - noise; noise *= noise; noise *= weight; weight = noise * gain; if (weight > 1F) { weight = 1F; } if (weight < 0F) { weight = 0F; } val += noise; i *= 2; } return val; } @Override public float getNoise(float i, float j) { i *= this.frequencyX; j *= this.frequencyY; float val = 0; float weight = 1.0F; final float offset = 1.0F; final float gain = 2.0F; for (int n = 0; n < this.numOctaves; n++) { float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY)); noise = offset - noise; noise *= noise; noise *= weight; weight = noise * gain; if (weight > 1F) { weight = 1F; } if (weight < 0F) { weight = 0F; } val += noise; i *= 2; j *= 2; } return val; } @Override public float getNoise(float i, float j, float k) { i *= this.frequencyX; j *= this.frequencyY; k *= this.frequencyZ; float val = 0F; float weight = 1.0F; final float offset = 1.0F; final float gain = 2.0F; for (int n = 0; n < this.numOctaves; n++) { float noise = this.absolute(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ)); noise = offset - noise; noise *= noise; noise *= weight; weight = noise * gain; if (weight > 1F) { weight = 1F; } if (weight < 0F) { weight = 0F; } val += noise; i *= 2; j *= 2; k *= 2; } return val; } private float absolute(float d) { if (d < 0) { d = -d; } return d; } }