/// <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; }
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; }
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); }