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

package com.hypixel.hytale.server.worldgen.zoom;

import java.util.List;
import com.hypixel.hytale.math.util.FastRandom;
import com.hypixel.hytale.server.worldgen.zone.Zone;
import javax.annotation.Nonnull;
import com.hypixel.hytale.procedurallib.random.ICoordinateRandomizer;

public class FuzzyZoom
{
    private final ICoordinateRandomizer randomizer;
    @Nonnull
    private final ExactZoom exactZoom;
    
    public FuzzyZoom(final ICoordinateRandomizer randomizer, @Nonnull final PixelProvider source, final double zoomX, final double zoomY, final int offsetX, final int offsetY) {
        this.randomizer = randomizer;
        this.exactZoom = new ExactZoom(source, zoomX, zoomY, offsetX, offsetY);
    }
    
    public FuzzyZoom(final ICoordinateRandomizer randomizer, final ExactZoom exactZoom) {
        this.randomizer = randomizer;
        this.exactZoom = exactZoom;
    }
    
    public double getX(final int seed, final double x, final double y) {
        return this.randomizer.randomDoubleX(seed, x, y);
    }
    
    public double getY(final int seed, final double x, final double y) {
        return this.randomizer.randomDoubleY(seed, x, y);
    }
    
    public int generate(final double x, final double y) {
        return this.exactZoom.generate(x, y);
    }
    
    public double distance(final double x, final double y) {
        return this.exactZoom.distanceToNextPixel(x, y);
    }
    
    @Nonnull
    public ExactZoom getExactZoom() {
        return this.exactZoom;
    }
    
    public boolean inBounds(final double x, final double y) {
        return this.exactZoom.inBounds(x, y);
    }
    
    public Zone.UniqueCandidate[] generateUniqueZoneCandidates(final Zone.UniqueEntry[] entries, final int maxPositions) {
        return this.exactZoom.generateUniqueZoneCandidates(entries, maxPositions);
    }
    
    public FuzzyZoom generateUniqueZones(final Zone.UniqueCandidate[] candidates, final FastRandom random, final List<Zone.Unique> zones) {
        return new FuzzyZoom(this.randomizer, this.exactZoom.generateUniqueZones(candidates, random, zones));
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "FuzzyZoom{randomizer=" + String.valueOf(this.randomizer) + ", exactZoom=" + String.valueOf(this.exactZoom);
    }
}
