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

package com.hypixel.hytale.builtin.hytalegenerator.assets.vectorproviders;

import com.hypixel.hytale.codec.validation.Validator;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
import com.hypixel.hytale.builtin.hytalegenerator.vectorproviders.DensityGradientVectorProvider;
import com.hypixel.hytale.builtin.hytalegenerator.vectorproviders.ConstantVectorProvider;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.builtin.hytalegenerator.vectorproviders.VectorProvider;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.hytalegenerator.assets.density.ConstantDensityAsset;
import com.hypixel.hytale.builtin.hytalegenerator.assets.density.DensityAsset;
import com.hypixel.hytale.codec.builder.BuilderCodec;

public class DensityGradientVectorProviderAsset extends VectorProviderAsset
{
    public static final BuilderCodec<DensityGradientVectorProviderAsset> CODEC;
    private DensityAsset densityAsset;
    private double sampleDistance;
    
    public DensityGradientVectorProviderAsset() {
        this.densityAsset = new ConstantDensityAsset();
        this.sampleDistance = 1.0;
    }
    
    @Override
    public VectorProvider build(@Nonnull final Argument argument) {
        if (this.isSkipped()) {
            return new ConstantVectorProvider(new Vector3d());
        }
        final Density density = this.densityAsset.build(DensityAsset.from(argument));
        return new DensityGradientVectorProvider(density, this.sampleDistance);
    }
    
    static {
        CODEC = BuilderCodec.builder(DensityGradientVectorProviderAsset.class, DensityGradientVectorProviderAsset::new, VectorProviderAsset.ABSTRACT_CODEC).append(new KeyedCodec<DensityAsset>("Density", (Codec<DensityAsset>)DensityAsset.CODEC, true), (asset, value) -> asset.densityAsset = value, asset -> asset.densityAsset).add().append(new KeyedCodec("SampleDistance", BuilderCodec.DOUBLE, true), (asset, value) -> asset.sampleDistance = value, asset -> asset.sampleDistance).addValidator(Validators.greaterThanOrEqual(0.0)).add().build();
    }
}
