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

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

import com.hypixel.hytale.math.vector.Vector3d;
import javax.annotation.Nonnull;
import com.hypixel.hytale.math.vector.Vector3i;

public class OffsetPositionProvider extends PositionProvider
{
    @Nonnull
    private final Vector3i offset3i;
    @Nonnull
    private final Vector3d offset3d;
    @Nonnull
    private final PositionProvider positionProvider;
    
    public OffsetPositionProvider(@Nonnull final Vector3i offset, @Nonnull final PositionProvider positionProvider) {
        this.offset3i = offset.clone();
        this.positionProvider = positionProvider;
        this.offset3d = this.offset3i.toVector3d();
    }
    
    public OffsetPositionProvider(@Nonnull final Vector3d offset, @Nonnull final PositionProvider positionProvider) {
        this.offset3d = offset.clone();
        this.positionProvider = positionProvider;
        this.offset3i = this.offset3d.toVector3i();
    }
    
    @Override
    public void positionsIn(@Nonnull final Context context) {
        final Vector3d windowMin = context.minInclusive.clone();
        final Vector3d windowMax = context.maxExclusive.clone();
        windowMin.subtract(this.offset3d);
        windowMax.subtract(this.offset3d);
        final Context childContext = new Context();
        childContext.minInclusive = windowMin;
        childContext.maxExclusive = windowMax;
        childContext.consumer = (p -> {
            final Vector3d offsetP = p.clone();
            offsetP.add(this.offset3d);
            context.consumer.accept(offsetP);
            return;
        });
        childContext.workerId = context.workerId;
        this.positionProvider.positionsIn(childContext);
    }
}
