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

package com.hypixel.hytale.procedurallib.property;

import javax.annotation.Nonnull;
import java.util.Arrays;
import com.hypixel.hytale.procedurallib.logic.GeneralNoise;

public class SumNoiseProperty implements NoiseProperty
{
    protected final Entry[] entries;
    
    public SumNoiseProperty(final Entry[] entries) {
        this.entries = entries;
    }
    
    public Entry[] getEntries() {
        return this.entries;
    }
    
    @Override
    public double get(final int seed, final double x, final double y) {
        double val = 0.0;
        for (final Entry entry : this.entries) {
            val += entry.noiseProperty.get(seed, x, y) * entry.factor;
        }
        return GeneralNoise.limit(val);
    }
    
    @Override
    public double get(final int seed, final double x, final double y, final double z) {
        double val = 0.0;
        for (final Entry entry : this.entries) {
            val += entry.noiseProperty.get(seed, x, y, z) * entry.factor;
        }
        return GeneralNoise.limit(val);
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "SumNoiseProperty{entries=" + Arrays.toString(this.entries);
    }
    
    public static class Entry
    {
        private NoiseProperty noiseProperty;
        private double factor;
        
        public Entry(final NoiseProperty noiseProperty, final double factor) {
            this.noiseProperty = noiseProperty;
            this.factor = factor;
        }
        
        public NoiseProperty getNoiseProperty() {
            return this.noiseProperty;
        }
        
        public void setNoiseProperty(final NoiseProperty noiseProperty) {
            this.noiseProperty = noiseProperty;
        }
        
        public double getFactor() {
            return this.factor;
        }
        
        public void setFactor(final double factor) {
            this.factor = factor;
        }
        
        @Nonnull
        @Override
        public String toString() {
            return "Entry{noiseProperty=" + String.valueOf(this.noiseProperty) + ", factor=" + this.factor;
        }
    }
}
