// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.hytalegenerator.positionproviders;

import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.builtin.hytalegenerator.VectorUtil;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.hytalegenerator.framework.interfaces.functions.BiDouble2DoubleFunction;

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 final BiDouble2DoubleFunction baseHeightFunction, @Nonnull final PositionProvider positionProvider, final 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 final Context context) {
        final Context childContext = new Context(context);
        childContext.consumer = (position -> {
            final Vector3d clone;
            final Vector3d offsetP = clone = position.clone();
            clone.y += this.baseHeightFunction.apply(position.x, position.z);
            if (VectorUtil.isInside(offsetP, context.minInclusive, context.maxExclusive)) {
                context.consumer.accept(offsetP);
            }
            return;
        });
        this.positionProvider.positionsIn(childContext);
    }
}
