├── license.txt ├── misc └── artlib.png ├── readme.md ├── screenshot.png └── src ├── .dockerignore ├── .gitignore ├── Dockerfile ├── Mirage.Urbanization.Charts ├── BaseChartDrawer.cs ├── ChartDrawerFactory.cs ├── GraphDefinition.cs ├── GraphDefinitions.cs ├── GraphSeries.cs ├── IChartDrawer.cs ├── License-LGPL.txt ├── Mirage.Urbanization.Charts.csproj ├── Properties │ └── AssemblyInfo.cs └── ZedGraphChartDrawer.cs ├── Mirage.Urbanization.Resources ├── AnimatedCellBitmapSet.cs ├── AnimatedCellBitmapSetLayers.cs ├── BaseBitmap.cs ├── BaseGrowthZoneTileAccessor.cs ├── BaseNetworkZoneTileAccessor.cs ├── BitmapExtensions.cs ├── BitmapObjects.cd ├── CellBitmap.cs ├── CellBitmapCluster.cs ├── CellBitmapNetwork.cs ├── CommercialGrowthZoneTileAccessor.cs ├── DatameterColourDefinitions.cs ├── DirectionalCellBitmap.cs ├── EmbeddedBitmapExtractor.cs ├── FramerateDelays.cs ├── GrowthZoneClusterTileInfo.cs ├── GrowthZoneHouseTileInfo.cs ├── GrowthZoneTileAccessor.cs ├── GrowthZoneTileCellInfo.cs ├── IBaseGrowthZoneTileAccessor.cs ├── IBaseNetworkZoneTileAccessor.cs ├── ITilesetAccessor.cs ├── IndustrialGrowthZoneTileAccessor.cs ├── IntersectingZoneTileAccessor.cs ├── IntersectingZones │ ├── RoadHigh │ │ ├── Frame1 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ ├── Frame2 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ ├── Frame3 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ ├── Frame4 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ └── Frame5 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ ├── RoadLow │ │ ├── Frame1 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ ├── Frame2 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ ├── Frame3 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ ├── Frame4 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ │ └── Frame5 │ │ │ ├── powernsroadew.png │ │ │ ├── railnsroadew.png │ │ │ └── waternsroadew.png │ ├── RoadNone │ │ ├── powernsroadew.png │ │ ├── railnsroadew.png │ │ └── waternsroadew.png │ ├── powernswaterew.png │ ├── railnspowerew.png │ └── railnswaterew.png ├── Mirage.Urbanization.Tilesets.csproj ├── NetworkZoneTileAccessor.cs ├── NetworkZones │ ├── Park │ │ ├── park.png │ │ ├── parke.png │ │ ├── parkew.png │ │ ├── parknw.png │ │ ├── parknwe.png │ │ └── parknwes.png │ ├── Power │ │ ├── power.png │ │ ├── powere.png │ │ ├── powerew.png │ │ ├── powernw.png │ │ ├── powernwe.png │ │ └── powernwes.png │ ├── Rail │ │ ├── rail.png │ │ ├── raile.png │ │ ├── railew.png │ │ ├── railnw.png │ │ ├── railnwe.png │ │ └── railnwes.png │ ├── RoadHigh │ │ ├── Frame1 │ │ │ ├── roadhigh.png │ │ │ ├── roadhighe.png │ │ │ ├── roadhighew.png │ │ │ ├── roadhighnw.png │ │ │ ├── roadhighnwe.png │ │ │ └── roadhighnwes.png │ │ ├── Frame2 │ │ │ ├── roadhigh.png │ │ │ ├── roadhighe.png │ │ │ ├── roadhighew.png │ │ │ ├── roadhighnw.png │ │ │ ├── roadhighnwe.png │ │ │ └── roadhighnwes.png │ │ ├── Frame3 │ │ │ ├── roadhigh.png │ │ │ ├── roadhighe.png │ │ │ ├── roadhighew.png │ │ │ ├── roadhighnw.png │ │ │ ├── roadhighnwe.png │ │ │ └── roadhighnwes.png │ │ ├── Frame4 │ │ │ ├── roadhigh.png │ │ │ ├── roadhighe.png │ │ │ ├── roadhighew.png │ │ │ ├── roadhighnw.png │ │ │ ├── roadhighnwe.png │ │ │ └── roadhighnwes.png │ │ └── Frame5 │ │ │ ├── roadhigh.png │ │ │ ├── roadhighe.png │ │ │ ├── roadhighew.png │ │ │ ├── roadhighnw.png │ │ │ ├── roadhighnwe.png │ │ │ └── roadhighnwes.png │ ├── RoadLow │ │ ├── Frame1 │ │ │ ├── roadlow.png │ │ │ ├── roadlowe.png │ │ │ ├── roadlowew.png │ │ │ ├── roadlownw.png │ │ │ ├── roadlownwe.png │ │ │ └── roadlownwes.png │ │ ├── Frame2 │ │ │ ├── roadlow.png │ │ │ ├── roadlowe.png │ │ │ ├── roadlowew.png │ │ │ ├── roadlownw.png │ │ │ ├── roadlownwe.png │ │ │ └── roadlownwes.png │ │ ├── Frame3 │ │ │ ├── roadlow.png │ │ │ ├── roadlowe.png │ │ │ ├── roadlowew.png │ │ │ ├── roadlownw.png │ │ │ ├── roadlownwe.png │ │ │ └── roadlownwes.png │ │ ├── Frame4 │ │ │ ├── roadlow.png │ │ │ ├── roadlowe.png │ │ │ ├── roadlowew.png │ │ │ ├── roadlownw.png │ │ │ ├── roadlownwe.png │ │ │ └── roadlownwes.png │ │ └── Frame5 │ │ │ ├── roadlow.png │ │ │ ├── roadlowe.png │ │ │ ├── roadlowew.png │ │ │ ├── roadlownw.png │ │ │ ├── roadlownwe.png │ │ │ └── roadlownwes.png │ ├── RoadNone │ │ ├── roadnone.png │ │ ├── roadnonee.png │ │ ├── roadnoneew.png │ │ ├── roadnonenw.png │ │ ├── roadnonenwe.png │ │ └── roadnonenwes.png │ ├── Water │ │ ├── water.png │ │ ├── watere.png │ │ ├── waterew.png │ │ ├── waternw.png │ │ ├── waternwe.png │ │ └── waternwes.png │ └── Wood │ │ ├── wood.png │ │ ├── woode.png │ │ ├── woodew.png │ │ ├── woodnw.png │ │ ├── woodnwe.png │ │ └── woodnwes.png ├── ParkZoneTileAccessor.cs ├── PowerZoneTileAccessor.cs ├── Properties │ └── AssemblyInfo.cs ├── RailZoneTileAccessor.cs ├── ResidentialGrowthZoneTileAccessor.cs ├── RoadHighZoneTileAccessor.cs ├── RoadIntersections.cs ├── RoadLowZoneTileAccessor.cs ├── RoadNoneZoneTileAccessor.cs ├── StaticZonesTileAccessor.cs ├── SynchronizedAnimationFramePicker.cs ├── Tiles │ ├── Cells │ │ ├── Commercial │ │ │ ├── q1_n1.png │ │ │ ├── q1_n2.png │ │ │ ├── q1_n3.png │ │ │ ├── q1_n4.png │ │ │ ├── q2_n1.png │ │ │ ├── q2_n2.png │ │ │ ├── q2_n3.png │ │ │ └── q2_n4.png │ │ ├── Industrial │ │ │ ├── q1_n1.png │ │ │ ├── q1_n2.png │ │ │ ├── q1_n3.png │ │ │ ├── q1_n4.png │ │ │ ├── q2_n1.png │ │ │ ├── q2_n2.png │ │ │ ├── q2_n3.png │ │ │ └── q2_n4.png │ │ └── Residential │ │ │ ├── q1_n1.png │ │ │ ├── q1_n2.png │ │ │ ├── q1_n3.png │ │ │ ├── q1_n4.png │ │ │ ├── q2_n1.png │ │ │ ├── q2_n2.png │ │ │ ├── q2_n3.png │ │ │ └── q2_n4.png │ ├── Clusters │ │ ├── GrowthZones │ │ │ ├── Commercial │ │ │ │ ├── d0_q0_n1_a1.png │ │ │ │ ├── d1_q1_n1_a1.png │ │ │ │ ├── d1_q1_n2_a1.png │ │ │ │ ├── d2_q1_n1_a1.png │ │ │ │ ├── d2_q1_n2_a1.png │ │ │ │ ├── d2_q1_n3_a1.png │ │ │ │ ├── d2_q1_n4_a1.png │ │ │ │ └── d2_q1_n5_a1.png │ │ │ ├── Industrial │ │ │ │ ├── d0_q0_n1_a1.png │ │ │ │ ├── d1_q1_n1_a1.png │ │ │ │ ├── d1_q1_n1_a2.png │ │ │ │ ├── d1_q1_n1_a3.png │ │ │ │ ├── d1_q1_n2_a1.png │ │ │ │ ├── d1_q1_n3_a1.png │ │ │ │ ├── d1_q1_n3_a2.png │ │ │ │ ├── d1_q1_n3_a3.png │ │ │ │ ├── d2_q1_n1_a1.png │ │ │ │ ├── d2_q1_n1_a2.png │ │ │ │ ├── d2_q1_n1_a3.png │ │ │ │ ├── d2_q1_n2_a1.png │ │ │ │ ├── d2_q1_n2_a2.png │ │ │ │ ├── d2_q1_n2_a3.png │ │ │ │ ├── d2_q1_n3_a1.png │ │ │ │ ├── d2_q1_n3_a2.png │ │ │ │ ├── d2_q1_n3_a3.png │ │ │ │ ├── d2_q1_n4_a1.png │ │ │ │ ├── d2_q1_n4_a2.png │ │ │ │ └── d2_q1_n4_a3.png │ │ │ └── Residential │ │ │ │ ├── d0_q0_n1_a1.png │ │ │ │ ├── d1_q1_n1_a1.png │ │ │ │ ├── d1_q1_n2_a1.png │ │ │ │ ├── d1_q1_n3_a1.png │ │ │ │ ├── d1_q1_n4_a1.png │ │ │ │ ├── d2_q1_n1_a1.png │ │ │ │ ├── d2_q1_n2_a1.png │ │ │ │ ├── d2_q1_n3_a1.png │ │ │ │ ├── d2_q1_n4_a1.png │ │ │ │ ├── d2_q1_n5_a1.png │ │ │ │ ├── d2_q1_n6_a1.png │ │ │ │ └── d2_q1_n7_a1.png │ │ └── StaticZones │ │ │ ├── AirportZoneClusterConsumption_1.png │ │ │ ├── AirportZoneClusterConsumption_2.png │ │ │ ├── AirportZoneClusterConsumption_3.png │ │ │ ├── AirportZoneClusterConsumption_4.png │ │ │ ├── CoalPowerPlantZoneClusterConsumption_1.png │ │ │ ├── CoalPowerPlantZoneClusterConsumption_2.png │ │ │ ├── CoalPowerPlantZoneClusterConsumption_3.png │ │ │ ├── CoalPowerPlantZoneClusterConsumption_4.png │ │ │ ├── FireStationZoneclusterConsumption.png │ │ │ ├── NuclearPowerPlantZoneClusterConsumption.png │ │ │ ├── PoliceStationZoneClusterConsumption.png │ │ │ ├── SeaPortZoneClusterConsumption.png │ │ │ ├── StadiumZoneClusterConsumption.png │ │ │ └── TrainStationZoneClusterConsumption.png │ └── Misc │ │ ├── noelectricity.png │ │ └── rubbish.png ├── TilesetAccessor.cs ├── VehicleBitmap.cs ├── VehicleBitmapAndPoint.cs ├── Vehicles │ ├── VehicleBitmaps.cs │ ├── airplane.png │ ├── shipanim1.png │ ├── shipanim2.png │ └── train.png ├── WaterZoneTileAccessor.cs ├── WoodZoneTileAccessor.cs ├── coal.png ├── park.png └── ship.png ├── Mirage.Urbanization.Simulation ├── AggregateExceptionExtensions.cs ├── BudgetComponentDefinition.cs ├── CityBudget.cs ├── CityBudgetValueChangedEventArgs.cs ├── CityCategoryDefinition.cs ├── CitySaveStateController.cs ├── CityServiceDefinition.cs ├── CityStatisticsUpdatedEventArgs.cs ├── CityStatisticsView.cs ├── Datameters │ ├── DataMeter.cs │ ├── DataMeterInstances.cs │ ├── DataMeterResult.cs │ ├── DataMeterValueCategory.cs │ ├── LandValueCalculator.cs │ └── ZoneInfoDataMeter.cs ├── EventArgsWithData.cs ├── ICityBudget.cs ├── ICityBudgetConfiguration.cs ├── IReadOnlyYearAndMonth.cs ├── ISimulationSession.cs ├── IYearAndMonth.cs ├── Mirage.Urbanization.Simulation.csproj ├── NeverEndingTask.cs ├── PersistedCityBudgetConfiguration.cs ├── Persistence │ ├── PersistedCityStatistics.cs │ ├── PersistedCityStatisticsCollection.cs │ ├── PersistedCityStatisticsWithFinancialData.cs │ ├── PersistedNumberSummary.cs │ └── PersistedSimulation.cs ├── Properties │ └── AssemblyInfo.cs ├── ReadOnlyYearAndMonth.cs ├── SimulationOptions.cs ├── SimulationSession.cs ├── TaxDefinition.cs ├── YearAndMonth.cs └── YearAndMonthWeekElapsedEventArgs.cs ├── Mirage.Urbanization.Test ├── DistanceTrackerTest.cs ├── Mirage.Urbanization.Test.csproj ├── PathfindingTest.cs ├── Properties │ └── AssemblyInfo.cs ├── RandomTerraformerTest.cs ├── ShipControllerTests.cs ├── TestCity.cs └── ZonesAndAreasTests.cs ├── Mirage.Urbanization.Web ├── App.config ├── CityBudgetPanelPublisher.cs ├── ClientMessages │ ├── CityBudgetState.cs │ ├── CityServiceState.cs │ ├── CityTaxState.cs │ ├── ClientZoneInfo.cs │ ├── ClientZonePoint.cs │ └── YearAndMonthChangedState.cs ├── Content │ └── themes │ │ └── base │ │ ├── accordion.css │ │ ├── all.css │ │ ├── autocomplete.css │ │ ├── base.css │ │ ├── button.css │ │ ├── core.css │ │ ├── datepicker.css │ │ ├── dialog.css │ │ ├── draggable.css │ │ ├── images │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_2e83ff_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_888888_256x240.png │ │ └── ui-icons_cd0a0a_256x240.png │ │ ├── menu.css │ │ ├── progressbar.css │ │ ├── resizable.css │ │ ├── selectable.css │ │ ├── selectmenu.css │ │ ├── slider.css │ │ ├── sortable.css │ │ ├── spinner.css │ │ ├── tabs.css │ │ ├── theme.css │ │ └── tooltip.css ├── GameServer.cs ├── GlobalSuppressions.cs ├── Mirage.Urbanization.Web.csproj ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ └── launchSettings.json ├── SimulationHub.cs ├── Startup.cs ├── TextureAtlas.cs ├── TilesetProvider.cs ├── Www │ ├── game │ │ ├── game.css │ │ └── game.js │ ├── icons │ │ ├── android-chrome-144x144.png │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-36x36.png │ │ ├── android-chrome-48x48.png │ │ ├── android-chrome-72x72.png │ │ ├── android-chrome-96x96.png │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── apple-touch-icon-57x57.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-72x72.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── apple-touch-icon-precomposed.png │ │ ├── apple-touch-icon.png │ │ ├── browserconfig.xml │ │ ├── favicon-16x16.png │ │ ├── favicon-194x194.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── manifest.json │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ └── mstile-70x70.png │ └── index.html └── libman.json ├── Mirage.Urbanization.WinForms ├── App.config ├── AreaRenderHelper.cs ├── BrushManager.cs ├── BudgetForm.Designer.cs ├── BudgetForm.cs ├── BudgetForm.resx ├── ControlExtensions.cs ├── EvaluationForm.Designer.cs ├── EvaluationForm.cs ├── EvaluationForm.resx ├── FormManager.cs ├── FormWithCityStatisticsEvent.cs ├── GraphicsManagerSelection.cs ├── IToolstripMenuOption.cs ├── ImageSharpExtensions.cs ├── LogWindow.Designer.cs ├── LogWindow.cs ├── LogWindow.resx ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── Mirage.Urbanization.WinForms.csproj ├── NewCityForm.Designer.cs ├── NewCityForm.cs ├── NewCityForm.resx ├── Overlay │ ├── OverlayOption.cs │ └── OverlaySelection.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── RectangleExtensions.cs ├── RenderZoneOptions.cs ├── Rendering │ ├── BaseGraphicsManagerWrapper.cs │ ├── BufferedGraphics │ │ └── BufferedGraphicsManagerWrapper.cs │ ├── GraphicsManagerWrapperOption.cs │ ├── IGraphicsManagerWrapper.cs │ ├── IGraphicsWrapper.cs │ └── SharpDx │ │ ├── ConverterAndCacher.cs │ │ └── DxGraphicsManagerWrapper.cs ├── SimulationRenderHelperFormManager.cs ├── StatisticsForm.Designer.cs ├── StatisticsForm.cs ├── StatisticsForm.resx ├── ToolstripMenuInitializer.cs ├── ToolstripMenuOptionChangedEventArgs.cs ├── WebServerForm.Designer.cs ├── WebServerForm.cs ├── WebServerForm.resx ├── ZoneRenderInfo.cs ├── ZoneSelectionPanelCreator.cs ├── ZoomMode.cs ├── dlgStart.Designer.cs ├── dlgStart.cs ├── dlgStart.resx └── urbanization.ico ├── Mirage.Urbanization.sln └── Mirage.Urbanization ├── Area.cs ├── AreaConsumptionResult.cs ├── AreaConsumptionResultEventArgs.cs ├── AreaOptions.cs ├── GetRelativeZoneInfoDelegate.cs ├── GrowthPathFinding ├── GrowthAlgorithmHighlightState.cs ├── GrowthZoneConnector.cs ├── GrowthZoneInfoPathNode.cs ├── HighlightState.cs └── IGrowthAlgorithmHighlightState.cs ├── GrowthZoneDemandThreshold.cs ├── IAreaConsumptionResult.cs ├── IAreaMessage.cs ├── ICityServiceStrengthLevels.cs ├── IEnumerableExtensions.cs ├── IGrowthZoneDemandThreshold.cs ├── ILandValueCalculator.cs ├── IReadOnlyArea.cs ├── IReadOnlyZoneConsumptionState.cs ├── IReadOnlyZoneInfo.cs ├── IZoneConsumptionState.cs ├── IZoneInfo.cs ├── IZoneInfoPathNode.cs ├── LogEventArgs.cs ├── Logger.cs ├── LoopBatchEnumerator.cs ├── Mirage.Urbanization.csproj ├── Networks ├── BaseZoneNetworkInfo.cs └── PowerNetworkInfo.cs ├── Persistence ├── PersistedArea.cs └── PersistedZoneConsumption.cs ├── PipeOperator.cs ├── ProcessOptions.cs ├── Properties └── AssemblyInfo.cs ├── RandomTerraformer.cs ├── RelativeZoneInfoQuery.cs ├── RuntimeInspection.cs ├── SimpleCache.cs ├── SimulationSessionHotMessageEventArgs.cs ├── SimulationSessionMessageEventArgs.cs ├── Statistics ├── BaseStatisticsCollection.cs ├── CityServiceStatistics.cs ├── GrowthZoneNetworkStatistics.cs ├── GrowthZoneStatistics.cs ├── ICityServicesStatistics.cs ├── IGrowthZoneNetworkStatistics.cs ├── INetworkStatistics.cs ├── IPowerGridNetworkStatistics.cs ├── IPowerGridStatistics.cs ├── IRailroadInfrastructureStatistics.cs ├── IRoadInfrastructureStatistics.cs ├── MiscCityStatistics.cs ├── PowerGridNetworkStatistics.cs ├── PowerGridStatistics.cs ├── RailroadInfrastructureStatistics.cs └── RoadInfrastructureStatistics.cs ├── StringExtensions.cs ├── TerraformingOptions.cs ├── Tiles ├── airport.png ├── clear.png ├── coalpowerplant.png ├── commercial.png ├── factory.png ├── firestation.png ├── nuclearpowerplant.png ├── park.png ├── police.png ├── powerline.png ├── railroad.png ├── residential.png ├── road.png ├── seaport.png ├── stadium.png ├── trainstation.png ├── water.png └── woodland.png ├── Vehicles ├── AirplaneController.cs ├── BaseStructureVehicleController.cs ├── BaseVehicle.cs ├── BaseVehicleController.cs ├── IAirplane.cs ├── IMoveableVehicle.cs ├── IShip.cs ├── ITrain.cs ├── IVehicle.cs ├── IVehicleController.cs ├── ShipController.cs └── TrainController.cs ├── ZoneConsumption ├── AirportZoneClusterConsumption.cs ├── Base │ ├── AreaZoneConsumptionOverrideInfoResult.cs │ ├── BaseGrowthZoneClusterConsumption.cs │ ├── BaseImplementedZoneClusterConsumption.cs │ ├── BaseNetworkZoneConsumption.cs │ ├── BaseZoneClusterConsumption.cs │ ├── BaseZoneConsumption.cs │ ├── Behaviours │ │ ├── BaseDynamicBehaviour.cs │ │ ├── DynamicCrimeBehaviour.cs │ │ ├── DynamicPollutionBehaviour.cs │ │ ├── ElectricityConsumerBehaviour.cs │ │ ├── ElectricitySupplierBehaviour.cs │ │ ├── IBehaviour.cs │ │ ├── IElectricityBehaviour.cs │ │ ├── IElectricityConsumer.cs │ │ ├── IElectricitySupplier.cs │ │ └── IPollutionBehaviour.cs │ ├── ConsumeAreaOperation.cs │ ├── IAreaConsumption.cs │ ├── IAreaObjectWithSeed.cs │ ├── IAreaZoneClusterConsumption.cs │ ├── IAreaZoneConsumption.cs │ ├── IConsumeAreaOperation.cs │ ├── IGetCanOverrideWithResult.cs │ ├── IIntersectingZoneConsumption.cs │ ├── IntersectingZoneConsumption.cs │ ├── StaticZoneClusterConsumption.cs │ ├── ZoneClusterMemberConsumption.cs │ └── ZoneNeighborNavigator.cs ├── CoalPowerPlantZoneClusterConsumption.cs ├── CommercialZoneClusterConsumption.cs ├── EmptyZoneConsumption.cs ├── FireStationZoneclusterConsumption.cs ├── ISingleZoneConsumptionWithPollutionBehaviour.cs ├── IndustrialZoneClusterConsumption.cs ├── NuclearPowerPlantZoneClusterConsumption.cs ├── ParkZoneConsumption.cs ├── PoliceStationZoneClusterConsumption.cs ├── PowerLineConsumption.cs ├── RailRoadZoneConsumption.cs ├── ResidentialZoneClusterConsumption.cs ├── RoadZoneConsumption.cs ├── RubbishZoneConsumption.cs ├── SeaPortZoneClusterConsumption.cs ├── StadiumZoneClusterConsumption.cs ├── TrafficDensity.cs ├── TrainStationZoneClusterConsumption.cs ├── WaterZoneConsumption.cs ├── WoodlandZoneConsumption.cs ├── ZoneClusterConsumptions.cd └── ZoneConsumptions.cd ├── ZoneConsumptionCompletedResult.cs ├── ZoneConsumptionFailedResult.cs ├── ZoneConsumptionResult.cs ├── ZoneConsumptionState.cs ├── ZoneConsumptions.cd ├── ZoneInfo.cs ├── ZoneInfoDistanceTracker.cs ├── ZoneInfoEventArgs.cs ├── ZoneInfoGrid.cs ├── ZoneInfoPathNode.cs ├── ZonePoint.cs ├── ZonePointExtensions.cs └── ZoneStatisticsQuerying ├── IQueryCellValueResult.cs ├── IQueryCrimeResult.cs ├── IQueryFireHazardResult.cs ├── IQueryLandValueResult.cs ├── IQueryPollutionResult.cs ├── QueryCellValueResult.cs ├── QueryCrimeResult.cs ├── QueryFireHazardResult.cs ├── QueryLandValueResult.cs ├── QueryPollutionResult.cs └── QueryResult.cs /license.txt: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2015-, Rob Wijkstra 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /misc/artlib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/misc/artlib.png -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/screenshot.png -------------------------------------------------------------------------------- /src/.dockerignore: -------------------------------------------------------------------------------- 1 | **/.classpath 2 | **/.dockerignore 3 | **/.env 4 | **/.git 5 | **/.gitignore 6 | **/.project 7 | **/.settings 8 | **/.toolstarget 9 | **/.vs 10 | **/.vscode 11 | **/*.*proj.user 12 | **/*.dbmdl 13 | **/*.jfm 14 | **/azds.yaml 15 | **/bin 16 | **/charts 17 | **/docker-compose* 18 | **/Dockerfile* 19 | **/node_modules 20 | **/npm-debug.log 21 | **/obj 22 | **/secrets.dev.yaml 23 | **/values.dev.yaml 24 | LICENSE 25 | README.md -------------------------------------------------------------------------------- /src/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env 2 | WORKDIR /app 3 | 4 | COPY . ./ 5 | RUN dotnet publish Mirage.Urbanization.Web -c Release -o out 6 | 7 | FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 8 | EXPOSE 80 9 | WORKDIR /app 10 | COPY --from=build-env /app/out . 11 | 12 | ENTRYPOINT ["dotnet", "Mirage.Urbanization.Web.dll"] -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Charts/ChartDrawerFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Charts 2 | { 3 | public static class ChartDrawerFactory 4 | { 5 | public static IChartDrawer Create() => new ZedGraphChartDrawer(); 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Charts/GraphSeries.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | using Mirage.Urbanization.Simulation.Persistence; 6 | 7 | namespace Mirage.Urbanization.Charts 8 | { 9 | public class GraphSeries 10 | { 11 | private readonly Func _valueGetterFunc; 12 | 13 | public GraphSeries(Func valueGetterFunc, string label, Color color) 14 | { 15 | _valueGetterFunc = valueGetterFunc; 16 | Label = label; 17 | Color = color; 18 | } 19 | 20 | public int GetValue(PersistedCityStatisticsWithFinancialData citytStatistics) => _valueGetterFunc(citytStatistics); 21 | 22 | public string Label { get; } 23 | 24 | public Color Color { get; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Charts/IChartDrawer.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Drawing; 3 | using Mirage.Urbanization.Simulation.Persistence; 4 | 5 | namespace Mirage.Urbanization.Charts 6 | { 7 | public interface IChartDrawer 8 | { 9 | Image Draw( 10 | GraphDefinition graphDefinition, 11 | IEnumerable statistics, 12 | Font font, 13 | Size size); 14 | } 15 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Charts/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("bb0c4ff4-50b5-4d4b-887c-20f9e0775d1a")] 12 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/BaseBitmap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.IO; 4 | using System.Threading; 5 | using SixLabors.ImageSharp; 6 | 7 | namespace Mirage.Urbanization.Tilesets 8 | { 9 | public abstract class BaseBitmap 10 | { 11 | public Image Bitmap { get; } 12 | 13 | public byte[] PngBytes => _getPngBytesLazy.Value; 14 | 15 | private readonly Lazy _getPngBytesLazy; 16 | 17 | protected BaseBitmap(Image bitmap) 18 | { 19 | if (bitmap == null) throw new ArgumentNullException(nameof(bitmap)); 20 | Bitmap = bitmap; 21 | 22 | _getPngBytesLazy = new Lazy(() => 23 | { 24 | using var ms = new MemoryStream(); 25 | Bitmap.SaveAsPng(ms); 26 | return ms.ToArray(); 27 | }); 28 | var x = _getPngBytesLazy.Value; 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/CellBitmap.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Text; 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using Mirage.Urbanization.ZoneConsumption.Base; 6 | using SixLabors.ImageSharp; 7 | 8 | namespace Mirage.Urbanization.Tilesets 9 | { 10 | public class CellBitmap : BaseBitmap 11 | { 12 | private static int _idCounter = default(int); 13 | public int Id { get; } 14 | public CellBitmap(Image bitmap) : base(bitmap) 15 | { 16 | Id = Interlocked.Increment(ref _idCounter); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/CellBitmapCluster.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Drawing; 3 | 4 | namespace Mirage.Urbanization.Tilesets 5 | { 6 | public class CellBitmapCluster 7 | { 8 | public IDictionary Bitmaps { get; } 9 | 10 | public CellBitmapCluster(IDictionary bitmaps) 11 | { 12 | Bitmaps = bitmaps; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/CommercialGrowthZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class CommercialGrowthZoneTileAccessor : BaseGrowthZoneTileAccessor 6 | { 7 | public override string Namespace => "Commercial"; 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/DirectionalCellBitmap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Mirage.Urbanization.Tilesets 5 | { 6 | public class DirectionalCellBitmap 7 | { 8 | public AnimatedCellBitmapSetLayers Up { get; } 9 | public AnimatedCellBitmapSetLayers Down { get; } 10 | public AnimatedCellBitmapSetLayers Right { get; } 11 | public AnimatedCellBitmapSetLayers Left { get; } 12 | 13 | public DirectionalCellBitmap(AnimatedCellBitmapSetLayers cellBitmapSet) 14 | { 15 | Up = cellBitmapSet ?? throw new ArgumentNullException(nameof(cellBitmapSet)); 16 | Right = Up.Generate90DegreesRotatedClone(); 17 | Down = Right.Generate90DegreesRotatedClone(); 18 | Left = Down.Generate90DegreesRotatedClone(); 19 | } 20 | 21 | public IEnumerable GetAll() 22 | { 23 | yield return Up; 24 | yield return Down; 25 | yield return Left; 26 | yield return Right; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/FramerateDelays.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Tilesets 2 | { 3 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/GrowthZoneHouseTileInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using Mirage.Urbanization.ZoneStatisticsQuerying; 4 | 5 | namespace Mirage.Urbanization.Tilesets 6 | { 7 | public class GrowthZoneHouseTileInfo 8 | { 9 | public GrowthZoneHouseTileInfo(string resourceName) 10 | { 11 | var fileName = resourceName.Split('.').Reverse().Skip(1).Take(1).First(); 12 | //q1n1a1.png 13 | var segments = fileName.Split('_'); 14 | 15 | Quality = Convert.ToInt32(segments[0].Substring(1)); 16 | Number = Convert.ToInt32(segments[1].Substring(1)); 17 | } 18 | 19 | public int Quality { get; } 20 | public int Number { get; } 21 | 22 | public string Id => string.Join("_", Quality, Number); 23 | 24 | public override bool Equals(object obj) 25 | { 26 | return (obj as GrowthZoneHouseTileInfo).ToQueryResult() 27 | .WithResultIfHasMatch(x => Id == x.Id, false); 28 | } 29 | 30 | public override int GetHashCode() 31 | { 32 | return Id.GetHashCode(); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/GrowthZoneTileCellInfo.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneStatisticsQuerying; 2 | using SixLabors.Primitives; 3 | 4 | namespace Mirage.Urbanization.Tilesets 5 | { 6 | public class GrowthZoneTileCellInfo 7 | { 8 | public GrowthZoneTileCellInfo(GrowthZoneClusterTileInfo growthZoneClusterTileInfo, Point point) 9 | { 10 | GrowthZoneClusterTileInfo = growthZoneClusterTileInfo; 11 | Point = point; 12 | } 13 | 14 | public GrowthZoneClusterTileInfo GrowthZoneClusterTileInfo { get; } 15 | public Point Point { get; } 16 | 17 | public override int GetHashCode() 18 | { 19 | return (GrowthZoneClusterTileInfo.GroupId + Point.X + Point.Y).GetHashCode(); 20 | } 21 | 22 | public override bool Equals(object obj) 23 | { 24 | return (obj as GrowthZoneTileCellInfo) 25 | .ToQueryResult() 26 | .WithResultIfHasMatch(x => x.GetHashCode() == GetHashCode()); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IBaseGrowthZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Mirage.Urbanization.ZoneStatisticsQuerying; 3 | 4 | namespace Mirage.Urbanization.Tilesets 5 | { 6 | interface IBaseGrowthZoneTileAccessor 7 | { 8 | QueryResult GetFor(ZoneInfoSnapshot snapShot); 9 | IEnumerable GetAll(); 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IBaseNetworkZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Mirage.Urbanization.ZoneStatisticsQuerying; 3 | 4 | namespace Mirage.Urbanization.Tilesets 5 | { 6 | interface IBaseNetworkZoneTileAccessor 7 | { 8 | QueryResult GetFor(ZoneInfoSnapshot snapshot); 9 | IEnumerable GetAll(); 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/ITilesetAccessor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Drawing; 3 | using Mirage.Urbanization.Vehicles; 4 | using Mirage.Urbanization.ZoneStatisticsQuerying; 5 | 6 | namespace Mirage.Urbanization.Tilesets 7 | { 8 | public interface ITilesetAccessor 9 | { 10 | int TileWidthAndSizeInPixels { get; set; } 11 | Size GetAreaSize(IReadOnlyArea area); 12 | QueryResult TryGetBitmapFor(ZoneInfoSnapshot snapShot, bool includeNoElectricity); 13 | IEnumerable GetBitmapsAndPointsFor(IMoveableVehicle vehicle); 14 | Size ResizeToTileWidthAndSize(Size size); 15 | IEnumerable GetAll(); 16 | IEnumerable GetAllVehicleBitmaps(); 17 | } 18 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IndustrialGrowthZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class IndustrialGrowthZoneTileAccessor : BaseGrowthZoneTileAccessor 6 | { 7 | public override string Namespace => "Industrial"; 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame1/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame1/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame1/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame1/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame1/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame1/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame2/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame2/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame2/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame2/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame2/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame2/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame3/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame3/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame3/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame3/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame3/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame3/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame4/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame4/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame4/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame4/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame4/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame4/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame5/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame5/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame5/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame5/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame5/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadHigh/Frame5/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame1/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame1/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame1/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame1/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame1/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame1/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame2/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame2/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame2/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame2/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame2/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame2/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame3/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame3/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame3/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame3/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame3/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame3/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame4/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame4/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame4/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame4/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame4/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame4/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame5/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame5/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame5/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame5/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame5/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadLow/Frame5/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadNone/powernsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadNone/powernsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadNone/railnsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadNone/railnsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/RoadNone/waternsroadew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/RoadNone/waternsroadew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/powernswaterew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/powernswaterew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/railnspowerew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/railnspowerew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/IntersectingZones/railnswaterew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/IntersectingZones/railnswaterew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Park/park.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Park/park.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Park/parke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Park/parke.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Park/parkew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Park/parkew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Park/parknw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Park/parknw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Park/parknwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Park/parknwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Park/parknwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Park/parknwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Power/power.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Power/power.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Power/powere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Power/powere.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Power/powerew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Power/powerew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Power/powernw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Power/powernw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Power/powernwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Power/powernwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Power/powernwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Power/powernwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Rail/rail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Rail/rail.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Rail/raile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Rail/raile.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Rail/railew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Rail/railew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Rail/railnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Rail/railnw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Rail/railnwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Rail/railnwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Rail/railnwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Rail/railnwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhigh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhigh.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighnw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighnwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighnwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighnwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame1/roadhighnwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhigh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhigh.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighnw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighnwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighnwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighnwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame2/roadhighnwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhigh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhigh.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighnw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighnwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighnwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighnwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame3/roadhighnwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhigh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhigh.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighnw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighnwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighnwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighnwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame4/roadhighnwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhigh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhigh.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighnw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighnwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighnwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighnwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadHigh/Frame5/roadhighnwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlow.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlowe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlowe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlowew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlowew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlownw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlownw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlownwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlownwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlownwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame1/roadlownwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlow.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlowe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlowe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlowew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlowew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlownw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlownw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlownwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlownwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlownwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame2/roadlownwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlow.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlowe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlowe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlowew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlowew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlownw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlownw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlownwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlownwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlownwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame3/roadlownwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlow.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlowe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlowe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlowew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlowew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlownw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlownw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlownwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlownwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlownwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame4/roadlownwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlow.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlowe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlowe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlowew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlowew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlownw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlownw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlownwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlownwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlownwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadLow/Frame5/roadlownwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnone.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonee.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnoneew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnoneew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonenw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonenw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonenwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonenwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonenwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/RoadNone/roadnonenwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Water/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Water/water.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Water/watere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Water/watere.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Water/waterew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Water/waterew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Water/waternw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Water/waternw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Water/waternwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Water/waternwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Water/waternwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Water/waternwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Wood/wood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Wood/wood.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Wood/woode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Wood/woode.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodew.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodnw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodnw.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodnwe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodnwe.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodnwes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/NetworkZones/Wood/woodnwes.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/ParkZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class ParkZoneTileAccessor : BaseNetworkZoneTileAccessor 6 | { 7 | protected override string NetworkName => "Park"; 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/PowerZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | using Mirage.Urbanization.ZoneConsumption.Base; 3 | 4 | namespace Mirage.Urbanization.Tilesets 5 | { 6 | class PowerZoneTileAccessor : BaseNetworkZoneTileAccessor 7 | { 8 | protected override string NetworkName => "Power"; 9 | 10 | protected override bool IsConnected(IAreaZoneConsumption consumption) => consumption is ZoneClusterMemberConsumption; 11 | } 12 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("7363c588-edee-4088-9ed3-75d5839cb767")] 12 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/RailZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class RailZoneTileAccessor : BaseNetworkZoneTileAccessor 6 | { 7 | protected override string NetworkName => "Rail"; 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/ResidentialGrowthZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class ResidentialGrowthZoneTileAccessor : BaseGrowthZoneTileAccessor 6 | { 7 | public override string Namespace => "Residential"; 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/RoadHighZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class RoadHighZoneTileAccessor : BaseNetworkZoneTileAccessor 6 | { 7 | protected override FramerateDelay Delay => FramerateDelay.TrafficFramerate; 8 | protected override string NetworkName => "RoadHigh"; 9 | protected override bool Filter(ZoneInfoSnapshot snapshot) => snapshot.TrafficDensity == TrafficDensity.High; 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/RoadLowZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class RoadLowZoneTileAccessor : BaseNetworkZoneTileAccessor 6 | { 7 | protected override FramerateDelay Delay => FramerateDelay.TrafficFramerate; 8 | protected override string NetworkName => "RoadLow"; 9 | protected override bool Filter(ZoneInfoSnapshot snapshot) => snapshot.TrafficDensity == TrafficDensity.Low; 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/RoadNoneZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class RoadNoneZoneTileAccessor : BaseNetworkZoneTileAccessor 6 | { 7 | protected override string NetworkName => "RoadNone"; 8 | protected override bool Filter(ZoneInfoSnapshot snapshot) => snapshot.TrafficDensity == TrafficDensity.None; 9 | } 10 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q1_n4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Commercial/q2_n4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q1_n4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Industrial/q2_n4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q1_n4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Cells/Residential/q2_n4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d0_q0_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d0_q0_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d1_q1_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d1_q1_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d1_q1_n2_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d1_q1_n2_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n2_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n2_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n3_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n3_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n4_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n4_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n5_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Commercial/d2_q1_n5_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d0_q0_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d0_q0_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n1_a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n1_a2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n1_a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n1_a3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n2_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n2_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n3_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n3_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n3_a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n3_a2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n3_a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d1_q1_n3_a3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n1_a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n1_a2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n1_a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n1_a3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n2_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n2_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n2_a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n2_a2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n2_a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n2_a3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n3_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n3_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n3_a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n3_a2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n3_a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n3_a3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n4_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n4_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n4_a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n4_a2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n4_a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Industrial/d2_q1_n4_a3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d0_q0_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d0_q0_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n2_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n2_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n3_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n3_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n4_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d1_q1_n4_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n1_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n1_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n2_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n2_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n3_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n3_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n4_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n4_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n5_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n5_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n6_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n6_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n7_a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/GrowthZones/Residential/d2_q1_n7_a1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/AirportZoneClusterConsumption_4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_3.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/CoalPowerPlantZoneClusterConsumption_4.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/FireStationZoneclusterConsumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/FireStationZoneclusterConsumption.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/NuclearPowerPlantZoneClusterConsumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/NuclearPowerPlantZoneClusterConsumption.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/PoliceStationZoneClusterConsumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/PoliceStationZoneClusterConsumption.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/SeaPortZoneClusterConsumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/SeaPortZoneClusterConsumption.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/StadiumZoneClusterConsumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/StadiumZoneClusterConsumption.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/TrainStationZoneClusterConsumption.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Clusters/StaticZones/TrainStationZoneClusterConsumption.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Misc/noelectricity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Misc/noelectricity.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Tiles/Misc/rubbish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Tiles/Misc/rubbish.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/VehicleBitmap.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Threading; 3 | using SixLabors.ImageSharp; 4 | 5 | namespace Mirage.Urbanization.Tilesets 6 | { 7 | public class VehicleBitmap : BaseBitmap 8 | { 9 | private static int _idCounter = default(int); 10 | public int Id { get; } 11 | public VehicleBitmap(Image bitmap) : base(bitmap) 12 | { 13 | Id = Interlocked.Increment(ref _idCounter); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/VehicleBitmapAndPoint.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using Mirage.Urbanization.Vehicles; 3 | 4 | namespace Mirage.Urbanization.Tilesets 5 | { 6 | public class VehicleBitmapAndPoint 7 | { 8 | public VehicleBitmapAndPoint( 9 | VehicleBitmap bitmap, 10 | IReadOnlyZoneInfo second, 11 | IReadOnlyZoneInfo third, 12 | IVehicle vehicle) 13 | { 14 | Bitmap = bitmap; 15 | Second = second; 16 | Third = third; 17 | Vehicle = vehicle; 18 | } 19 | 20 | public IReadOnlyZoneInfo Second { get; } 21 | public IReadOnlyZoneInfo Third { get; } 22 | public VehicleBitmap Bitmap { get; } 23 | public IVehicle Vehicle { get; } 24 | } 25 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Vehicles/airplane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Vehicles/airplane.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Vehicles/shipanim1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Vehicles/shipanim1.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Vehicles/shipanim2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Vehicles/shipanim2.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/Vehicles/train.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/Vehicles/train.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/WoodZoneTileAccessor.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption; 2 | 3 | namespace Mirage.Urbanization.Tilesets 4 | { 5 | class WoodZoneTileAccessor : BaseNetworkZoneTileAccessor 6 | { 7 | protected override string NetworkName => "Wood"; 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/coal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/coal.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/park.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/park.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Resources/ship.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Resources/ship.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/AggregateExceptionExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Threading.Tasks; 4 | 5 | namespace Mirage.Urbanization.Simulation 6 | { 7 | public static class AggregateExceptionExtensions 8 | { 9 | public static bool IsCancelled(this AggregateException aggregateException) 10 | { 11 | if (aggregateException.InnerExceptions.All(x => x.GetType() == typeof(TaskCanceledException)) || 12 | aggregateException.InnerExceptions.All(x => 13 | { 14 | var t = x as AggregateException; 15 | return t != null && 16 | t.InnerExceptions.All(y => y.GetType() == typeof(TaskCanceledException)); 17 | })) 18 | { 19 | return true; 20 | } 21 | return false; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/CityBudgetValueChangedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.Simulation 4 | { 5 | public class CityBudgetValueChangedEventArgs : EventArgsWithData 6 | { 7 | public CityBudgetValueChangedEventArgs(ICityBudget cityBudget) 8 | : base(cityBudget) 9 | { 10 | 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/CityStatisticsUpdatedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Mirage.Urbanization.Simulation.Persistence; 3 | 4 | namespace Mirage.Urbanization.Simulation 5 | { 6 | public class CityStatisticsUpdatedEventArgs : EventArgsWithData 7 | { 8 | public CityStatisticsUpdatedEventArgs(PersistedCityStatisticsWithFinancialData data) : base(data) { } 9 | } 10 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/Datameters/DataMeterResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Simulation.Datameters 2 | { 3 | public struct DataMeterResult 4 | { 5 | private readonly DataMeter _dataMeter; 6 | 7 | public DataMeterResult( 8 | DataMeter dataMeter, 9 | int amount, 10 | decimal percentageScore, 11 | DataMeterValueCategory valueCategory 12 | ) 13 | { 14 | _dataMeter = dataMeter; 15 | PercentageScore = percentageScore; 16 | ValueCategory = valueCategory; 17 | Amount = amount; 18 | } 19 | 20 | public string Name => _dataMeter.Name; 21 | 22 | public int WebId => _dataMeter.WebId; 23 | 24 | public decimal PercentageScore { get; } 25 | 26 | public string PercentageScoreString => PercentageScore.ToString("P"); 27 | public DataMeterValueCategory ValueCategory { get; } 28 | 29 | public int Amount { get; } 30 | } 31 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/Datameters/DataMeterValueCategory.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Simulation.Datameters 2 | { 3 | public enum DataMeterValueCategory 4 | { 5 | VeryLow = 0, 6 | Low = 1, 7 | Medium = 2, 8 | High = 3, 9 | VeryHigh = 4 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/EventArgsWithData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.Simulation 4 | { 5 | public class EventArgsWithData : EventArgs 6 | where TEventData : class 7 | { 8 | public TEventData EventData { get; } 9 | 10 | public EventArgsWithData(TEventData data) 11 | { 12 | EventData = data ?? throw new ArgumentNullException(nameof(data)); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/ICityBudget.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Mirage.Urbanization.Simulation.Persistence; 3 | 4 | namespace Mirage.Urbanization.Simulation 5 | { 6 | public interface ICityBudget 7 | { 8 | int CurrentAmount { get; } 9 | 10 | string CurrentAmountDescription { get; } 11 | 12 | int ProjectedIncome { get; } 13 | 14 | string ProjectedIncomeDescription { get; } 15 | PersistedCityStatisticsWithFinancialData ProcessFinances(PersistedCityStatistics persistedCityStatistics, ICityBudgetConfiguration cityBudget); 16 | void AddProjectedIncomeToCurrentAmount(); 17 | event EventHandler OnCityBudgetValueChanged; 18 | void RaiseCityBudgetValueChangedEvent(); 19 | 20 | void RestoreFrom(PersistedCityStatisticsWithFinancialData persistedCityStatisticsWithFinancialData); 21 | 22 | void Handle(IAreaConsumptionResult areaConsumptionResult); 23 | } 24 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/ICityBudgetConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Simulation 2 | { 3 | public interface ICityBudgetConfiguration 4 | { 5 | decimal ResidentialTaxRate { get; set; } 6 | decimal CommercialTaxRate { get; set; } 7 | decimal IndustrialTaxRate { get; set; } 8 | 9 | decimal RoadInfrastructureServiceRate { get; set; } 10 | decimal RailroadInfrastructureServiceRate { get; set; } 11 | decimal PoliceServiceRate { get; set; } 12 | decimal FireDepartmentServiceRate { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/IReadOnlyYearAndMonth.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Simulation 2 | { 3 | public interface IReadOnlyYearAndMonth 4 | { 5 | bool IsAtBeginningOfNewYear { get; } 6 | string GetCurrentDescription(); 7 | int CurrentYear { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/IYearAndMonth.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.Simulation 4 | { 5 | public interface IYearAndMonth : IReadOnlyYearAndMonth 6 | { 7 | event EventHandler OnWeekElapsed; 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/Mirage.Urbanization.Simulation.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {5A699402-01AE-484E-A489-FD500E868A0C} 4 | netcoreapp3.1 5 | Mirage.Urbanization.Simulation 6 | Mirage.Urbanization.Simulation 7 | Copyright © 2014 8 | false 9 | bin\$(Configuration)\ 10 | 11 | 12 | full 13 | 14 | 15 | pdbonly 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/PersistedCityBudgetConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.Simulation 4 | { 5 | public class PersistedCityBudgetConfiguration : ICityBudgetConfiguration, ICityServiceStrengthLevels 6 | { 7 | public decimal ResidentialTaxRate { get; set; } = TaxDefinition.DefaultTaxRate; 8 | public decimal CommercialTaxRate { get; set; } = TaxDefinition.DefaultTaxRate; 9 | public decimal IndustrialTaxRate { get; set; } = TaxDefinition.DefaultTaxRate; 10 | public decimal PoliceServiceRate { get; set; } = 1M; 11 | public decimal FireDepartmentServiceRate { get; set; } = 1M; 12 | public decimal RoadInfrastructureServiceRate { get; set; } = 1M; 13 | public decimal RailroadInfrastructureServiceRate { get; set; } = 1M; 14 | 15 | decimal ICityServiceStrengthLevels.PoliceStrength => PoliceServiceRate; 16 | decimal ICityServiceStrengthLevels.FireSquadStrength => FireDepartmentServiceRate; 17 | decimal ICityServiceStrengthLevels.RoadInfrastructureStrength => RoadInfrastructureServiceRate; 18 | decimal ICityServiceStrengthLevels.RailroadInfrastructureStrength => RailroadInfrastructureServiceRate; 19 | } 20 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/Persistence/PersistedNumberSummary.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.Statistics; 2 | 3 | namespace Mirage.Urbanization.Simulation.Persistence 4 | { 5 | public class PersistedNumberSummary 6 | { 7 | public static readonly PersistedNumberSummary EmptyInstance = new PersistedNumberSummary(); 8 | 9 | public PersistedNumberSummary() 10 | { 11 | 12 | } 13 | 14 | public PersistedNumberSummary(INumberSummary summary) 15 | { 16 | Count = summary.Count; 17 | Sum = summary.Sum; 18 | Max = summary.Highest; 19 | Min = summary.Lowest; 20 | Average = summary.Average; 21 | } 22 | 23 | public int Count { get; set; } 24 | public int Sum { get; set; } 25 | public int Max { get; set; } 26 | public int Min { get; set; } 27 | public int Average { get; set; } 28 | } 29 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/Persistence/PersistedSimulation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Mirage.Urbanization.Persistence; 7 | 8 | namespace Mirage.Urbanization.Simulation.Persistence 9 | { 10 | public class PersistedSimulation 11 | { 12 | public PersistedCityBudgetConfiguration PersistedCityBudgetConfiguration { get; set; } 13 | public PersistedArea PersistedArea { get; set; } 14 | public PersistedCityStatisticsWithFinancialData[] PersistedCityStatistics { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("c4b1f271-cb3d-42f6-82ac-a89256ebf059")] 12 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Simulation/YearAndMonthWeekElapsedEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Simulation 2 | { 3 | public class YearAndMonthWeekElapsedEventArgs : EventArgsWithData 4 | { 5 | public YearAndMonthWeekElapsedEventArgs(IYearAndMonth data) 6 | : base(data) 7 | { 8 | 9 | } 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Test/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("d2e674d5-23c7-4299-a3df-c00e03571a74")] 12 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/ClientMessages/CityBudgetState.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | 3 | namespace Mirage.Urbanization.Web.ClientMessages 4 | { 5 | public class CityBudgetState 6 | { 7 | public CityTaxState[] taxStates { get; set; } 8 | public CityServiceState[] cityServiceStates { get; set; } 9 | 10 | public CityTaxState totalTaxState => new CityTaxState 11 | { 12 | name = "Total tax income", 13 | projectedIncome = taxStates?.Sum(x => x.projectedIncome) ?? 0M 14 | }; 15 | 16 | public CityServiceState totalCityServiceState => new CityServiceState 17 | { 18 | name = "Total city service expenses", 19 | projectedExpenses = cityServiceStates?.Sum(x => x.projectedExpenses) ?? 0M 20 | }; 21 | 22 | public decimal TotalProjectedIncome => totalTaxState.projectedIncome - totalCityServiceState.projectedExpenses; 23 | } 24 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/ClientMessages/CityServiceState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Mirage.Urbanization.Web.ClientMessages 8 | { 9 | public class CityServiceState 10 | { 11 | public string name { get; set; } 12 | public decimal projectedExpenses { get; set; } 13 | public string currentRate { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/ClientMessages/CityTaxState.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Web.ClientMessages 2 | { 3 | public class CityTaxState 4 | { 5 | public string name { get; set; } 6 | public decimal projectedIncome { get; set; } 7 | public string currentRate { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/ClientMessages/ClientZonePoint.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Web 2 | { 3 | public struct ClientZonePoint 4 | { 5 | public int x { get; set; } 6 | public int y { get; set; } 7 | public string GetIdentityString() => $"{x}_{y}"; 8 | 9 | public static ClientZonePoint Create(ZonePoint zonePoint) => 10 | new ClientZonePoint 11 | { 12 | x = zonePoint.X, 13 | y = zonePoint.Y 14 | }; 15 | } 16 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/ClientMessages/YearAndMonthChangedState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Mirage.Urbanization.Web.ClientMessages 8 | { 9 | class YearAndMonthChangedState 10 | { 11 | public string yearAndMonthDescription { get; set; } 12 | public LabelAndValue[] overallLabelsAndValues { get; set; } 13 | public LabelAndValue[] cityBudgetLabelsAndValues { get; set; } 14 | public LabelAndValue[] issueLabelAndValues { get; set; } 15 | public LabelAndValue[] generalOpinion { get; set; } 16 | } 17 | 18 | class LabelAndValue 19 | { 20 | public string label { get; set; } 21 | public string value { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/accordion.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Accordion 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/accordion/#theming 10 | */ 11 | .ui-accordion .ui-accordion-header { 12 | display: block; 13 | cursor: pointer; 14 | position: relative; 15 | margin: 2px 0 0 0; 16 | padding: .5em .5em .5em .7em; 17 | min-height: 0; /* support: IE7 */ 18 | font-size: 100%; 19 | } 20 | .ui-accordion .ui-accordion-icons { 21 | padding-left: 2.2em; 22 | } 23 | .ui-accordion .ui-accordion-icons .ui-accordion-icons { 24 | padding-left: 2.2em; 25 | } 26 | .ui-accordion .ui-accordion-header .ui-accordion-header-icon { 27 | position: absolute; 28 | left: .5em; 29 | top: 50%; 30 | margin-top: -8px; 31 | } 32 | .ui-accordion .ui-accordion-content { 33 | padding: 1em 2.2em; 34 | border-top: 0; 35 | overflow: auto; 36 | } 37 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/all.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/category/theming/ 10 | */ 11 | @import "base.css"; 12 | @import "theme.css"; 13 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/autocomplete.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Autocomplete 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/autocomplete/#theming 10 | */ 11 | .ui-autocomplete { 12 | position: absolute; 13 | top: 0; 14 | left: 0; 15 | cursor: default; 16 | } 17 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/base.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/category/theming/ 10 | */ 11 | @import url("core.css"); 12 | 13 | @import url("accordion.css"); 14 | @import url("autocomplete.css"); 15 | @import url("button.css"); 16 | @import url("datepicker.css"); 17 | @import url("dialog.css"); 18 | @import url("draggable.css"); 19 | @import url("menu.css"); 20 | @import url("progressbar.css"); 21 | @import url("resizable.css"); 22 | @import url("selectable.css"); 23 | @import url("selectmenu.css"); 24 | @import url("sortable.css"); 25 | @import url("slider.css"); 26 | @import url("spinner.css"); 27 | @import url("tabs.css"); 28 | @import url("tooltip.css"); 29 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/draggable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Draggable 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | */ 9 | .ui-draggable-handle { 10 | -ms-touch-action: none; 11 | touch-action: none; 12 | } 13 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/selectable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Selectable 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | */ 9 | .ui-selectable { 10 | -ms-touch-action: none; 11 | touch-action: none; 12 | } 13 | .ui-selectable-helper { 14 | position: absolute; 15 | z-index: 100; 16 | border: 1px dotted black; 17 | } 18 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/sortable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Sortable 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | */ 9 | .ui-sortable-handle { 10 | -ms-touch-action: none; 11 | touch-action: none; 12 | } 13 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Content/themes/base/tooltip.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Tooltip 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/tooltip/#theming 10 | */ 11 | .ui-tooltip { 12 | padding: 8px; 13 | position: absolute; 14 | z-index: 9999; 15 | max-width: 300px; 16 | -webkit-box-shadow: 0 0 5px #aaa; 17 | box-shadow: 0 0 5px #aaa; 18 | } 19 | body .ui-tooltip { 20 | border-width: 2px; 21 | } 22 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("e80d47e8-22c1-4ce4-ac67-7f3ab2fcbfe7")] 12 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Mirage.Urbanization.Web": { 4 | "commandName": "Project" 5 | }, 6 | "Docker": { 7 | "commandName": "Docker" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/game/game.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | background-color: BurlyWood; 4 | font: 62.5% "Trebuchet MS", sans-serif; 5 | } 6 | 7 | .header-container { 8 | width: 100%; 9 | position: fixed; 10 | top: 0; 11 | text-align: left; 12 | } 13 | 14 | th { 15 | text-align: left; 16 | } 17 | 18 | .currencycol { 19 | text-align: right; 20 | } 21 | .currencycol span { 22 | float: left; 23 | } 24 | 25 | td { 26 | border: solid 1px #cd853f; 27 | padding: 0.5em 1em 0.5em; 28 | } 29 | 30 | #labelBar span { 31 | background-color: rgba(255,255,255,0.7); 32 | padding: 2px 10px; 33 | border: solid 1px #66C; 34 | margin-top: 14px; 35 | } 36 | 37 | #labelBar { 38 | padding-top: 0.5em; 39 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/android-chrome-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/android-chrome-144x144.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/android-chrome-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/android-chrome-36x36.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/android-chrome-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/android-chrome-48x48.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/android-chrome-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/android-chrome-72x72.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/android-chrome-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/android-chrome-96x96.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | #2b5797 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/favicon-16x16.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/favicon-194x194.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/favicon-194x194.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/favicon-32x32.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/favicon-96x96.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/favicon.ico -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Urbanization", 3 | "icons": [ 4 | { 5 | "src": "\/icons\/android-chrome-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/icons\/android-chrome-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/icons\/android-chrome-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/icons\/android-chrome-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/icons\/android-chrome-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/icons\/android-chrome-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/mstile-144x144.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/mstile-150x150.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/mstile-310x150.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/mstile-310x310.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/Www/icons/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.Web/Www/icons/mstile-70x70.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization.Web/libman.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "defaultProvider": "cdnjs", 4 | "libraries": [ 5 | { 6 | "library": "jquery@3.3.1", 7 | "destination": "Www/scripts/jquery/" 8 | }, 9 | { 10 | "library": "jqueryui@1.12.1", 11 | "destination": "Www/scripts/jqueryui/" 12 | }, 13 | { 14 | "library": "accounting.js@0.4.1", 15 | "destination": "Www/scripts/accountingjs/" 16 | }, 17 | { 18 | "library": "aspnet-signalr@1.1.4", 19 | "destination": "Www/scripts/signalr/" 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/ControlExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace Mirage.Urbanization.WinForms 4 | { 5 | public static class ControlExtensions 6 | { 7 | public static T AddControlTo(this T control, Control targetControl) 8 | where T : Control 9 | { 10 | targetControl.Controls.Add(control); 11 | return control; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/FormManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace Mirage.Urbanization.WinForms 5 | { 6 | class FormManager 7 | where TForm : Form 8 | { 9 | private readonly Func _factory; 10 | private TForm _currentFormInstance; 11 | 12 | public FormManager(Func factory) 13 | { 14 | _factory = factory; 15 | } 16 | 17 | public void Show(IWin32Window parent) 18 | { 19 | if (_currentFormInstance == null) 20 | { 21 | var instance = _factory(); 22 | 23 | instance.Closed += (x, y) => 24 | { 25 | _currentFormInstance.Dispose(); 26 | _currentFormInstance = null; 27 | }; 28 | 29 | _currentFormInstance = instance; 30 | _currentFormInstance.Show(parent); 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/GraphicsManagerSelection.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | using Mirage.Urbanization.WinForms.Rendering; 3 | 4 | namespace Mirage.Urbanization.WinForms 5 | { 6 | public class GraphicsManagerSelection : ToolstripMenuInitializer 7 | { 8 | public GraphicsManagerSelection(ToolStripMenuItem targetToopToolStripMenuItem) 9 | : base(targetToopToolStripMenuItem, GraphicsManagerWrapperOption.GetOptions()) 10 | { 11 | 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/IToolstripMenuOption.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.WinForms 2 | { 3 | public interface IToolstripMenuOption 4 | { 5 | string Name { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Overlay/OverlaySelection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace Mirage.Urbanization.WinForms.Overlay 5 | { 6 | public class OverlaySelection : ToolstripMenuInitializer 7 | { 8 | public OverlaySelection(ToolStripMenuItem targetToolstripMenuItem, Func toggleShowNumbersFunc) 9 | : base(targetToolstripMenuItem, OverlayOption.CreateOverlayOptionInstances(toggleShowNumbersFunc)) 10 | { 11 | 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace Mirage.Urbanization.WinForms 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry pointOne for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new MainForm()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("5b5b0506-8d72-4419-ae0a-874ca6801e28")] 12 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34209 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Mirage.Urbanization.WinForms.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/RectangleExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | 4 | namespace Mirage.Urbanization.WinForms 5 | { 6 | public static class RectangleExtensions 7 | { 8 | public static Rectangle InflateAndReturn(this Rectangle rectangle, int width, int height) 9 | { 10 | rectangle.Inflate(width, height); 11 | return rectangle; 12 | } 13 | public static Rectangle ChangeSize(this Rectangle rectangle, Size size) 14 | { 15 | rectangle.Size = size; 16 | return rectangle; 17 | } 18 | 19 | public static Rectangle Relocate(this Rectangle rectangle, Func relocateAction) 20 | { 21 | rectangle.Location = relocateAction(rectangle.Location); 22 | return rectangle; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Rendering/IGraphicsManagerWrapper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.WinForms.Rendering 4 | { 5 | public interface IGraphicsManagerWrapper : IDisposable 6 | { 7 | IGraphicsWrapper GetGraphicsWrapper(); 8 | void StartRendering(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Rendering/IGraphicsWrapper.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | 3 | namespace Mirage.Urbanization.WinForms.Rendering 4 | { 5 | public interface IGraphicsWrapper 6 | { 7 | void DrawImage(Bitmap bitmap, Rectangle rectangle); 8 | void FillRectangle(SolidBrush brush, Rectangle rectangle); 9 | 10 | void DrawString(string s, Font font, SolidBrush brush, RectangleF layoutRectangle); 11 | void DrawRectangle(Pen pen, Rectangle rectangle); 12 | } 13 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/Rendering/SharpDx/ConverterAndCacher.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Concurrent; 3 | 4 | namespace Mirage.Urbanization.WinForms.Rendering.SharpDx 5 | { 6 | public class ConverterAndCacher 7 | { 8 | private readonly ConcurrentDictionary _cache = new ConcurrentDictionary(); 9 | 10 | private readonly Func _converter; 11 | 12 | public ConverterAndCacher(Func converter) 13 | { 14 | _converter = converter; 15 | } 16 | 17 | public TOut Convert(TIn input) 18 | { 19 | if (_cache.TryGetValue(input, out TOut result)) return result; 20 | result = _converter(input); 21 | _cache.TryAdd(input, _converter(input)); 22 | return result; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/ToolstripMenuOptionChangedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.WinForms 4 | { 5 | public class ToolstripMenuOptionChangedEventArgs : EventArgs 6 | where TToolstripMenuOption : class, IToolstripMenuOption 7 | { 8 | public TToolstripMenuOption ToolstripMenuOption { get; } 9 | 10 | public ToolstripMenuOptionChangedEventArgs(TToolstripMenuOption toolstripMenuOption) 11 | { 12 | ToolstripMenuOption = toolstripMenuOption ?? throw new ArgumentNullException(nameof(toolstripMenuOption)); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/WebServerForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | using Mirage.Urbanization.Simulation; 11 | using Mirage.Urbanization.Web; 12 | 13 | namespace Mirage.Urbanization.WinForms 14 | { 15 | public partial class WebServerForm : Form 16 | { 17 | readonly GameServer _webServer; 18 | public WebServerForm(ISimulationSession simulationSession) 19 | { 20 | InitializeComponent(); 21 | this.FormClosing += WebServerForm_FormClosing; 22 | 23 | 24 | _webServer = new GameServer(simulationSession, "http://*:80/", false); 25 | _webServer.StartServer(); 26 | } 27 | 28 | private void WebServerForm_FormClosing(object sender, FormClosingEventArgs e) 29 | { 30 | _webServer.Dispose(); 31 | } 32 | 33 | private void button1_Click(object sender, EventArgs e) 34 | { 35 | this.Close(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/ZoomMode.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.WinForms 2 | { 3 | public enum ZoomMode 4 | { 5 | Full, 6 | Half 7 | } 8 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/dlgStart.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace Mirage.Urbanization.WinForms 12 | { 13 | public partial class dlgStart : Form 14 | { 15 | public dlgStart() 16 | { 17 | InitializeComponent(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization.WinForms/urbanization.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization.WinForms/urbanization.ico -------------------------------------------------------------------------------- /src/Mirage.Urbanization/AreaConsumptionResult.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using Mirage.Urbanization.ZoneConsumption; 4 | using Mirage.Urbanization.ZoneConsumption.Base; 5 | 6 | namespace Mirage.Urbanization 7 | { 8 | internal class AreaConsumptionResult : IAreaConsumptionResult 9 | { 10 | public bool Success { get; } 11 | public string Message { get; } 12 | public IAreaConsumption AreaConsumption { get; } 13 | 14 | public AreaConsumptionResult(IAreaConsumption areaConsumption, bool success, string message) 15 | { 16 | AreaConsumption = areaConsumption; 17 | Message = message; 18 | Success = success; 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/AreaConsumptionResultEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public class AreaConsumptionResultEventArgs : EventArgs 6 | { 7 | public IAreaConsumptionResult AreaConsumptionResult { get; } 8 | 9 | public AreaConsumptionResultEventArgs(IAreaConsumptionResult areaConsumptionResult) 10 | { 11 | AreaConsumptionResult = areaConsumptionResult ?? throw new ArgumentNullException(nameof(areaConsumptionResult)); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/GetRelativeZoneInfoDelegate.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneStatisticsQuerying; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public delegate QueryResult GetRelativeZoneInfoDelegate(RelativeZoneInfoQuery relativeZoneInfoQuery); 6 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/GrowthPathFinding/GrowthAlgorithmHighlightState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.GrowthPathFinding 4 | { 5 | internal class GrowthAlgorithmHighlightState : IGrowthAlgorithmHighlightState 6 | { 7 | private DateTime _lastChange = DateTime.Now; 8 | 9 | private HighlightState _lastHighlightState; 10 | 11 | public HighlightState Current => _lastChange > DateTime.Now.AddMilliseconds(-40) 12 | ? _lastHighlightState 13 | : HighlightState.None; 14 | 15 | public void SetState(HighlightState highlightState) 16 | { 17 | _lastHighlightState = highlightState; 18 | _lastChange = DateTime.Now; 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/GrowthPathFinding/HighlightState.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.GrowthPathFinding 2 | { 3 | public enum HighlightState 4 | { 5 | None, 6 | Examined, 7 | UsedAsPath 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/GrowthPathFinding/IGrowthAlgorithmHighlightState.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.GrowthPathFinding 2 | { 3 | public interface IGrowthAlgorithmHighlightState 4 | { 5 | HighlightState Current { get; } 6 | void SetState(HighlightState highlightState); 7 | } 8 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/IAreaConsumptionResult.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption.Base; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public interface IAreaConsumptionResult : IAreaMessage 6 | { 7 | bool Success { get; } 8 | IAreaConsumption AreaConsumption { get; } 9 | } 10 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/IAreaMessage.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization 2 | { 3 | public interface IAreaMessage 4 | { 5 | string Message { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ICityServiceStrengthLevels.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization 2 | { 3 | public interface ICityServiceStrengthLevels 4 | { 5 | decimal PoliceStrength { get; } 6 | decimal FireSquadStrength { get; } 7 | 8 | decimal RoadInfrastructureStrength { get; } 9 | 10 | decimal RailroadInfrastructureStrength { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/IGrowthZoneDemandThreshold.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using System.Threading.Tasks; 4 | using Mirage.Urbanization.ZoneConsumption.Base; 5 | 6 | namespace Mirage.Urbanization 7 | { 8 | internal interface IGrowthZoneDemandThreshold 9 | { 10 | bool DecrementAvailableConsumption(BaseZoneClusterConsumption baseZoneClusterConsumption); 11 | bool AvailableConsumptionsExceeded { get; } 12 | string OnExceededMessage { get; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ILandValueCalculator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Mirage.Urbanization.ZoneConsumption.Base; 7 | using Mirage.Urbanization.ZoneStatisticsQuerying; 8 | 9 | namespace Mirage.Urbanization 10 | { 11 | public interface ILandValueCalculator 12 | { 13 | QueryResult GetFor(IReadOnlyZoneInfo zoneInfo); 14 | 15 | IEnumerable GetUndesirabilityReasons(BaseGrowthZoneClusterConsumption baseGrowthZoneClusterConsumption); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/IReadOnlyArea.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using Mirage.Urbanization.Statistics; 6 | using Mirage.Urbanization.Vehicles; 7 | using Mirage.Urbanization.ZoneConsumption.Base; 8 | 9 | namespace Mirage.Urbanization 10 | { 11 | public interface IReadOnlyArea 12 | { 13 | int AmountOfZonesX { get; } 14 | int AmountOfZonesY { get; } 15 | 16 | IEnumerable EnumerateZoneInfos(); 17 | IEnumerable> GetSupportedZoneConsumptionFactories(); 18 | 19 | Task PerformGrowthSimulationCycle(CancellationToken cancellationToken); 20 | IPowerGridStatistics CalculatePowergridStatistics(); 21 | 22 | IVehicleController TrainController { get; } 23 | IVehicleController AirplaneController { get; } 24 | IVehicleController ShipController { get; } 25 | 26 | IEnumerable> EnumerateVehicleControllers(); 27 | } 28 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/IZoneConsumptionState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Mirage.Urbanization.ZoneConsumption.Base; 3 | using Mirage.Urbanization.ZoneStatisticsQuerying; 4 | 5 | namespace Mirage.Urbanization 6 | { 7 | public interface IZoneConsumptionState : IReadOnlyZoneConsumptionState 8 | { 9 | bool GetIsPowerGridMember(); 10 | bool GetIsRoadNetworkMember(); 11 | bool GetIsZoneClusterMember(); 12 | bool GetIsNetworkMember() 13 | where TBaseNetworkZoneConsumption : BaseInfrastructureNetworkZoneConsumption; 14 | 15 | bool GetIsWater(); 16 | QueryResult QueryAsZoneClusterMember(); 17 | 18 | void WithNetworkMember(Action action) 19 | where TBaseNetworkZoneConsumption : BaseInfrastructureNetworkZoneConsumption; 20 | 21 | IConsumeAreaOperation TryConsumeWith(IAreaZoneConsumption consumption); 22 | } 23 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/IZoneInfoPathNode.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Mirage.Urbanization 5 | { 6 | public interface IZoneInfoPathNode 7 | { 8 | IZoneInfoPathNode PreviousPathNode { get; } 9 | bool IsDestination { get; } 10 | int? DestinationHashCode { get; } 11 | IZoneInfo ZoneInfo { get; } 12 | int Distance { get; } 13 | bool GetIsPartOfParentCluster(); 14 | IEnumerable EnumerateAllChildPathNodes(); 15 | IEnumerable EnumeratePathBackwards(); 16 | IZoneInfoPathNode WithPathMembers(Action func); 17 | IZoneInfoPathNode WithDestination(Action func); 18 | } 19 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/LogEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public class LogEventArgs : EventArgs 6 | { 7 | public string LogMessage { get; } 8 | public DateTime CreatedOn { get; } = DateTime.Now; 9 | public LogEventArgs(string logMessage) 10 | { 11 | LogMessage = logMessage; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Logger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace Mirage.Urbanization 9 | { 10 | public class Logger 11 | { 12 | public static Logger Instance { get; } = new Logger(); 13 | public void WriteLine(object @object) 14 | { 15 | OnLogMessage?.Invoke(this, new LogEventArgs(@object.ToString())); 16 | } 17 | 18 | public event EventHandler OnLogMessage; 19 | 20 | const string EventSource = "Urbanization"; 21 | public void LogException(Exception exception, string operationDescription, int eventId) 22 | { 23 | OnLogMessage?.Invoke(this, new LogEventArgs($"Unhandled exception was thrown during '{operationDescription}': {exception}.")); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/LoopBatchEnumerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Mirage.Urbanization 8 | { 9 | public class LoopBatchEnumerator 10 | { 11 | private readonly IEnumerator _enumerator; 12 | public LoopBatchEnumerator(ICollection enumerable) 13 | { 14 | _enumerator = enumerable.GetEnumerator(); 15 | } 16 | 17 | public IEnumerable GetBatch() 18 | { 19 | foreach (var iteration in Enumerable.Range(0, 5)) 20 | { 21 | if (_enumerator.MoveNext()) 22 | yield return _enumerator.Current; 23 | else 24 | { 25 | _enumerator.Reset(); 26 | _enumerator.MoveNext(); 27 | yield return _enumerator.Current; 28 | } 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/PipeOperator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Mirage.Urbanization 8 | { 9 | public static class PipeOperator 10 | { 11 | public static void Pipe(this T input, Action action) => action(input); 12 | public static TR Pipe(this T input, Func action) => action(input); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ProcessOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public class ProcessOptions 6 | { 7 | private readonly Func _getStepByStepGrowthCyclingToggledFunc; 8 | private readonly Func _getIsMoneyCheatEnabledFunc; 9 | 10 | public ProcessOptions( 11 | Func getStepByStepGrowthCyclingToggledFunc, 12 | Func getIsMoneyCheatEnabledFunc) 13 | { 14 | _getStepByStepGrowthCyclingToggledFunc = getStepByStepGrowthCyclingToggledFunc ?? throw new ArgumentNullException(nameof(getStepByStepGrowthCyclingToggledFunc)); 15 | _getIsMoneyCheatEnabledFunc = getIsMoneyCheatEnabledFunc ?? throw new ArgumentNullException(nameof(getIsMoneyCheatEnabledFunc)); 16 | } 17 | 18 | public bool GetStepByStepGrowthCyclingToggled() 19 | { 20 | return _getStepByStepGrowthCyclingToggledFunc(); 21 | } 22 | 23 | public bool GetIsMoneyCheatEnabled() 24 | { 25 | return _getIsMoneyCheatEnabledFunc(); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Setting ComVisible to false makes the types in this assembly not visible 6 | // to COM components. If you need to access a type in this assembly from 7 | // COM, set the ComVisible attribute to true on that type. 8 | [assembly: ComVisible(false)] 9 | 10 | // The following GUID is for the ID of the typelib if this project is exposed to COM 11 | [assembly: Guid("4b1afd19-0a2d-455e-87a3-759672b2f553")] 12 | [assembly: InternalsVisibleTo("Mirage.Urbanization.Test")] 13 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/RelativeZoneInfoQuery.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public class RelativeZoneInfoQuery 6 | { 7 | public RelativeZoneInfoQuery(int relativeX, int relativeY) 8 | { 9 | RelativeX = relativeX; 10 | RelativeY = relativeY; 11 | } 12 | 13 | public int Distance => Math.Abs(RelativeX) + Math.Abs(RelativeY); 14 | 15 | public int RelativeY { get; } 16 | 17 | public int RelativeX { get; } 18 | } 19 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/RuntimeInspection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public static class RuntimeInspection 6 | { 7 | public static bool IsRunningOnMono() 8 | { 9 | return Type.GetType("Mono.Runtime") != null; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/SimulationSessionHotMessageEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization 2 | { 3 | public class SimulationSessionHotMessageEventArgs : SimulationSessionMessageEventArgs 4 | { 5 | public string Title { get; } 6 | 7 | public SimulationSessionHotMessageEventArgs(string title, string message) 8 | :base(message) 9 | { 10 | Title = title; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/SimulationSessionMessageEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public class SimulationSessionMessageEventArgs : EventArgs 6 | { 7 | public SimulationSessionMessageEventArgs(string message) 8 | { 9 | Message = message; 10 | } 11 | 12 | public string Message { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/BaseStatisticsCollection.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace Mirage.Urbanization.Statistics 5 | { 6 | internal abstract class BaseStatisticsCollection 7 | where TNetworkStatistics : INetworkStatistics 8 | { 9 | protected readonly IReadOnlyList NetworkStatistics; 10 | 11 | protected BaseStatisticsCollection(IEnumerable networkStatistics) 12 | { 13 | NetworkStatistics = networkStatistics.ToList(); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/CityServiceStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | internal class CityServiceStatistics : ICityServicesStatistics 4 | { 5 | public CityServiceStatistics( 6 | int numberOfPoliceStations, 7 | int numberOfFireStations, 8 | int numberOfStadiums, 9 | int numberOfSeaports, 10 | int numberOfAirports 11 | ) 12 | { 13 | NumberOfPoliceStations = numberOfPoliceStations; 14 | NumberOfFireStations = numberOfFireStations; 15 | NumberOfStadiums = numberOfStadiums; 16 | NumberOfSeaports = numberOfSeaports; 17 | NumberOfAirports = numberOfAirports; 18 | } 19 | 20 | public int NumberOfPoliceStations { get; } 21 | public int NumberOfFireStations { get; } 22 | public int NumberOfStadiums { get; } 23 | public int NumberOfSeaports { get; } 24 | public int NumberOfAirports { get; } 25 | } 26 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/GrowthZoneStatistics.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Mirage.Urbanization.Statistics 4 | { 5 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/ICityServicesStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | public interface ICityServicesStatistics 4 | { 5 | int NumberOfPoliceStations { get; } 6 | int NumberOfFireStations { get; } 7 | 8 | int NumberOfStadiums { get; } 9 | int NumberOfSeaports { get; } 10 | int NumberOfAirports { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/IGrowthZoneNetworkStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | public interface IGrowthZoneStatistics 4 | { 5 | INumberSummary ResidentialZonePopulationNumbers { get; } 6 | INumberSummary CommercialZonePopulationNumbers { get; } 7 | INumberSummary IndustrialZonePopulationNumbers { get; } 8 | INumberSummary GlobalZonePopulationNumbers { get; } 9 | 10 | IRoadInfrastructureStatistics RoadInfrastructureStatistics { get; } 11 | IRailroadInfrastructureStatistics RailroadInfrastructureStatistics { get; } 12 | ICityServicesStatistics CityServicesStatistics { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/INetworkStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | public interface INetworkStatistics 4 | { 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/IPowerGridNetworkStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | public interface IPowerGridNetworkStatistics : INetworkStatistics 4 | { 5 | int AmountOfSuppliers { get; } 6 | int AmountOfConsumers { get; } 7 | 8 | int SupplyInUnits { get; } 9 | int ConsumptionInUnits { get; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/IPowerGridStatistics.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Mirage.Urbanization.Statistics 4 | { 5 | public interface IPowerGridStatistics 6 | { 7 | IReadOnlyCollection PowerGridNetworkStatistics { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/IRailroadInfrastructureStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | public interface IRailroadInfrastructureStatistics 4 | { 5 | int NumberOfTrainStations { get; } 6 | int NumberOfRailRoadZones { get; } 7 | } 8 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/IRoadInfrastructureStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | public interface IRoadInfrastructureStatistics 4 | { 5 | int NumberOfRoadZones { get; } 6 | INumberSummary TrafficNumbers { get; } 7 | } 8 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/PowerGridNetworkStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | internal class PowerGridNetworkStatistics : IPowerGridNetworkStatistics 4 | { 5 | public int AmountOfSuppliers { get; } 6 | 7 | public int AmountOfConsumers { get; } 8 | 9 | public int SupplyInUnits { get; } 10 | 11 | public int ConsumptionInUnits { get; } 12 | 13 | public PowerGridNetworkStatistics(int amountOfSuppliers, int amountOfConsumers, int supplyInUnits, 14 | int consumptionInUnits) 15 | { 16 | AmountOfSuppliers = amountOfSuppliers; 17 | AmountOfConsumers = amountOfConsumers; 18 | SupplyInUnits = supplyInUnits; 19 | ConsumptionInUnits = consumptionInUnits; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/PowerGridStatistics.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Mirage.Urbanization.Statistics 4 | { 5 | internal class PowerGridStatistics : BaseStatisticsCollection, IPowerGridStatistics 6 | { 7 | public PowerGridStatistics(IEnumerable powerGridNetworkStatistics) 8 | : base(powerGridNetworkStatistics) { } 9 | 10 | public IReadOnlyCollection PowerGridNetworkStatistics => NetworkStatistics; 11 | } 12 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/RailroadInfrastructureStatistics.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Statistics 2 | { 3 | public class RailroadInfrastructureStatistics : IRailroadInfrastructureStatistics 4 | { 5 | public RailroadInfrastructureStatistics(int numberOfTrainStations, int numberOfRailRoadZones) 6 | { 7 | NumberOfTrainStations = numberOfTrainStations; 8 | NumberOfRailRoadZones = numberOfRailRoadZones; 9 | } 10 | 11 | public int NumberOfTrainStations { get; } 12 | 13 | public int NumberOfRailRoadZones { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Statistics/RoadInfrastructureStatistics.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using Mirage.Urbanization.ZoneConsumption; 4 | 5 | namespace Mirage.Urbanization.Statistics 6 | { 7 | public class RoadInfrastructureStatistics : IRoadInfrastructureStatistics 8 | { 9 | public RoadInfrastructureStatistics(IEnumerable roadZoneConsumptions) 10 | { 11 | var capturedRoadZoneConsumptions = roadZoneConsumptions.ToList(); 12 | 13 | NumberOfRoadZones = capturedRoadZoneConsumptions.Count(); 14 | TrafficNumbers = new NumberSummary(capturedRoadZoneConsumptions.Select(x => x.GetTrafficDensityAsInt())); 15 | } 16 | 17 | public int NumberOfRoadZones { get; } 18 | 19 | public INumberSummary TrafficNumbers { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/StringExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Mirage.Urbanization 8 | { 9 | public static class StringExtensions 10 | { 11 | public static string FirstCharToUpper(this string input) 12 | { 13 | if (input == null) throw new ArgumentNullException(nameof(input)); 14 | if (string.Empty.Equals(input)) return input; 15 | if (input.Length == 1) return input.ToUpper(); 16 | return input.First().ToString().ToUpper() + input.Substring(1); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/airport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/airport.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/clear.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/coalpowerplant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/coalpowerplant.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/commercial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/commercial.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/factory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/factory.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/firestation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/firestation.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/nuclearpowerplant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/nuclearpowerplant.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/park.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/park.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/police.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/police.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/powerline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/powerline.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/railroad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/railroad.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/residential.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/residential.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/road.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/road.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/seaport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/seaport.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/stadium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/stadium.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/trainstation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/trainstation.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/water.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Tiles/woodland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Miragecoder/Urbanization/f3a03e75b201ffc20722729673e840ddef4eb61e/src/Mirage.Urbanization/Tiles/woodland.png -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Vehicles/BaseVehicleController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.Vehicles 4 | { 5 | internal abstract class BaseVehicleController 6 | { 7 | protected static readonly Random Random = new Random(); 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Vehicles/IAirplane.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Vehicles 2 | { 3 | public interface IAirplane : IMoveableVehicle 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Vehicles/IMoveableVehicle.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Vehicles 2 | { 3 | public interface IMoveableVehicle : IVehicle 4 | { 5 | void Move(); 6 | 7 | decimal Progress { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Vehicles/IShip.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.Vehicles 2 | { 3 | public interface IShip : IMoveableVehicle 4 | { 5 | bool IsReadyAndMoving { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Vehicles/ITrain.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Mirage.Urbanization.Vehicles 4 | { 5 | public interface ITrain : IMoveableVehicle 6 | { 7 | void SetTrainNetwork(ISet trainNetwork); 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Vehicles/IVehicle.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Mirage.Urbanization.Vehicles 4 | { 5 | public interface IVehicle 6 | { 7 | bool CanBeRemoved { get; } 8 | IEnumerable TraversePath(); 9 | IZoneInfo PreviousPreviousPreviousPreviousPosition { get; } 10 | IZoneInfo PreviousPreviousPreviousPosition { get; } 11 | IZoneInfo PreviousPreviousPosition { get; } 12 | IZoneInfo PreviousPosition { get; } 13 | IZoneInfo CurrentPosition { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/Vehicles/IVehicleController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.Vehicles 4 | { 5 | public interface IVehicleController where TVehicle : IVehicle 6 | { 7 | void ForEachActiveVehicle(bool moveVehicles, Action vehicleAction); 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/AreaZoneConsumptionOverrideInfoResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base 2 | { 3 | internal class AreaZoneConsumptionOverrideInfoResult : IGetCanOverrideWithResult 4 | { 5 | public bool WillSucceed => ResultingAreaConsumption == ToBeDeployedAreaConsumption; 6 | 7 | public IAreaZoneConsumption ResultingAreaConsumption { get; } 8 | public IAreaZoneConsumption ToBeDeployedAreaConsumption { get; } 9 | 10 | internal AreaZoneConsumptionOverrideInfoResult(IAreaZoneConsumption resultingAreaConsumption, IAreaZoneConsumption toBeDeployedAreaConsumption) 11 | { 12 | ResultingAreaConsumption = resultingAreaConsumption; 13 | ToBeDeployedAreaConsumption = toBeDeployedAreaConsumption; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/BaseImplementedZoneClusterConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using SixLabors.ImageSharp; 4 | using System.Linq; 5 | using Mirage.Urbanization.ZoneConsumption.Base.Behaviours; 6 | 7 | namespace Mirage.Urbanization.ZoneConsumption.Base 8 | { 9 | public abstract class BaseImplementedZoneClusterConsumption : BaseZoneClusterConsumption 10 | { 11 | protected readonly IReadOnlyCollection _zoneClusterMembers; 12 | public override IReadOnlyCollection ZoneClusterMembers => _zoneClusterMembers; 13 | 14 | protected BaseImplementedZoneClusterConsumption( 15 | Func createZoneInfoFinderFunc, 16 | IElectricityBehaviour electricityBehaviour, 17 | Color color, 18 | int widthInZones, 19 | int heightInZones) 20 | : base(electricityBehaviour) 21 | { 22 | _zoneClusterMembers = ZoneClusterMemberConsumption 23 | .Generate(this, createZoneInfoFinderFunc, widthInZones, heightInZones, color) 24 | .ToList(); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/BaseZoneConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using SixLabors.ImageSharp; 4 | 5 | namespace Mirage.Urbanization.ZoneConsumption.Base 6 | { 7 | public abstract class BaseZoneConsumption : IAreaZoneConsumption 8 | { 9 | public abstract string Name { get; } 10 | public abstract Color Color { get; } 11 | public abstract char KeyChar { get; } 12 | public string ColorName => Color.ToHex(); 13 | public abstract Image Tile { get; } 14 | 15 | public abstract int Cost { get; } 16 | public abstract BuildStyle BuildStyle { get; } 17 | 18 | public abstract IGetCanOverrideWithResult GetCanOverrideWith(IAreaZoneConsumption consumption); 19 | } 20 | 21 | public abstract class BaseSingleZoneConsumption : BaseZoneConsumption 22 | { 23 | 24 | } 25 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/BaseDynamicBehaviour.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 4 | { 5 | internal abstract class BaseDynamicBehaviour : IBehaviour 6 | { 7 | private readonly Func _getAmountInUnits; 8 | 9 | protected BaseDynamicBehaviour(Func getAmountInUnits) 10 | { 11 | _getAmountInUnits = getAmountInUnits ?? throw new ArgumentNullException(nameof(getAmountInUnits)); 12 | } 13 | 14 | public int GetAmountInUnits(RelativeZoneInfoQuery relativeZoneInfoQuery) 15 | { 16 | int pollution = _getAmountInUnits(); 17 | if (relativeZoneInfoQuery.Distance > 0 && pollution != 0) 18 | { 19 | return pollution / relativeZoneInfoQuery.Distance; 20 | } 21 | return pollution; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/DynamicCrimeBehaviour.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 4 | { 5 | internal class DynamicCrimeBehaviour : BaseDynamicBehaviour, ICrimeBehaviour 6 | { 7 | public DynamicCrimeBehaviour(Func getCrimeInUnits) 8 | : base(getCrimeInUnits) 9 | { 10 | 11 | } 12 | 13 | public int GetCrimeInUnits(RelativeZoneInfoQuery relativeZoneInfoQuery) 14 | { 15 | return GetAmountInUnits(relativeZoneInfoQuery); 16 | } 17 | } 18 | 19 | internal class DynamicFireHazardBehaviour : BaseDynamicBehaviour, IFireHazardBehaviour 20 | { 21 | public DynamicFireHazardBehaviour(Func getCrimeInUnits) 22 | : base(getCrimeInUnits) 23 | { 24 | 25 | } 26 | 27 | public int GetFireHazardInUnits(RelativeZoneInfoQuery relativeZoneInfoQuery) 28 | { 29 | return GetAmountInUnits(relativeZoneInfoQuery); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/DynamicPollutionBehaviour.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 4 | { 5 | internal class DynamicPollutionBehaviour : BaseDynamicBehaviour, IPollutionBehaviour 6 | { 7 | public DynamicPollutionBehaviour(Func getPollutionInUnits) 8 | : base(getPollutionInUnits) 9 | { 10 | 11 | } 12 | 13 | public int GetPollutionInUnits(RelativeZoneInfoQuery relativeZoneInfoQuery) 14 | { 15 | return GetAmountInUnits(relativeZoneInfoQuery); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/ElectricityConsumerBehaviour.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 4 | { 5 | public class ElectricityConsumerBehaviour : IElectricityConsumer 6 | { 7 | public int ConsumptionInUnits { get; } 8 | 9 | public ElectricityConsumerBehaviour(int consumptionInUnits) 10 | { 11 | ConsumptionInUnits = consumptionInUnits; 12 | } 13 | 14 | public bool IsPowered { get; private set; } 15 | 16 | public bool IsConnected { get; private set; } 17 | 18 | public void TogglePowered(bool isPowered) 19 | { 20 | IsPowered = isPowered; 21 | } 22 | 23 | public void ToggleConnected(bool isConnected) 24 | { 25 | IsConnected = isConnected; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/ElectricitySupplierBehaviour.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 2 | { 3 | public class ElectricitySupplierBehaviour : IElectricitySupplier 4 | { 5 | public int ContributionInUnits { get; } 6 | 7 | public ElectricitySupplierBehaviour(int contributionInUnits) 8 | { 9 | ContributionInUnits = contributionInUnits; 10 | } 11 | 12 | public bool IsPowered => true; 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/IBehaviour.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 2 | { 3 | public interface IBehaviour { } 4 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/IElectricityBehaviour.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 2 | { 3 | public interface IElectricityBehaviour : IBehaviour 4 | { 5 | bool IsPowered { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/IElectricityConsumer.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 2 | { 3 | public interface IElectricityConsumer : IElectricityBehaviour 4 | { 5 | int ConsumptionInUnits { get; } 6 | 7 | void TogglePowered(bool isPowered); 8 | 9 | void ToggleConnected(bool isPowered); 10 | 11 | bool IsConnected { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/IElectricitySupplier.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 2 | { 3 | public interface IElectricitySupplier : IElectricityBehaviour 4 | { 5 | int ContributionInUnits { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/Behaviours/IPollutionBehaviour.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base.Behaviours 2 | { 3 | public interface IPollutionBehaviour : IBehaviour 4 | { 5 | int GetPollutionInUnits(RelativeZoneInfoQuery relativeZoneInfoQuery); 6 | } 7 | 8 | public interface ICrimeBehaviour : IBehaviour 9 | { 10 | int GetCrimeInUnits(RelativeZoneInfoQuery relativeZoneInfoQuery); 11 | } 12 | 13 | public interface IFireHazardBehaviour : IBehaviour 14 | { 15 | int GetFireHazardInUnits(RelativeZoneInfoQuery relativeZoneInfoQuery); 16 | } 17 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/IAreaConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using SixLabors.ImageSharp; 4 | 5 | namespace Mirage.Urbanization.ZoneConsumption.Base 6 | { 7 | public interface IAreaConsumption 8 | { 9 | string Name { get; } 10 | char KeyChar { get; } 11 | int Cost { get; } 12 | BuildStyle BuildStyle { get; } 13 | Image Tile { get; } 14 | } 15 | 16 | public enum BuildStyle 17 | { 18 | SingleClick, 19 | ClickAndDrag 20 | } 21 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/IAreaObjectWithSeed.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base 2 | { 3 | public interface IAreaObjectWithSeed 4 | { 5 | int Id { get; } 6 | } 7 | 8 | public interface IAreaObjectWithPopulationDensity : IAreaObjectWithSeed 9 | { 10 | int PopulationDensity { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/IAreaZoneClusterConsumption.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Mirage.Urbanization.ZoneConsumption.Base 4 | { 5 | public interface IAreaZoneClusterConsumption : IAreaConsumption 6 | { 7 | IReadOnlyCollection ZoneClusterMembers { get; } 8 | 9 | int WidthInCells { get; } 10 | int HeightInCells { get; } 11 | int HorizontalCellOffset { get; } 12 | int VerticalCellOffset { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/IAreaZoneConsumption.cs: -------------------------------------------------------------------------------- 1 | using SixLabors.ImageSharp; 2 | 3 | namespace Mirage.Urbanization.ZoneConsumption.Base 4 | { 5 | public interface IAreaZoneConsumption : IAreaConsumption 6 | { 7 | Color Color { get; } 8 | IGetCanOverrideWithResult GetCanOverrideWith(IAreaZoneConsumption consumption); 9 | } 10 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/IConsumeAreaOperation.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base 2 | { 3 | public interface IConsumeAreaOperation 4 | { 5 | IGetCanOverrideWithResult CanOverrideWithResult { get; } 6 | void Apply(); 7 | string Description { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/IGetCanOverrideWithResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption.Base 2 | { 3 | public interface IGetCanOverrideWithResult 4 | { 5 | bool WillSucceed { get; } 6 | IAreaZoneConsumption ToBeDeployedAreaConsumption { get; } 7 | IAreaZoneConsumption ResultingAreaConsumption { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/IIntersectingZoneConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Mirage.Urbanization.ZoneConsumption.Base 5 | { 6 | public interface IIntersectingZoneConsumption : IAreaZoneConsumption 7 | { 8 | IEnumerable GetIntersectingTypes(); 9 | 10 | BaseInfrastructureNetworkZoneConsumption EastWestZoneConsumption { get; } 11 | BaseInfrastructureNetworkZoneConsumption NorthSouthZoneConsumption { get; } 12 | 13 | BaseInfrastructureNetworkZoneConsumption GetZoneConsumptionOfType() 14 | where TBaseInfrastructureNetworkZoneConsumption : BaseInfrastructureNetworkZoneConsumption; 15 | } 16 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/Base/StaticZoneClusterConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SixLabors.ImageSharp; 3 | using Mirage.Urbanization.ZoneConsumption.Base.Behaviours; 4 | 5 | namespace Mirage.Urbanization.ZoneConsumption.Base 6 | { 7 | public abstract class StaticZoneClusterConsumption : BaseImplementedZoneClusterConsumption 8 | { 9 | public override IPollutionBehaviour PollutionBehaviour { get; } 10 | 11 | protected StaticZoneClusterConsumption( 12 | Func createZoneInfoFinderFunc, 13 | IElectricityBehaviour electricityBehaviour, 14 | int pollutionInUnits, 15 | Color color, 16 | int widthInZones, 17 | int heightInZones) 18 | : base(createZoneInfoFinderFunc, electricityBehaviour, color, widthInZones, heightInZones) 19 | { 20 | PollutionBehaviour = new DynamicPollutionBehaviour(() => pollutionInUnits); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/EmptyZoneConsumption.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using Mirage.Urbanization.ZoneConsumption.Base; 3 | using SixLabors.ImageSharp; 4 | 5 | namespace Mirage.Urbanization.ZoneConsumption 6 | { 7 | public class EmptyZoneConsumption : BaseSingleZoneConsumption 8 | { 9 | public override string Name => "Clear"; 10 | 11 | public override char KeyChar => 'd'; 12 | public override BuildStyle BuildStyle => BuildStyle.ClickAndDrag; 13 | 14 | public override Color Color => DefaultColor; 15 | 16 | public override int Cost => 10; 17 | 18 | public static Color DefaultColor = Color.BurlyWood; 19 | 20 | public override Image Tile => Image.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("Mirage.Urbanization.Tiles.clear.png")); 21 | 22 | public override IGetCanOverrideWithResult GetCanOverrideWith(IAreaZoneConsumption consumption) 23 | { 24 | return new AreaZoneConsumptionOverrideInfoResult( 25 | resultingAreaConsumption: consumption, 26 | toBeDeployedAreaConsumption: consumption 27 | ); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/ISingleZoneConsumptionWithPollutionBehaviour.cs: -------------------------------------------------------------------------------- 1 | using Mirage.Urbanization.ZoneConsumption.Base; 2 | using Mirage.Urbanization.ZoneConsumption.Base.Behaviours; 3 | 4 | namespace Mirage.Urbanization.ZoneConsumption 5 | { 6 | public interface ISingleZoneConsumptionWithPollutionBehaviour : IAreaZoneConsumption 7 | { 8 | IPollutionBehaviour PollutionBehaviour { get; } 9 | } 10 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/IndustrialZoneClusterConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SixLabors.ImageSharp; 3 | using System.Reflection; 4 | using Mirage.Urbanization.ZoneConsumption.Base; 5 | 6 | namespace Mirage.Urbanization.ZoneConsumption 7 | { 8 | public class IndustrialZoneClusterConsumption : BaseGrowthZoneClusterConsumption 9 | { 10 | public IndustrialZoneClusterConsumption(Func createZoneInfoFinderFunc) : base(createZoneInfoFinderFunc, Color.Yellow) { } 11 | 12 | protected override decimal PopulationPollutionFactor => 1.4M; 13 | 14 | public override char KeyChar => 'i'; 15 | 16 | protected override decimal PopulationCrimeFactor => 0.7M; 17 | 18 | protected override decimal PopulationFireHazardFactor => 0.5M; 19 | 20 | public override string Name => "Industrial zone"; 21 | public override Image Tile => Image.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("Mirage.Urbanization.Tiles.factory.png")); 22 | } 23 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/RailRoadZoneConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Collections.ObjectModel; 4 | using SixLabors.ImageSharp; 5 | using System.Reflection; 6 | using Mirage.Urbanization.ZoneConsumption.Base; 7 | 8 | namespace Mirage.Urbanization.ZoneConsumption 9 | { 10 | public class RailRoadZoneConsumption : BaseInfrastructureNetworkZoneConsumption 11 | { 12 | public RailRoadZoneConsumption(ZoneInfoFinder neighborNavigator) : base(neighborNavigator) { } 13 | 14 | public override string Name => "Railroad"; 15 | 16 | public override char KeyChar => 't'; 17 | 18 | public override bool CanBeOverriddenByZoneClusters => false; 19 | public override int Cost => 50; 20 | public override Image Tile => Image.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("Mirage.Urbanization.Tiles.railroad.png")); 21 | 22 | public override Color Color => Color.SaddleBrown; 23 | } 24 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/ResidentialZoneClusterConsumption.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using SixLabors.ImageSharp; 4 | using System.Linq; 5 | using System.Reflection; 6 | using Mirage.Urbanization.ZoneConsumption.Base; 7 | 8 | namespace Mirage.Urbanization.ZoneConsumption 9 | { 10 | public class ResidentialZoneClusterConsumption : BaseGrowthZoneClusterConsumption 11 | { 12 | public ResidentialZoneClusterConsumption(Func createZoneInfoFinderFunc) 13 | : base(createZoneInfoFinderFunc, Color.Green) 14 | { 15 | 16 | } 17 | 18 | public override char KeyChar => 'g'; 19 | 20 | protected override decimal PopulationPollutionFactor => 0.5M; 21 | 22 | protected override decimal PopulationCrimeFactor => 0.5M; 23 | 24 | protected override decimal PopulationFireHazardFactor => 0.5M; 25 | public override Image Tile => Image.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream("Mirage.Urbanization.Tiles.residential.png")); 26 | 27 | public override string Name => "Residential zone"; 28 | } 29 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/RubbishZoneConsumption.cs: -------------------------------------------------------------------------------- 1 | using SixLabors.ImageSharp; 2 | 3 | namespace Mirage.Urbanization.ZoneConsumption 4 | { 5 | public class RubbishZoneConsumption : EmptyZoneConsumption 6 | { 7 | public override string Name => "Rubbish"; 8 | 9 | public override Color Color => Color.SaddleBrown; 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumption/TrafficDensity.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneConsumption 2 | { 3 | public enum TrafficDensity 4 | { 5 | None, 6 | Low, 7 | High 8 | } 9 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumptionCompletedResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization 2 | { 3 | class ZoneConsumptionCompletedResult : ZoneConsumptionResult 4 | { 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumptionFailedResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization 2 | { 3 | class ZoneConsumptionFailedResult : ZoneConsumptionResult 4 | { 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneConsumptionResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization 2 | { 3 | public abstract class ZoneConsumptionResult 4 | { 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneInfoEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Mirage.Urbanization 4 | { 5 | public class ZoneInfoEventArgs : EventArgs 6 | { 7 | public IReadOnlyZoneInfo ZoneInfo { get; } 8 | 9 | public ZoneInfoEventArgs(IReadOnlyZoneInfo zoneInfo) 10 | { 11 | ZoneInfo = zoneInfo; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZonePoint.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Mirage.Urbanization.ZoneConsumption.Base; 7 | 8 | namespace Mirage.Urbanization 9 | { 10 | [DebuggerDisplay("ZonePoint (X: {X}, Y: {Y})")] 11 | public struct ZonePoint : IEquatable 12 | { 13 | public int X { get; set; } 14 | public int Y { get; set; } 15 | 16 | public override bool Equals(object obj) 17 | { 18 | return obj is ZonePoint && this == (ZonePoint) obj; 19 | } 20 | 21 | public override int GetHashCode() 22 | { 23 | return X.GetHashCode() ^ Y.GetHashCode(); 24 | } 25 | 26 | public static bool operator ==(ZonePoint x, ZonePoint y) 27 | { 28 | return x.X == y.X && x.Y == y.Y; 29 | } 30 | 31 | public static bool operator !=(ZonePoint x, ZonePoint y) 32 | { 33 | return x.X != y.X || x.Y != y.Y; 34 | } 35 | 36 | public bool Equals(ZonePoint other) 37 | { 38 | return X == other.X && Y == other.Y; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/IQueryCellValueResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | public interface IQueryCellValueResult 4 | { 5 | int ValueInUnits { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/IQueryCrimeResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | public interface IQueryCrimeResult : IQueryCellValueResult { } 4 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/IQueryFireHazardResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | public interface IQueryFireHazardResult : IQueryCellValueResult { } 4 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/IQueryLandValueResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | public interface IQueryLandValueResult : IQueryCellValueResult { } 4 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/IQueryPollutionResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | public interface IQueryPollutionResult : IQueryCellValueResult { } 4 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/QueryCellValueResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | public abstract class QueryCellValueResult : IQueryCellValueResult 4 | { 5 | protected QueryCellValueResult(int valueInUnits) 6 | { 7 | ValueInUnits = valueInUnits > 0 ? valueInUnits : 0; 8 | } 9 | public int ValueInUnits { get; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/QueryCrimeResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | internal class QueryCrimeResult : QueryCellValueResult, IQueryCrimeResult 4 | { 5 | public QueryCrimeResult(int valueInUnits) : base(valueInUnits) { } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/QueryFireHazardResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | internal class QueryFireHazardResult : QueryCellValueResult, IQueryFireHazardResult 4 | { 5 | public QueryFireHazardResult(int valueInUnits) : base(valueInUnits) { } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/QueryLandValueResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | public class QueryLandValueResult : QueryCellValueResult, IQueryLandValueResult 4 | { 5 | public QueryLandValueResult(int valueInUnits) : base(valueInUnits) { } 6 | } 7 | } -------------------------------------------------------------------------------- /src/Mirage.Urbanization/ZoneStatisticsQuerying/QueryPollutionResult.cs: -------------------------------------------------------------------------------- 1 | namespace Mirage.Urbanization.ZoneStatisticsQuerying 2 | { 3 | internal class QueryPollutionResult : QueryCellValueResult, IQueryPollutionResult 4 | { 5 | public QueryPollutionResult(int valueInUnits) : base(valueInUnits) { } 6 | } 7 | } --------------------------------------------------------------------------------