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)); } }
public static Defines.GeneratorLayer[] GetRandomLayers(int seed, int layerNum) { Defines.GeneratorLayer[] result = new Defines.GeneratorLayer[layerNum]; var rng = new System.Random(seed); for (int i = 0; i < layerNum; i++) { result[i] = GetRandomLayer(rng); } return(result); }
public static Defines.GeneratorLayer GetRandomLayer(System.Random rng) { Defines.GeneratorLayer result = new Defines.GeneratorLayer { function = (GeneratingFunctionType2d)rng.Next( System.Enum.GetValues(typeof(GeneratingFunctionType2d)).Length), scale = rng.Next(5, 500), significance = (float)rng.NextDouble() % 1f, offset = new Vector2((float)rng.NextDouble(), (float)rng.NextDouble()) }; return(result); }