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

package com.hypixel.hytale.math.range;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.hypixel.hytale.math.codec.FloatRangeArrayCodec;

public class FloatRange
{
    public static final FloatRangeArrayCodec CODEC;
    private float inclusiveMin;
    private float inclusiveMax;
    private float range;
    
    public FloatRange() {
        this(0.0f, 0.0f);
    }
    
    public FloatRange(final float inclusiveMin, final float inclusiveMax) {
        this.inclusiveMin = inclusiveMin;
        this.inclusiveMax = inclusiveMax;
        this.range = inclusiveMax - inclusiveMin + 1.0f;
    }
    
    public float getInclusiveMin() {
        return this.inclusiveMin;
    }
    
    public float getInclusiveMax() {
        return this.inclusiveMax;
    }
    
    public void setInclusiveMin(final float inclusiveMin) {
        this.inclusiveMin = inclusiveMin;
        this.range = this.inclusiveMax - inclusiveMin + 1.0f;
    }
    
    public void setInclusiveMax(final float inclusiveMax) {
        this.inclusiveMax = inclusiveMax;
        this.range = inclusiveMax - this.inclusiveMin + 1.0f;
    }
    
    public float getFloat(final float factor) {
        final float value = this.inclusiveMin + this.range * factor;
        return Float.min(this.inclusiveMax, value);
    }
    
    public float getFloat(final double factor) {
        final float value = this.inclusiveMin + (float)(this.range * factor);
        return Float.min(this.inclusiveMax, value);
    }
    
    public boolean includes(final float value) {
        return value >= this.inclusiveMin && value <= this.inclusiveMax;
    }
    
    @Override
    public boolean equals(@Nullable final Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || this.getClass() != o.getClass()) {
            return false;
        }
        final FloatRange that = (FloatRange)o;
        return Float.compare(that.inclusiveMin, this.inclusiveMin) == 0 && Float.compare(that.inclusiveMax, this.inclusiveMax) == 0 && Float.compare(that.range, this.range) == 0;
    }
    
    @Override
    public int hashCode() {
        int result = (this.inclusiveMin != 0.0f) ? Float.floatToIntBits(this.inclusiveMin) : 0;
        result = 31 * result + ((this.inclusiveMax != 0.0f) ? Float.floatToIntBits(this.inclusiveMax) : 0);
        result = 31 * result + ((this.range != 0.0f) ? Float.floatToIntBits(this.range) : 0);
        return result;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "FloatRange{inclusiveMin=" + this.inclusiveMin + ", inclusiveMax=" + this.inclusiveMax;
    }
    
    static {
        CODEC = new FloatRangeArrayCodec();
    }
}
