39 lines
1.5 KiB
Java
39 lines
1.5 KiB
Java
package com.hypixel.hytale.builtin.hytalegenerator.positionproviders;
|
|
|
|
import com.hypixel.hytale.builtin.hytalegenerator.VectorUtil;
|
|
import com.hypixel.hytale.builtin.hytalegenerator.framework.interfaces.functions.BiDouble2DoubleFunction;
|
|
import com.hypixel.hytale.math.vector.Vector3d;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class BaseHeightPositionProvider extends PositionProvider {
|
|
@Nonnull
|
|
private final BiDouble2DoubleFunction baseHeightFunction;
|
|
private final double maxYInput;
|
|
private final double minYInput;
|
|
@Nonnull
|
|
private final PositionProvider positionProvider;
|
|
|
|
public BaseHeightPositionProvider(
|
|
@Nonnull BiDouble2DoubleFunction baseHeightFunction, @Nonnull PositionProvider positionProvider, double minYInput, double maxYInput
|
|
) {
|
|
maxYInput = Math.max(minYInput, maxYInput);
|
|
this.baseHeightFunction = baseHeightFunction;
|
|
this.positionProvider = positionProvider;
|
|
this.maxYInput = maxYInput;
|
|
this.minYInput = minYInput;
|
|
}
|
|
|
|
@Override
|
|
public void positionsIn(@Nonnull PositionProvider.Context context) {
|
|
PositionProvider.Context childContext = new PositionProvider.Context(context);
|
|
childContext.consumer = position -> {
|
|
Vector3d offsetP = position.clone();
|
|
offsetP.y = offsetP.y + this.baseHeightFunction.apply(position.x, position.z);
|
|
if (VectorUtil.isInside(offsetP, context.minInclusive, context.maxExclusive)) {
|
|
context.consumer.accept(offsetP);
|
|
}
|
|
};
|
|
this.positionProvider.positionsIn(childContext);
|
|
}
|
|
}
|