public static CityData GenerateCity(CitySettings settings, VoronoiDiagram voronoi) { if (voronoi.VoronoiCells.Count < 1) { return(null); } //Create helpers if none are created. if (_districtBuilder == null) { _districtBuilder = new DistrictBuilder(); } //Generate the city var cityData = new CityData(); voronoi.RefreshVoronoi(); //divide the city into districts cityData.Districts = _districtBuilder.CreateCityDistricts(settings, voronoi); cityData.Bounds = MathHelpers.GetCityBounds(cityData); return(cityData); }
public static CityData GenerateCity(CitySettings settings, VoronoiDiagram voronoi) { if (voronoi.VoronoiCells.Count < 1) return null; //Create helpers if none are created. if (_districtBuilder == null) { _districtBuilder = new DistrictBuilder(); } //Generate the city var cityData = new CityData(); voronoi.RefreshVoronoi(); //divide the city into districts cityData.Districts = _districtBuilder.CreateCityDistricts(settings,voronoi); cityData.Bounds = MathHelpers.GetCityBounds(cityData); return cityData; }
/// <summary> /// Convert the Voronoi Diagram into a city with roads and building zones /// </summary> private void GenerateCity() { if (_voronoiDiagram == null) { //GenerateVoronoi(); return; } //Settings for generation _citySettings.DistrictSettings = DistrictSettings.ToList(); _citySettings.GenerateInnerRoads = GenerateInnerRoads; _citySettings.RoadSubdivision = RoadSubdivisions; _citySettings.DebugMode = DebugMode.Value; //generate city var timer = Stopwatch.StartNew(); _cityData = CityBuilder.GenerateCity(_citySettings,_voronoiDiagram); timer.Stop(); //update timer var time = timer.ElapsedMilliseconds/1000.0; GenerationTimeText = $"City generated in {time} seconds."; //update canvas RefreshCanvas(); //InsetTesting var insetCells = new List<Cell>(); var points = new List<Point>(); foreach (var d in _cityData.Districts) { foreach (var c in d.Cells) { var cInset = c.Inset(20); insetCells.Add(cInset); //_drawService.DrawCell(c, Color.FromArgb(255, 120, 120, 120), true, true); points.AddRange(cInset.GenerateRandomPoints(9)); } } ////Draw foreach (var c in insetCells) { //_drawService.DrawCell(c, Color.FromArgb(255, 188, 188, 188), true, true); //Draw Triangulation var triangles = new BowyerWatsonGenerator().DelaunayTriangulation(c.Points); foreach (var t in triangles) { //_drawService.DrawTriangle(t, Colors.CornflowerBlue); } } foreach (var p in points) { _drawService.DrawPoint(p, 4, Colors.OrangeRed); } }
/// <summary> /// Initialize this viewModel /// </summary> public void Initialize(DrawService drawService) { //initialize draw service _drawService = drawService; //_drawService.OnClick += OnClick; //create empty voronoi Diagram _points = new List<Point>(); _voronoiDiagram = new VoronoiDiagram(); _cityData = new CityData(); _citySettings = new CitySettings(); //seed for random generation Seed = DateTime.Now.GetHashCode(); //store default settings foreach (var districtType in _districtTypes) { DistrictSettings.Add(new DistrictSettings(districtType)); break; } RaisePropertyChanged("DistrictSettings"); //debug for math test and drawing MathTesting(); }
/// <summary> /// Initialize with required data /// </summary> public void Initialize(Terrain terrain, CityData cityData, TerrainSettings terrainSettings, GameObject townParent, Dictionary<string, List<GameObject>> prefabs) { //store data _terrain = terrain; _cityData = cityData; _terrainSettings = terrainSettings; _buildingsPrefabsPerZone = prefabs; _townParent = townParent; _isInitialized = true; }