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);
            }
        }
 public DistrictEditor(string type, EditorWindow parentWindow)
 {
     _parentWindow     = parentWindow;
     ZoneType          = type;
     _districtSettings = new DistrictSettings(type);
 }
        /// <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;
        }