Generated Data for a city
示例#1
0
        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);
        }
示例#2
0
        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;
        }
示例#3
0
        /// <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);
            }


        }
示例#4
0
        /// <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();
        }
示例#5
0
        /// <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;
        }