private void RemoveCityDistrictType(string settings) { DistrictSettings found = null; int i = 0; foreach (var dis in DistrictSettings) { if (dis.Type == settings) { found = dis; } i++; } if (found == null) { return; } _districtColors.RemoveAt(i); DistrictSettings.Remove(found); //RaisePropertyChanged("DistrictSettings"); }
/// <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(); }
private void AddNewCityDistrictType(string settings) { foreach (var dis in DistrictSettings) { if (dis.Type == settings) { return; } } _districtColors.Add(Extensions.Extensions.RandomColor()); DistrictSettings.Add(new DistrictSettings(settings)); //RaisePropertyChanged("DistrictSettings"); }
public DistrictEditor(string type, EditorWindow parentWindow) { _parentWindow = parentWindow; ZoneType = type; _districtSettings = new DistrictSettings(type); }
/// <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> /// find all district cells with the same type and make a district from them /// </summary> private District CreateDistrict(DistrictSettings settings) { var district = new District {DistrictType = settings.Type }; //sort all cells by their district type //and generate the roads foreach (var dc in _districtCells) { //sort by type if (dc.DistrictType != district.DistrictType) { continue; } //add the cell district.Cells.Add(dc); //generate roads inside the district cell dc.Roads = _roadBuilder.BuildRoad(dc, _citySettings.GenerateInnerRoads, _citySettings.RoadSubdivision); //create buildings on each road foreach (var road in dc.Roads) { CreateBuildingOnRoad(road); } //debug mode only generates one full cell if(_citySettings.DebugMode) break; } return district; }