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

package com.hypixel.hytale.procedurallib.supplier;

import javax.annotation.Nonnull;
import java.util.Random;

public class FloatRange
{
    public static final Constant ZERO;
    public static final Constant ONE;
    
    static {
        ZERO = new Constant(0.0f);
        ONE = new Constant(1.0f);
    }
    
    public static class Constant implements IFloatRange
    {
        protected final float result;
        
        public Constant(final float result) {
            this.result = result;
        }
        
        public float getResult() {
            return this.result;
        }
        
        @Override
        public float getValue(final float v) {
            return this.result;
        }
        
        @Override
        public float getValue(final FloatSupplier supplier) {
            return this.result;
        }
        
        @Override
        public float getValue(final Random random) {
            return this.result;
        }
        
        @Override
        public float getValue(final int seed, final double x, final double y, final IDoubleCoordinateSupplier2d supplier) {
            return this.result;
        }
        
        @Override
        public float getValue(final int seed, final double x, final double y, final double z, final IDoubleCoordinateSupplier3d supplier) {
            return this.result;
        }
        
        @Nonnull
        @Override
        public String toString() {
            return "FloatRange.Constant{result=" + this.result;
        }
    }
    
    public static class Normal implements IFloatRange
    {
        protected final float min;
        protected final float range;
        
        public Normal(final float min, final float max) {
            this.min = min;
            this.range = max - min;
        }
        
        public float getMin() {
            return this.min;
        }
        
        public float getRange() {
            return this.range;
        }
        
        @Override
        public float getValue(final float v) {
            return this.min + this.range * v;
        }
        
        @Override
        public float getValue(@Nonnull final FloatSupplier supplier) {
            return this.min + this.range * supplier.getAsFloat();
        }
        
        @Override
        public float getValue(@Nonnull final Random random) {
            return this.getValue(random.nextFloat());
        }
        
        @Override
        public float getValue(final int seed, final double x, final double y, @Nonnull final IDoubleCoordinateSupplier2d supplier) {
            return this.min + this.range * (float)supplier.get(seed, x, y);
        }
        
        @Override
        public float getValue(final int seed, final double x, final double y, final double z, @Nonnull final IDoubleCoordinateSupplier3d supplier) {
            return this.min + this.range * (float)supplier.get(seed, x, y, z);
        }
        
        @Nonnull
        @Override
        public String toString() {
            return "FloatRange.Normal{min=" + this.min + ", range=" + this.range;
        }
    }
}
