250 lines
6.7 KiB
Java
250 lines
6.7 KiB
Java
package com.hypixel.hytale.procedurallib.property;
|
|
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class NoiseFormulaProperty implements NoiseProperty {
|
|
protected final NoiseProperty property;
|
|
protected final NoiseFormulaProperty.NoiseFormula.Formula formula;
|
|
|
|
public NoiseFormulaProperty(NoiseProperty property, NoiseFormulaProperty.NoiseFormula.Formula formula) {
|
|
this.property = property;
|
|
this.formula = formula;
|
|
}
|
|
|
|
public NoiseProperty getProperty() {
|
|
return this.property;
|
|
}
|
|
|
|
public NoiseFormulaProperty.NoiseFormula.Formula getFormula() {
|
|
return this.formula;
|
|
}
|
|
|
|
@Override
|
|
public double get(int seed, double x, double y) {
|
|
return this.formula.eval(this.property.get(seed, x, y));
|
|
}
|
|
|
|
@Override
|
|
public double get(int seed, double x, double y, double z) {
|
|
return this.formula.eval(this.property.get(seed, x, y, z));
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "NoiseFormulaProperty{property=" + this.property + ", formula=" + this.formula + "}";
|
|
}
|
|
|
|
public static enum NoiseFormula {
|
|
NORMAL(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return noise;
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "NormalFormula{}";
|
|
}
|
|
}),
|
|
INVERTED(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return 1.0 - noise;
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedFormula{}";
|
|
}
|
|
}),
|
|
SQUARED(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return noise * noise;
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "SquaredFormula{}";
|
|
}
|
|
}),
|
|
INVERTED_SQUARED(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return 1.0 - noise * noise;
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedSquaredFormula{}";
|
|
}
|
|
}),
|
|
SQRT(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return Math.sqrt(noise);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "SqrtFormula{}";
|
|
}
|
|
}),
|
|
INVERTED_SQRT(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return 1.0 - Math.sqrt(noise);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedSqrtFormula{}";
|
|
}
|
|
}),
|
|
RIDGED(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return Math.abs(noise - 0.5);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "RidgedFormula{}";
|
|
}
|
|
}),
|
|
INVERTED_RIDGED(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return 1.0 - Math.abs(noise - 0.5);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedRidgedFormula{}";
|
|
}
|
|
}),
|
|
RIDGED_SQRT(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return Math.sqrt(Math.abs(noise - 0.5));
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "RidgedSqrtFormula{}";
|
|
}
|
|
}),
|
|
INVERTED_RIDGED_SQRT(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return 1.0 - Math.sqrt(Math.abs(noise - 0.5));
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedRidgedSqrtFormula{}";
|
|
}
|
|
}),
|
|
RIDGED_FIX(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return Math.abs(noise * 2.0 - 1.0);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "RidgedFixFormula{}";
|
|
}
|
|
}),
|
|
INVERTED_RIDGED_FIX(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return 1.0 - Math.abs(noise * 2.0 - 1.0);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedRidgedFixFormula{}";
|
|
}
|
|
}),
|
|
RIDGED_SQRT_FIX(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return Math.sqrt(Math.abs(noise * 2.0 - 1.0));
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "RidgedSqrtFixFormula{}";
|
|
}
|
|
}),
|
|
INVERTED_RIDGED_SQRT_FIX(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
return 1.0 - Math.sqrt(Math.abs(noise * 2.0 - 1.0));
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedRidgedSqrtFixFormula{}";
|
|
}
|
|
}),
|
|
RIDGED_SQUARED_FIX(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
noise = Math.abs(noise * 2.0 - 1.0);
|
|
return noise * noise;
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "RidgedSquaredFixFormula{}";
|
|
}
|
|
}),
|
|
INVERTED_RIDGED_SQUARED_FIX(new NoiseFormulaProperty.NoiseFormula.Formula() {
|
|
@Override
|
|
public double eval(double noise) {
|
|
noise = Math.abs(noise * 2.0 - 1.0);
|
|
return 1.0 - noise * noise;
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "InvertedRidgedSquaredFixFormula{}";
|
|
}
|
|
});
|
|
|
|
public final NoiseFormulaProperty.NoiseFormula.Formula formula;
|
|
|
|
private NoiseFormula(NoiseFormulaProperty.NoiseFormula.Formula formula) {
|
|
this.formula = formula;
|
|
}
|
|
|
|
public NoiseFormulaProperty.NoiseFormula.Formula getFormula() {
|
|
return this.formula;
|
|
}
|
|
|
|
@FunctionalInterface
|
|
public interface Formula {
|
|
double eval(double var1);
|
|
}
|
|
}
|
|
}
|