// 
// 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;

public class AnchorPositionProvider extends PositionProvider
{
    @Nonnull
    private final PositionProvider positionProvider;
    private final boolean isReversed;
    
    public AnchorPositionProvider(@Nonnull final PositionProvider positionProvider, final boolean isReversed) {
        this.positionProvider = positionProvider;
        this.isReversed = isReversed;
    }
    
    @Override
    public void positionsIn(@Nonnull final Context context) {
        if (context == null) {
            return;
        }
        final Vector3d anchor = context.anchor;
        if (anchor == null) {
            return;
        }
        final Vector3d offsetMin = this.isReversed ? context.minInclusive.clone().add(anchor) : context.minInclusive.clone().addScaled(anchor, -1.0);
        final Vector3d offsetMax = this.isReversed ? context.maxExclusive.clone().add(anchor) : context.maxExclusive.clone().addScaled(anchor, -1.0);
        final Context childContext = new Context(offsetMin, offsetMax, p -> {
            final Vector3d newPoint = p.clone();
            if (this.isReversed) {
                newPoint.addScaled(anchor, -1.0);
            }
            else {
                newPoint.add(anchor);
            }
            if (VectorUtil.isInside(newPoint, context.minInclusive, context.maxExclusive)) {
                context.consumer.accept(newPoint);
            }
            return;
        }, context.anchor, context.workerId);
        this.positionProvider.positionsIn(childContext);
    }
}
