All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.util.noise.OctaveGenerator Maven / Gradle / Ivy

package org.bukkit.util.noise;

/**
 * Creates noise using unbiased octaves
 */
public abstract class OctaveGenerator {
  protected final NoiseGenerator[] octaves;
  protected double xScale = 1;
  protected double yScale = 1;
  protected double zScale = 1;

  protected OctaveGenerator(NoiseGenerator[] octaves) {
    this.octaves = octaves;
  }

  /**
   * Sets the scale used for all coordinates passed to this generator.
   * 

* This is the equivalent to setting each coordinate to the specified * value. * * @param scale New value to scale each coordinate by */ public void setScale(double scale) { setXScale(scale); setYScale(scale); setZScale(scale); } /** * Gets the scale used for each X-coordinates passed * * @return X scale */ public double getXScale() { return xScale; } /** * Sets the scale used for each X-coordinates passed * * @param scale New X scale */ public void setXScale(double scale) { xScale = scale; } /** * Gets the scale used for each Y-coordinates passed * * @return Y scale */ public double getYScale() { return yScale; } /** * Sets the scale used for each Y-coordinates passed * * @param scale New Y scale */ public void setYScale(double scale) { yScale = scale; } /** * Gets the scale used for each Z-coordinates passed * * @return Z scale */ public double getZScale() { return zScale; } /** * Sets the scale used for each Z-coordinates passed * * @param scale New Z scale */ public void setZScale(double scale) { zScale = scale; } /** * Gets a clone of the individual octaves used within this generator * * @return Clone of the individual octaves */ public NoiseGenerator[] getOctaves() { return octaves.clone(); } /** * Generates noise for the 1D coordinates using the specified number of * octaves and parameters * * @param x X-coordinate * @param frequency How much to alter the frequency by each octave * @param amplitude How much to alter the amplitude by each octave * @return Resulting noise */ public double noise(double x, double frequency, double amplitude) { return noise(x, 0, 0, frequency, amplitude); } /** * Generates noise for the 1D coordinates using the specified number of * octaves and parameters * * @param x X-coordinate * @param frequency How much to alter the frequency by each octave * @param amplitude How much to alter the amplitude by each octave * @param normalized If true, normalize the value to [-1, 1] * @return Resulting noise */ public double noise(double x, double frequency, double amplitude, boolean normalized) { return noise(x, 0, 0, frequency, amplitude, normalized); } /** * Generates noise for the 2D coordinates using the specified number of * octaves and parameters * * @param x X-coordinate * @param y Y-coordinate * @param frequency How much to alter the frequency by each octave * @param amplitude How much to alter the amplitude by each octave * @return Resulting noise */ public double noise(double x, double y, double frequency, double amplitude) { return noise(x, y, 0, frequency, amplitude); } /** * Generates noise for the 2D coordinates using the specified number of * octaves and parameters * * @param x X-coordinate * @param y Y-coordinate * @param frequency How much to alter the frequency by each octave * @param amplitude How much to alter the amplitude by each octave * @param normalized If true, normalize the value to [-1, 1] * @return Resulting noise */ public double noise(double x, double y, double frequency, double amplitude, boolean normalized) { return noise(x, y, 0, frequency, amplitude, normalized); } /** * Generates noise for the 3D coordinates using the specified number of * octaves and parameters * * @param x X-coordinate * @param y Y-coordinate * @param z Z-coordinate * @param frequency How much to alter the frequency by each octave * @param amplitude How much to alter the amplitude by each octave * @return Resulting noise */ public double noise(double x, double y, double z, double frequency, double amplitude) { return noise(x, y, z, frequency, amplitude, false); } /** * Generates noise for the 3D coordinates using the specified number of * octaves and parameters * * @param x X-coordinate * @param y Y-coordinate * @param z Z-coordinate * @param frequency How much to alter the frequency by each octave * @param amplitude How much to alter the amplitude by each octave * @param normalized If true, normalize the value to [-1, 1] * @return Resulting noise */ public double noise(double x, double y, double z, double frequency, double amplitude, boolean normalized) { double result = 0; double amp = 1; double freq = 1; double max = 0; x *= xScale; y *= yScale; z *= zScale; for (NoiseGenerator octave : octaves) { result += octave.noise(x * freq, y * freq, z * freq) * amp; max += amp; freq *= frequency; amp *= amplitude; } if (normalized) { result /= max; } return result; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy