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 Billowed extends NoiseModule
{
private final FishyNoise noiseGen;
private final float offsetX;
private final float offsetY;
private final float offsetZ;
private final int numOctaves;
private final float persistance;
public Billowed(long seed, int nOctaves, float p)
{
this.numOctaves = nOctaves;
this.persistance = p;
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 curAmplitude = this.amplitude;
for (int n = 0; n < this.numOctaves; n++)
{
val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, this.offsetY) * curAmplitude);
i *= 2;
curAmplitude *= this.persistance;
}
return val;
}
@Override
public float getNoise(float i, float j)
{
i *= this.frequencyX;
j *= this.frequencyY;
if (this.numOctaves == 2)
{
return Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * this.amplitude) + Math.abs(this.noiseGen.noise2d(i + i + this.offsetX, j + j + this.offsetY) * this.amplitude * this.persistance);
}
float val = 0;
float curAmplitude = this.amplitude;
for (int n = 0; n < this.numOctaves; n++)
{
val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * curAmplitude);
i += i;
j += j;
curAmplitude *= this.persistance;
}
return val;
}
@Override
public float getNoise(float i, float j, float k)
{
i *= this.frequencyX;
j *= this.frequencyY;
k *= this.frequencyZ;
float val = 0;
for (int n = 0; n < this.numOctaves; n++)
{
val += Math.abs(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * this.amplitude);
i *= 2;
j *= 2;
k *= 2;
}
return val;
}
}