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

package com.hypixel.hytale.procedurallib.logic.point;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.hypixel.hytale.procedurallib.logic.ResultBuffer;
import com.hypixel.hytale.procedurallib.random.ICoordinateRandomizer;

public class DistortedPointGenerator implements IPointGenerator
{
    protected final IPointGenerator pointGenerator;
    protected final ICoordinateRandomizer coordinateRandomizer;
    
    public DistortedPointGenerator(final IPointGenerator pointGenerator, final ICoordinateRandomizer coordinateRandomizer) {
        this.pointGenerator = pointGenerator;
        this.coordinateRandomizer = coordinateRandomizer;
    }
    
    @Override
    public ResultBuffer.ResultBuffer2d nearest2D(final int seed, final double x, final double y) {
        return this.pointGenerator.nearest2D(seed, this.coordinateRandomizer.randomDoubleX(seed, x, y), this.coordinateRandomizer.randomDoubleY(seed, x, y));
    }
    
    @Override
    public ResultBuffer.ResultBuffer3d nearest3D(final int seed, final double x, final double y, final double z) {
        return this.pointGenerator.nearest3D(seed, this.coordinateRandomizer.randomDoubleX(seed, x, y, z), this.coordinateRandomizer.randomDoubleY(seed, x, y, z), this.coordinateRandomizer.randomDoubleZ(seed, x, y, z));
    }
    
    @Override
    public ResultBuffer.ResultBuffer2d transition2D(final int seed, final double x, final double y) {
        return this.pointGenerator.transition2D(seed, this.coordinateRandomizer.randomDoubleX(seed, x, y), this.coordinateRandomizer.randomDoubleY(seed, x, y));
    }
    
    @Override
    public ResultBuffer.ResultBuffer3d transition3D(final int seed, final double x, final double y, final double z) {
        return this.pointGenerator.transition3D(seed, this.coordinateRandomizer.randomDoubleX(seed, x, y, z), this.coordinateRandomizer.randomDoubleY(seed, x, y, z), this.coordinateRandomizer.randomDoubleZ(seed, x, y, z));
    }
    
    @Override
    public double getInterval() {
        return this.pointGenerator.getInterval();
    }
    
    @Override
    public void collect(final int seed, final double minX, final double minY, final double maxX, final double maxY, final PointConsumer2d consumer) {
        this.pointGenerator.collect(seed, minX, minY, maxX, maxY, consumer);
    }
    
    @Override
    public boolean equals(@Nullable final Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || this.getClass() != o.getClass()) {
            return false;
        }
        final DistortedPointGenerator that = (DistortedPointGenerator)o;
        return this.pointGenerator.equals(that.pointGenerator) && this.coordinateRandomizer.equals(that.coordinateRandomizer);
    }
    
    @Override
    public int hashCode() {
        int result = this.pointGenerator.hashCode();
        result = 31 * result + this.coordinateRandomizer.hashCode();
        return result;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "DistortedPointGenerator{pointGenerator=" + String.valueOf(this.pointGenerator) + ", coordinateRandomizer=" + String.valueOf(this.coordinateRandomizer);
    }
}
