57 lines
1.6 KiB
Java
57 lines
1.6 KiB
Java
package com.hypixel.hytale.procedurallib.property;
|
|
|
|
import com.hypixel.hytale.math.util.MathUtil;
|
|
import java.util.function.DoubleUnaryOperator;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class CurveNoiseProperty implements NoiseProperty {
|
|
protected final NoiseProperty noise;
|
|
protected final DoubleUnaryOperator function;
|
|
|
|
public CurveNoiseProperty(NoiseProperty noise, DoubleUnaryOperator function) {
|
|
this.noise = noise;
|
|
this.function = function;
|
|
}
|
|
|
|
@Override
|
|
public double get(int seed, double x, double y) {
|
|
double value = this.noise.get(seed, x, y);
|
|
return this.function.applyAsDouble(value);
|
|
}
|
|
|
|
@Override
|
|
public double get(int seed, double x, double y, double z) {
|
|
double value = this.noise.get(seed, x, y, z);
|
|
return this.function.applyAsDouble(value);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "CurveNoiseProperty{noise=" + this.noise + ", function=" + this.function + "}";
|
|
}
|
|
|
|
public static class PowerCurve implements DoubleUnaryOperator {
|
|
protected static final double MAX = 10.0;
|
|
protected final double a;
|
|
protected final double b;
|
|
|
|
public PowerCurve(double a, double b) {
|
|
this.a = MathUtil.clamp(a, 0.0, 10.0);
|
|
this.b = MathUtil.clamp(b, -this.a, 10.0);
|
|
}
|
|
|
|
@Override
|
|
public double applyAsDouble(double operand) {
|
|
operand = 1.0 - operand;
|
|
return 1.0 - Math.pow(operand, this.a + this.b * operand);
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "PowerCurve{a=" + this.a + ", b=" + this.b + "}";
|
|
}
|
|
}
|
|
}
|