Ejemplo n.º 1
0
    public static System.Func <float, float, float> ChooseFunc(Defines.GeneratorLayer layerParams)
    {
        var scale    = layerParams.scale;
        var offset   = layerParams.offset;
        var funcType = layerParams.function;

        switch (funcType)
        {
        case GeneratingFunctionType2d.Sines:
            return((x, y) => GeneratorMethods2d.Sines(
                       (x + offset.x) / scale, (y + offset.y) / scale));

        case GeneratingFunctionType2d.DiagLines:
            return((x, y) => GeneratorMethods2d.DiagonalLines(
                       (x + offset.x), (y + offset.y), scale));

        case GeneratingFunctionType2d.Perlin:
            return((x, y) => GeneratorMethods2d.BasicPerlin(
                       (x + offset.x) / scale, (y + offset.y) / scale));

        case GeneratingFunctionType2d.Squares:
            return((x, y) => GeneratorMethods2d.Squares(
                       (x + offset.x) / scale, (y + offset.y) / scale));

        default:
            return((x, y) => 1 / ((x + offset.x) / scale + (y + offset.y) / scale));
        }
    }
Ejemplo n.º 2
0
    public static float[,] Generate(IEnumerable <Defines.GeneratorLayer> layerParams, Defines.MapParams mapSize, Vector3 globalScale)
    {
        float[,] result = new float[mapSize.width, mapSize.height];
        foreach (Defines.GeneratorLayer layer in layerParams)
        {
            System.Func <float, float, float> generatorMethod = GeneratorMethods2d.ChooseFunc(layer);
            float[,] map = HeightMapAssembler.AssembleHeightMap(mapSize, generatorMethod, globalScale);

            // prone to change when I find an elegant way of doing this (Zip?)
            for (int i = 0; i < mapSize.width; i++)
            {
                for (int j = 0; j < mapSize.height; j++)
                {
                    result[i, j] += map[i, j] * layer.significance;
                }
            }
        }

        Normalize(result);
        return(result);
    }