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

package com.hypixel.hytale.procedurallib.logic.cell;

import com.hypixel.hytale.procedurallib.logic.point.PointConsumer;
import com.hypixel.hytale.procedurallib.logic.cell.evaluator.PointEvaluator;
import com.hypixel.hytale.procedurallib.logic.ResultBuffer;
import com.hypixel.hytale.math.util.MathUtil;

public interface CellDistanceFunction
{
    default double scale(final double value) {
        return value;
    }
    
    default double invScale(final double value) {
        return value;
    }
    
    default int getCellX(final double x, final double y) {
        return MathUtil.floor(x);
    }
    
    default int getCellY(final double x, final double y) {
        return MathUtil.floor(y);
    }
    
    default int getCellX(final double x, final double y, final double z) {
        return MathUtil.floor(x);
    }
    
    default int getCellY(final double x, final double y, final double z) {
        return MathUtil.floor(y);
    }
    
    default int getCellZ(final double x, final double y, final double z) {
        return MathUtil.floor(z);
    }
    
    void nearest2D(final int p0, final double p1, final double p2, final int p3, final int p4, final ResultBuffer.ResultBuffer2d p5, final PointEvaluator p6);
    
    void nearest3D(final int p0, final double p1, final double p2, final double p3, final int p4, final int p5, final int p6, final ResultBuffer.ResultBuffer3d p7, final PointEvaluator p8);
    
    void transition2D(final int p0, final double p1, final double p2, final int p3, final int p4, final ResultBuffer.ResultBuffer2d p5, final PointEvaluator p6);
    
    void transition3D(final int p0, final double p1, final double p2, final double p3, final int p4, final int p5, final int p6, final ResultBuffer.ResultBuffer3d p7, final PointEvaluator p8);
    
    void evalPoint(final int p0, final double p1, final double p2, final int p3, final int p4, final ResultBuffer.ResultBuffer2d p5, final PointEvaluator p6);
    
    void evalPoint(final int p0, final double p1, final double p2, final double p3, final int p4, final int p5, final int p6, final ResultBuffer.ResultBuffer3d p7, final PointEvaluator p8);
    
    void evalPoint2(final int p0, final double p1, final double p2, final int p3, final int p4, final ResultBuffer.ResultBuffer2d p5, final PointEvaluator p6);
    
    void evalPoint2(final int p0, final double p1, final double p2, final double p3, final int p4, final int p5, final int p6, final ResultBuffer.ResultBuffer3d p7, final PointEvaluator p8);
    
     <T> void collect(final int p0, final int p1, final int p2, final int p3, final int p4, final int p5, final ResultBuffer.Bounds2d p6, final T p7, final PointConsumer<T> p8, final PointEvaluator p9);
}
