/// <summary>
        /// Generate land
        /// </summary>
        /// <param name="map"></param>
        public LandMap Generate(LandMap map)
        {
            foreach (var zoneMarkup in _land.Zones.Where(z => z.Cell.IsClosed))
            {
                ZoneGenerator generator = null;
                if (zoneMarkup.Type == ZoneType.Hills)
                    generator = new HillsGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type == ZoneType.Lake)
                    generator = new LakeGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type == ZoneType.Forest)
                    generator = new ForestGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type == ZoneType.Mountains)
                    generator = new MountainsGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type == ZoneType.Snow)
                    generator = new SnowGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type >= ZoneType.Hills && zoneMarkup.Type <= ZoneType.Lake)
                    generator = new DefaultGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type >= ZoneType.Influence1 && zoneMarkup.Type <= ZoneType.Influence8)
                    generator = new FlatGenerator(zoneMarkup, _land, _settings);
                else if(zoneMarkup.Type == ZoneType.Checkboard)
                    generator = new CheckboardGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type == ZoneType.Cone)
                    generator = new ConeGenerator(zoneMarkup, _land, _settings);
                else if (zoneMarkup.Type == ZoneType.Slope)
                    generator = new SlopeGenerator(zoneMarkup, _land, _settings);

                if (generator != null)
                {
                    var zoneMap = generator.Generate();
                    map.Add(zoneMap);
                }
            }

            return map;
        }
Exemplo n.º 2
0
        public LandMap GenerateMap(ILandSettings settings)
        {
            var time = Stopwatch.StartNew();

            //Land = new Land(Layout, settings);

            //Generate land's chunks
            var map = new LandMap(settings, LandLayout);
            var landGenerator = new LandGenerator(LandLayout, settings);
            Map = landGenerator.Generate(map);

            time.Stop();
            //Debug.Log(Land.GetStaticstics());
            Debug.Log(string.Format("Generate map {0} ms", time.ElapsedMilliseconds));

            return Map;
        }
Exemplo n.º 3
0
        public void MeshAndVisualize(LandMap landMap)
        {
            var timer = Stopwatch.StartNew();

            CreateZonesHandle(landMap.Layout.Zones);

            ChunkGO.Clear();

            //var mesher = new InfluenceMesher(this);
            //var mesher = new ColorMesher(this);
            var mesherSettings = GetComponent<MesherSettings>();
            var mesher = new TextureMesher(this, mesherSettings);
            //var mesh = mesher.Generate(landMap.Map[Vector2i.Zero], landMap.Map);
            //var go = ChunkGO.Create(landMap.Map[Vector2i.Zero], mesh);

            foreach (var chunk in landMap.Map)
            {
                var mesh = mesher.Generate(chunk.Value, landMap.Map);
                var go = ChunkGO.Create(chunk.Value, mesh);
                go.CreateFlora(this, chunk.Value.Flora);
                go.CreateStones(this, chunk.Value.Stones);
            }

            mesher.ReleaseRenderTextures();

            timer.Stop();

            Debug.LogFormat("Mesh generation {0} ms total", timer.ElapsedMilliseconds);
            Debug.LogFormat("Mesh generation timings: mesh {0} ms, texture {1} ms, {2} ops", mesher.MeshTimer.AvgTimeMs, mesher.TextureTimer.AvgTimeMs, mesher.TextureTimer.SamplesCount);
        }