Example #1
0
        internal static HeightMapModel Create(WorldModel world)
        {
            var terrainNames = TerrainType.GetTypes()
                               .OrderBy(x => x.BaseHeight)
                               .ToArray();

            var noiseMap = new LibNoise.Builder.NoiseMap(world.Width, world.Height)
            {
                BorderValue = 0.0f
            };

            var noise = new ImprovedPerlin()
            {
                Quality = LibNoise.NoiseQuality.Best,
                Seed    = DateTime.Now.Millisecond
            };
            var noiseBuilder = new LibNoise.Builder.NoiseMapBuilderPlane(0.0f, 3.0f, 0.0f, 3.0f, true)
            {
                SourceModule = new HybridMultiFractal
                {
                    Primitive3D = noise,
                    //Lacunarity = 1.8f,
                    //Frequency =2.0f
                },
                //SourceModule = new Turbulence
                //{
                //    Power = 0.125f,
                //    XDistortModule = noise,
                //    YDistortModule = noise,
                //    ZDistortModule = noise,
                //    SourceModule = new ScaleBias()
                //    {
                //        Scale = 10.0f,
                //        //Bias = 8.0f,
                //        SourceModule = new LibNoise.Modifier.Select(

                //            controlModule: new Pipe()
                //            {
                //                Frequency = 0.5f,
                //                Lacunarity = 0.25f,
                //                Primitive3D = noise
                //            },
                //            leftModule: new ScaleBias
                //            {
                //                Scale = 0.125f,
                //                Bias = -0.75f,
                //                SourceModule = new Billow
                //                {
                //                    Frequency = 2.0f,
                //                    Primitive3D = noise
                //                }
                //            },
                //            rightModule: new RidgedMultiFractal
                //            {
                //                Primitive3D = noise,
                //                Lacunarity = 2.0f,
                //            },
                //            edge: 0.125f,
                //            lower: 0.0f,
                //            upper: 1000.0f
                //        )
                //    }
                //},
                NoiseMap = noiseMap
            };


            noiseBuilder.SetSize(world.Width, world.Height);

            noiseBuilder.Build();

            var heights = noiseMap.Share().Select(x => (double)x).ToList();

            //float max = 0.0f, min = 0.0f;
            //noiseMap.MinMax(out min, out max);

            return(new HeightMapModel
            {
                Heights = heights.ToArray(),
                TerrainTypes = heights.Select(x =>
                {
                    var selected = terrainNames.SkipWhile(terrain => terrain.BaseHeight <= x).FirstOrDefault();
                    return selected ?? terrainNames.Last();
                }).Select(x => x.Id).ToArray(),

                Width = world.Width,
                Height = world.Height
            });
        }
Example #2
0
        internal static HeightMapModel Create(WorldModel world)
        {
            var terrainNames = TerrainType.GetTypes()
                .OrderBy(x => x.BaseHeight)
                .ToArray();

            var noiseMap = new LibNoise.Builder.NoiseMap(world.Width, world.Height)
            {
                BorderValue = 0.0f
            };

            var noise = new ImprovedPerlin()
            {
                Quality = LibNoise.NoiseQuality.Best,
                Seed = DateTime.Now.Millisecond
            };
            var noiseBuilder = new LibNoise.Builder.NoiseMapBuilderPlane(0.0f, 3.0f, 0.0f, 3.0f, true)
            {
                SourceModule = new HybridMultiFractal
                {
                    Primitive3D = noise,
                    //Lacunarity = 1.8f,
                    //Frequency =2.0f
                },
                //SourceModule = new Turbulence
                //{
                //    Power = 0.125f,
                //    XDistortModule = noise,
                //    YDistortModule = noise,
                //    ZDistortModule = noise,
                //    SourceModule = new ScaleBias()
                //    {
                //        Scale = 10.0f,
                //        //Bias = 8.0f,
                //        SourceModule = new LibNoise.Modifier.Select(

                //            controlModule: new Pipe()
                //            {
                //                Frequency = 0.5f,
                //                Lacunarity = 0.25f,
                //                Primitive3D = noise
                //            },
                //            leftModule: new ScaleBias
                //            {
                //                Scale = 0.125f,
                //                Bias = -0.75f,
                //                SourceModule = new Billow
                //                {
                //                    Frequency = 2.0f,
                //                    Primitive3D = noise
                //                }
                //            },
                //            rightModule: new RidgedMultiFractal
                //            {
                //                Primitive3D = noise,
                //                Lacunarity = 2.0f,
                //            },
                //            edge: 0.125f,
                //            lower: 0.0f,
                //            upper: 1000.0f
                //        )
                //    }
                //},
                NoiseMap = noiseMap
            };

            noiseBuilder.SetSize(world.Width, world.Height);

            noiseBuilder.Build();

            var heights = noiseMap.Share().Select(x => (double)x).ToList();
            //float max = 0.0f, min = 0.0f;
            //noiseMap.MinMax(out min, out max);

            return new HeightMapModel
            {
                Heights = heights.ToArray(),
                TerrainTypes = heights.Select(x =>
                {
                    var selected = terrainNames.SkipWhile(terrain => terrain.BaseHeight <= x).FirstOrDefault();
                    return selected ?? terrainNames.Last();
                }).Select(x => x.Id).ToArray(),

                Width = world.Width,
                Height = world.Height
            };
        }