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

package com.hypixel.hytale.server.worldgen.cave.shape.distorted;

import com.hypixel.hytale.procedurallib.NoiseFunction;
import com.hypixel.hytale.procedurallib.property.SingleNoiseProperty;
import com.hypixel.hytale.procedurallib.logic.ConstantNoise;
import javax.annotation.Nullable;
import com.hypixel.hytale.procedurallib.property.NoiseProperty;

public class ShapeDistortion
{
    private static final NoiseProperty DEFAULT_NOISE;
    public static final ShapeDistortion DEFAULT;
    private final NoiseProperty widthNoise;
    private final NoiseProperty floorNoise;
    private final NoiseProperty ceilingNoise;
    
    public ShapeDistortion(final NoiseProperty widthNoise, final NoiseProperty floorNoise, final NoiseProperty ceilingNoise) {
        this.widthNoise = widthNoise;
        this.floorNoise = floorNoise;
        this.ceilingNoise = ceilingNoise;
    }
    
    public double getWidthFactor(final int seed, final double x, final double z) {
        return this.widthNoise.get(seed, x, z);
    }
    
    public double getFloorFactor(final int seed, final double x, final double z) {
        return this.floorNoise.get(seed, x, z);
    }
    
    public double getCeilingFactor(final int seed, final double x, final double z) {
        return this.ceilingNoise.get(seed, x, z);
    }
    
    public static ShapeDistortion of(@Nullable NoiseProperty widthNoise, @Nullable NoiseProperty floorNoise, @Nullable NoiseProperty ceilingNoise) {
        widthNoise = ((widthNoise == null) ? ShapeDistortion.DEFAULT_NOISE : widthNoise);
        floorNoise = ((floorNoise == null) ? ShapeDistortion.DEFAULT_NOISE : floorNoise);
        ceilingNoise = ((ceilingNoise == null) ? ShapeDistortion.DEFAULT_NOISE : ceilingNoise);
        if (widthNoise == ShapeDistortion.DEFAULT_NOISE && floorNoise == ShapeDistortion.DEFAULT_NOISE && ceilingNoise == ShapeDistortion.DEFAULT_NOISE) {
            return ShapeDistortion.DEFAULT;
        }
        return new ShapeDistortion(widthNoise, floorNoise, ceilingNoise);
    }
    
    static {
        DEFAULT_NOISE = new SingleNoiseProperty(new ConstantNoise(1.0));
        DEFAULT = new ShapeDistortion(ShapeDistortion.DEFAULT_NOISE, ShapeDistortion.DEFAULT_NOISE, ShapeDistortion.DEFAULT_NOISE);
    }
}
