From fd3b08661bb60c851ec0a6ab7bd793f37d779ec4 Mon Sep 17 00:00:00 2001 From: Julien Date: Mon, 4 Sep 2023 00:08:07 +0200 Subject: [PATCH 1/4] Compute default areas per category --- GameRealisticMap/BuildersCatalog.cs | 7 ++ .../ManMade/CategoryAreaBuilder.cs | 5 +- GameRealisticMap/ManMade/CategoryAreaData.cs | 10 ++- .../DefaultAgriculturalAreaData.cs | 13 ++++ .../DefaultAgriculturalAreasBuilder.cs | 20 +++++ .../DefaultCategoryAreaDataBase.cs | 25 +++++++ .../DefaultCategoryAreasBuilderBase.cs | 75 +++++++++++++++++++ .../DefaultCommercialAreaData.cs | 13 ++++ .../DefaultCommercialAreasBuilder.cs | 20 +++++ .../DefaultIndustrialAreaData.cs | 13 ++++ .../DefaultIndustrialAreasBuilder.cs | 20 +++++ .../DefaultMilitaryAreaData.cs | 13 ++++ .../DefaultMilitaryAreasBuilder.cs | 20 +++++ .../DefaultResidentialAreaData.cs | 13 ++++ .../DefaultResidentialAreasBuilder.cs | 20 +++++ .../DefaultRetailAreaData.cs | 13 ++++ .../DefaultRetailAreasBuilder.cs | 20 +++++ GameRealisticMap/Preview/grm-preview.js | 8 +- 18 files changed, 324 insertions(+), 4 deletions(-) create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreaData.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasBuilder.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreaDataBase.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreasBuilderBase.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreaData.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreasBuilder.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreaData.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasBuilder.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreaData.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasBuilder.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreaData.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreasBuilder.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreaData.cs create mode 100644 GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreasBuilder.cs diff --git a/GameRealisticMap/BuildersCatalog.cs b/GameRealisticMap/BuildersCatalog.cs index 4aaf4489..812c0080 100644 --- a/GameRealisticMap/BuildersCatalog.cs +++ b/GameRealisticMap/BuildersCatalog.cs @@ -1,6 +1,7 @@ using GameRealisticMap.ElevationModel; using GameRealisticMap.ManMade; using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.ManMade.DefaultUrbanAreas; using GameRealisticMap.ManMade.Farmlands; using GameRealisticMap.ManMade.Fences; using GameRealisticMap.ManMade.Objects; @@ -62,6 +63,12 @@ public BuildersCatalog(IProgressSystem progress, IRoadTypeLibrary(IDataBuilder builder) diff --git a/GameRealisticMap/ManMade/CategoryAreaBuilder.cs b/GameRealisticMap/ManMade/CategoryAreaBuilder.cs index ddf0d553..267c5239 100644 --- a/GameRealisticMap/ManMade/CategoryAreaBuilder.cs +++ b/GameRealisticMap/ManMade/CategoryAreaBuilder.cs @@ -23,7 +23,10 @@ public CategoryAreaData Build(IBuildContext context) var buildingType = GetBuildingType(area.Tags.GetValue("landuse")); if (buildingType != null) { - var polygons = context.OsmSource.Interpret(area).SelectMany(geometry => TerrainPolygon.FromGeometry(geometry, context.Area.LatLngToTerrainPoint)).ToList(); + var polygons = context.OsmSource.Interpret(area) + .SelectMany(geometry => TerrainPolygon.FromGeometry(geometry, context.Area.LatLngToTerrainPoint)) + .SelectMany(g => g.ClippedBy(context.Area.TerrainBounds)) + .ToList(); areas.Add(new CategoryArea(buildingType.Value, polygons)); } report.ReportOneDone(); diff --git a/GameRealisticMap/ManMade/CategoryAreaData.cs b/GameRealisticMap/ManMade/CategoryAreaData.cs index b4084026..24e6228f 100644 --- a/GameRealisticMap/ManMade/CategoryAreaData.cs +++ b/GameRealisticMap/ManMade/CategoryAreaData.cs @@ -1,11 +1,19 @@ using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; using GameRealisticMap.Nature; -using GeoJSON.Text.Feature; namespace GameRealisticMap.ManMade { public class CategoryAreaData : INonDefaultArea { + public static BuildingTypeId[] Categories = new[] { + BuildingTypeId.Residential, + BuildingTypeId.Military, + BuildingTypeId.Commercial, + BuildingTypeId.Retail, + BuildingTypeId.Industrial, + BuildingTypeId.Agricultural }; + public CategoryAreaData(List areas) { Areas = areas; diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreaData.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreaData.cs new file mode 100644 index 00000000..e090068e --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreaData.cs @@ -0,0 +1,13 @@ +using GameRealisticMap.Geometries; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + public class DefaultAgriculturalAreaData : DefaultCategoryAreaDataBase + { + public DefaultAgriculturalAreaData(List areas) + : base(areas) + { + + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasBuilder.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasBuilder.cs new file mode 100644 index 00000000..c0d6cdef --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasBuilder.cs @@ -0,0 +1,20 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + internal class DefaultAgriculturalAreasBuilder : DefaultUrbanAreasBuilderBase + { + public DefaultAgriculturalAreasBuilder(IProgressSystem progress) : base(progress) + { + } + + protected override BuildingTypeId TragetedType => BuildingTypeId.Agricultural; + + protected override DefaultAgriculturalAreaData Create(List polygons) + { + return new DefaultAgriculturalAreaData(polygons); + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreaDataBase.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreaDataBase.cs new file mode 100644 index 00000000..9b2d31fc --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreaDataBase.cs @@ -0,0 +1,25 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.Nature; +using GeoJSON.Text.Feature; +using GeoJSON.Text.Geometry; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + public abstract class DefaultCategoryAreaDataBase : IGeoJsonData, IPolygonTerrainData + { + public DefaultCategoryAreaDataBase(List polygons) + { + Polygons = polygons; + } + + public List Polygons { get; } + + public IEnumerable ToGeoJson(Func project) + { + var properties = new Dictionary() { + {"type", "defaultCategory" } + }; + return Polygons.Select(b => new Feature(b.ToGeoJson(project), properties)); + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreasBuilderBase.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreasBuilderBase.cs new file mode 100644 index 00000000..b29b65ea --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCategoryAreasBuilderBase.cs @@ -0,0 +1,75 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.ManMade.Fences; +using GameRealisticMap.ManMade.Objects; +using GameRealisticMap.Nature; +using GameRealisticMap.Nature.Trees; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + internal abstract class DefaultUrbanAreasBuilderBase : IDataBuilder + where TData : class + { + private readonly IProgressSystem progress; + + public DefaultUrbanAreasBuilderBase(IProgressSystem progress) + { + this.progress = progress; + } + + public TData Build(IBuildContext context) + { + var categories = context.GetData(); + + var areaPolygons = categories.Areas + .Where(a => a.BuildingType == TragetedType) + .SelectMany(p => p.PolyList) + .ToList(); + + if (areaPolygons.Count == 0) + { + return Create(new List()); + } + + var polygonsToSubstract = CreateMask(context, categories, areaPolygons); + + var area = Merge(areaPolygons); + + var polygons = area.SubstractAll(progress, "SubstractAll", polygonsToSubstract); + + return Create(polygons.ToList()); + } + + private List CreateMask(IBuildContext context, CategoryAreaData categories, List areaPolygons) + { + using var report = progress.CreateStep("CreateMask", 1); + + var allData = context.GetOfType().Where(c => c != categories).ToList(); + + var polygonsToSubstract = allData.SelectMany(l => l.Polygons).ToList(); + polygonsToSubstract.AddRange(context.GetData().Objects.Select(o => TerrainPolygon.FromCircle(o.Point, 1f))); + polygonsToSubstract.AddRange(context.GetData().Points.Select(o => TerrainPolygon.FromCircle(o, 2f))); + polygonsToSubstract.AddRange(context.GetData().Fences.SelectMany(o => o.Polygons)); + var priority = CategoryAreaData.Categories.TakeWhile(t => t != TragetedType).ToList(); + if (priority.Count > 0) + { + polygonsToSubstract.AddRange(categories.Areas.Where(a => priority.Contains(a.BuildingType)).SelectMany(p => p.PolyList)); + } + + polygonsToSubstract.RemoveAll(p => !areaPolygons.Any(a => a.EnveloppeIntersects(p))); + + return polygonsToSubstract; + } + + protected abstract BuildingTypeId TragetedType { get; } + + protected abstract TData Create(List polygons); + + private List Merge(List areaPolygons) + { + using var report = progress.CreateStep("MergeAll", areaPolygons.Count); + return TerrainPolygon.MergeAllParallel(areaPolygons, report); + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreaData.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreaData.cs new file mode 100644 index 00000000..ead759c7 --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreaData.cs @@ -0,0 +1,13 @@ +using GameRealisticMap.Geometries; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + public class DefaultCommercialAreaData : DefaultCategoryAreaDataBase + { + public DefaultCommercialAreaData(List areas) + : base(areas) + { + + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreasBuilder.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreasBuilder.cs new file mode 100644 index 00000000..77aeb86e --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultCommercialAreasBuilder.cs @@ -0,0 +1,20 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + internal class DefaultCommercialAreasBuilder : DefaultUrbanAreasBuilderBase + { + public DefaultCommercialAreasBuilder(IProgressSystem progress) : base(progress) + { + } + + protected override BuildingTypeId TragetedType => BuildingTypeId.Commercial; + + protected override DefaultCommercialAreaData Create(List polygons) + { + return new DefaultCommercialAreaData(polygons); + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreaData.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreaData.cs new file mode 100644 index 00000000..e2863b1b --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreaData.cs @@ -0,0 +1,13 @@ +using GameRealisticMap.Geometries; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + public class DefaultIndustrialAreaData : DefaultCategoryAreaDataBase + { + public DefaultIndustrialAreaData(List areas) + : base(areas) + { + + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasBuilder.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasBuilder.cs new file mode 100644 index 00000000..274e0600 --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasBuilder.cs @@ -0,0 +1,20 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + internal class DefaultIndustrialAreasBuilder : DefaultUrbanAreasBuilderBase + { + public DefaultIndustrialAreasBuilder(IProgressSystem progress) : base(progress) + { + } + + protected override BuildingTypeId TragetedType => BuildingTypeId.Industrial; + + protected override DefaultIndustrialAreaData Create(List polygons) + { + return new DefaultIndustrialAreaData(polygons); + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreaData.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreaData.cs new file mode 100644 index 00000000..b96772c2 --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreaData.cs @@ -0,0 +1,13 @@ +using GameRealisticMap.Geometries; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + public class DefaultMilitaryAreaData : DefaultCategoryAreaDataBase + { + public DefaultMilitaryAreaData(List areas) + : base(areas) + { + + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasBuilder.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasBuilder.cs new file mode 100644 index 00000000..ee6410f4 --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasBuilder.cs @@ -0,0 +1,20 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + internal class DefaultMilitaryAreasBuilder : DefaultUrbanAreasBuilderBase + { + public DefaultMilitaryAreasBuilder(IProgressSystem progress) : base(progress) + { + } + + protected override BuildingTypeId TragetedType => BuildingTypeId.Military; + + protected override DefaultMilitaryAreaData Create(List polygons) + { + return new DefaultMilitaryAreaData(polygons); + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreaData.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreaData.cs new file mode 100644 index 00000000..2ee9f509 --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreaData.cs @@ -0,0 +1,13 @@ +using GameRealisticMap.Geometries; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + public class DefaultResidentialAreaData : DefaultCategoryAreaDataBase + { + public DefaultResidentialAreaData(List areas) + : base(areas) + { + + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreasBuilder.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreasBuilder.cs new file mode 100644 index 00000000..8a7dd734 --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultResidentialAreasBuilder.cs @@ -0,0 +1,20 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + internal class DefaultResidentialAreasBuilder : DefaultUrbanAreasBuilderBase + { + public DefaultResidentialAreasBuilder(IProgressSystem progress) : base(progress) + { + } + + protected override BuildingTypeId TragetedType => BuildingTypeId.Residential; + + protected override DefaultResidentialAreaData Create(List polygons) + { + return new DefaultResidentialAreaData(polygons); + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreaData.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreaData.cs new file mode 100644 index 00000000..8a28cbc9 --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreaData.cs @@ -0,0 +1,13 @@ +using GameRealisticMap.Geometries; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + public class DefaultRetailAreaData : DefaultCategoryAreaDataBase + { + public DefaultRetailAreaData(List areas) + : base(areas) + { + + } + } +} diff --git a/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreasBuilder.cs b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreasBuilder.cs new file mode 100644 index 00000000..296e2f4a --- /dev/null +++ b/GameRealisticMap/ManMade/DefaultUrbanAreas/DefaultRetailAreasBuilder.cs @@ -0,0 +1,20 @@ +using GameRealisticMap.Geometries; +using GameRealisticMap.ManMade.Buildings; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.ManMade.DefaultUrbanAreas +{ + internal class DefaultRetailAreasBuilder : DefaultUrbanAreasBuilderBase + { + public DefaultRetailAreasBuilder(IProgressSystem progress) : base(progress) + { + } + + protected override BuildingTypeId TragetedType => BuildingTypeId.Retail; + + protected override DefaultRetailAreaData Create(List polygons) + { + return new DefaultRetailAreaData(polygons); + } + } +} diff --git a/GameRealisticMap/Preview/grm-preview.js b/GameRealisticMap/Preview/grm-preview.js index 2a30f842..de550d6f 100644 --- a/GameRealisticMap/Preview/grm-preview.js +++ b/GameRealisticMap/Preview/grm-preview.js @@ -449,9 +449,12 @@ function InitPreview(geoJson) L.control.scale({ maxWidth: 200, imperial: false }).addTo(map); L.control.gridMousePosition().addTo(map); - var stripes = new L.StripePattern(); + var stripes = new L.StripePattern({ weight: 4, spaceWeight: 4, color: 'lightgreen' }); stripes.addTo(map); + var stripes2 = new L.StripePattern({ weight: 2, spaceWeight:2 }); + stripes2.addTo(map); + L.geoJSON(geoJson, { style: function(feature) { switch (feature.properties.type) { @@ -483,7 +486,8 @@ function InitPreview(geoJson) case 'tree': return { fillColor: "ForestGreen", stroke: false, fillOpacity: 0.8 }; case 'railway': return { fillColor: "black", stroke: false, fillOpacity: 0.8 }; case 'sidewalk': return { fill: false, stroke: true, weight: 1, dashArray: [5, 5], color: 'Gray' }; - + case 'defaultCategory': + return { fillPattern: stripes2, stroke: false, fillOpacity: 0.2 }; case 'ocean': return { fillColor: 'RoyalBlue', fillOpacity: 0.5, stroke: true, weight: 3, color: 'RoyalBlue' }; case 'coastline': return { stroke: true, weight: 1, dashArray: [5, 5], color: 'yellow', fillOpacity: 0 }; case 'orchard': return { fillColor: 'greenyellow', stroke: false, fillOpacity: 0.35 }; From d8f290bcff55dfc11a87f1df5401abe34cee43a0 Mon Sep 17 00:00:00 2001 From: Julien Date: Mon, 4 Sep 2023 00:08:18 +0200 Subject: [PATCH 2/4] Filling per category --- .../Arma3LayerGeneratorCatalog.cs | 7 +++++++ .../Assets/Filling/BasicCollectionId.cs | 8 +++++++- .../DefaultAgriculturalAreasGenerator.cs | 19 +++++++++++++++++++ .../DefaultCommercialAreasGenerator.cs | 19 +++++++++++++++++++ .../DefaultIndustrialAreasGenerator.cs | 19 +++++++++++++++++++ .../DefaultMilitaryAreasGenerator.cs | 19 +++++++++++++++++++ .../DefaultResidentialAreasGenerator.cs | 19 +++++++++++++++++++ .../DefaultRetailAreasGenerator.cs | 19 +++++++++++++++++++ 8 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasGenerator.cs create mode 100644 GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultCommercialAreasGenerator.cs create mode 100644 GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs create mode 100644 GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs create mode 100644 GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs create mode 100644 GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs diff --git a/GameRealisticMap.Arma3/Arma3LayerGeneratorCatalog.cs b/GameRealisticMap.Arma3/Arma3LayerGeneratorCatalog.cs index 7383c4d4..d49bca27 100644 --- a/GameRealisticMap.Arma3/Arma3LayerGeneratorCatalog.cs +++ b/GameRealisticMap.Arma3/Arma3LayerGeneratorCatalog.cs @@ -2,6 +2,7 @@ using GameRealisticMap.Arma3.ManMade; using GameRealisticMap.Arma3.ManMade.Farmlands; using GameRealisticMap.Arma3.Nature.DefaultAreas; +using GameRealisticMap.Arma3.Nature.DefaultUrbanAreas; using GameRealisticMap.Arma3.Nature.Forests; using GameRealisticMap.Arma3.Nature.Lakes; using GameRealisticMap.Arma3.Nature.RockAreas; @@ -27,6 +28,12 @@ public Arma3LayerGeneratorCatalog(IProgressSystem progress, IArma3RegionAssets a Generators.Add(new VineyardsGenerator(progress, assets)); Generators.Add(new OrchardGenerator(progress, assets)); Generators.Add(new SidewalksGenerator(progress, assets)); + Generators.Add(new DefaultAgriculturalAreasGenerator(progress, assets)); + Generators.Add(new DefaultCommercialAreasGenerator(progress, assets)); + Generators.Add(new DefaultIndustrialAreasGenerator(progress, assets)); + Generators.Add(new DefaultMilitaryAreasGenerator(progress, assets)); + Generators.Add(new DefaultResidentialAreasGenerator(progress, assets)); + Generators.Add(new DefaultRetailAreasGenerator(progress, assets)); // Nature Generators.Add(new ForestEdgeGenerator(progress, assets)); diff --git a/GameRealisticMap.Arma3/Assets/Filling/BasicCollectionId.cs b/GameRealisticMap.Arma3/Assets/Filling/BasicCollectionId.cs index b78a796b..fa7a9282 100644 --- a/GameRealisticMap.Arma3/Assets/Filling/BasicCollectionId.cs +++ b/GameRealisticMap.Arma3/Assets/Filling/BasicCollectionId.cs @@ -8,6 +8,12 @@ public enum BasicCollectionId RocksAdditional, DefaultAreas, WatercourseAdditional, - SmallOrchard + SmallOrchard, + DefaultAgriculturalAreas, + DefaultCommercialAreas, + DefaultIndustrialAreas, + DefaultMilitaryAreas, + DefaultResidentialAreas, + DefaultRetailAreas } } \ No newline at end of file diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasGenerator.cs new file mode 100644 index 00000000..298d852a --- /dev/null +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultAgriculturalAreasGenerator.cs @@ -0,0 +1,19 @@ +using GameRealisticMap.Arma3.Assets; +using GameRealisticMap.Arma3.Assets.Filling; +using GameRealisticMap.ManMade.DefaultUrbanAreas; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas +{ + internal class DefaultAgriculturalAreasGenerator : BasicGeneratorBase + { + public DefaultAgriculturalAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) + : base(progress, assets) + { + } + + protected override bool ShouldGenerate => assets.GetBasicCollections(Id).Count > 0; + + protected override BasicCollectionId Id => BasicCollectionId.DefaultAgriculturalAreas; + } +} diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultCommercialAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultCommercialAreasGenerator.cs new file mode 100644 index 00000000..7a72adbe --- /dev/null +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultCommercialAreasGenerator.cs @@ -0,0 +1,19 @@ +using GameRealisticMap.Arma3.Assets; +using GameRealisticMap.Arma3.Assets.Filling; +using GameRealisticMap.ManMade.DefaultUrbanAreas; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas +{ + internal class DefaultCommercialAreasGenerator : BasicGeneratorBase + { + public DefaultCommercialAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) + : base(progress, assets) + { + } + + protected override bool ShouldGenerate => assets.GetBasicCollections(Id).Count > 0; + + protected override BasicCollectionId Id => BasicCollectionId.DefaultCommercialAreas; + } +} diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs new file mode 100644 index 00000000..79f8983e --- /dev/null +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs @@ -0,0 +1,19 @@ +using GameRealisticMap.Arma3.Assets; +using GameRealisticMap.Arma3.Assets.Filling; +using GameRealisticMap.ManMade.DefaultUrbanAreas; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas +{ + internal class DefaultIndustrialAreasGenerator : BasicGeneratorBase + { + public DefaultIndustrialAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) + : base(progress, assets) + { + } + + protected override bool ShouldGenerate => assets.GetBasicCollections(Id).Count > 0; + + protected override BasicCollectionId Id => BasicCollectionId.DefaultIndustrialAreas; + } +} diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs new file mode 100644 index 00000000..2dd0efc4 --- /dev/null +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs @@ -0,0 +1,19 @@ +using GameRealisticMap.Arma3.Assets; +using GameRealisticMap.Arma3.Assets.Filling; +using GameRealisticMap.ManMade.DefaultUrbanAreas; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas +{ + internal class DefaultMilitaryAreasGenerator : BasicGeneratorBase + { + public DefaultMilitaryAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) + : base(progress, assets) + { + } + + protected override bool ShouldGenerate => assets.GetBasicCollections(Id).Count > 0; + + protected override BasicCollectionId Id => BasicCollectionId.DefaultMilitaryAreas; + } +} diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs new file mode 100644 index 00000000..191b3a95 --- /dev/null +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs @@ -0,0 +1,19 @@ +using GameRealisticMap.Arma3.Assets; +using GameRealisticMap.Arma3.Assets.Filling; +using GameRealisticMap.ManMade.DefaultUrbanAreas; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas +{ + internal class DefaultResidentialAreasGenerator : BasicGeneratorBase + { + public DefaultResidentialAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) + : base(progress, assets) + { + } + + protected override bool ShouldGenerate => assets.GetBasicCollections(Id).Count > 0; + + protected override BasicCollectionId Id => BasicCollectionId.DefaultResidentialAreas; + } +} diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs new file mode 100644 index 00000000..81b2ff6a --- /dev/null +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs @@ -0,0 +1,19 @@ +using GameRealisticMap.Arma3.Assets; +using GameRealisticMap.Arma3.Assets.Filling; +using GameRealisticMap.ManMade.DefaultUrbanAreas; +using GameRealisticMap.Reporting; + +namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas +{ + internal class DefaultRetailAreasGenerator : BasicGeneratorBase + { + public DefaultRetailAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) + : base(progress, assets) + { + } + + protected override bool ShouldGenerate => assets.GetBasicCollections(Id).Count > 0; + + protected override BasicCollectionId Id => BasicCollectionId.DefaultRetailAreas; + } +} From 01eb30d75147f8b17ec3a69d2de7ce87322172be Mon Sep 17 00:00:00 2001 From: Julien Date: Mon, 4 Sep 2023 08:30:11 +0200 Subject: [PATCH 3/4] Labels + icons --- GameRealisticMap.Studio/Labels.Designer.cs | 56 +++++++++++++++++- GameRealisticMap.Studio/Labels.fr.resx | 20 ++++++- GameRealisticMap.Studio/Labels.resx | 20 ++++++- .../Icons/DefaultAgriculturalAreas.png | Bin 0 -> 11691 bytes .../Resources/Icons/DefaultAreas.png | Bin 4505 -> 9319 bytes .../Icons/DefaultCommercialAreas.png | Bin 0 -> 7594 bytes .../Icons/DefaultIndustrialAreas.png | Bin 0 -> 6478 bytes .../Resources/Icons/DefaultMilitaryAreas.png | Bin 0 -> 8017 bytes .../Icons/DefaultResidentialAreas.png | Bin 0 -> 6721 bytes .../Resources/Icons/DefaultRetailAreas.png | Bin 0 -> 5496 bytes 10 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 GameRealisticMap.Studio/Resources/Icons/DefaultAgriculturalAreas.png create mode 100644 GameRealisticMap.Studio/Resources/Icons/DefaultCommercialAreas.png create mode 100644 GameRealisticMap.Studio/Resources/Icons/DefaultIndustrialAreas.png create mode 100644 GameRealisticMap.Studio/Resources/Icons/DefaultMilitaryAreas.png create mode 100644 GameRealisticMap.Studio/Resources/Icons/DefaultResidentialAreas.png create mode 100644 GameRealisticMap.Studio/Resources/Icons/DefaultRetailAreas.png diff --git a/GameRealisticMap.Studio/Labels.Designer.cs b/GameRealisticMap.Studio/Labels.Designer.cs index 4244504f..d6a0344c 100644 --- a/GameRealisticMap.Studio/Labels.Designer.cs +++ b/GameRealisticMap.Studio/Labels.Designer.cs @@ -332,7 +332,16 @@ public static string AssetDefault { } /// - /// Recherche une chaîne localisée semblable à Default Areas. + /// Recherche une chaîne localisée semblable à Default Areas - Agricultural. + /// + public static string AssetDefaultAgriculturalAreas { + get { + return ResourceManager.GetString("AssetDefaultAgriculturalAreas", resourceCulture); + } + } + + /// + /// Recherche une chaîne localisée semblable à Default Areas - Non urban / natural. /// public static string AssetDefaultAreas { get { @@ -340,6 +349,15 @@ public static string AssetDefaultAreas { } } + /// + /// Recherche une chaîne localisée semblable à Default Areas - Commercial / offices. + /// + public static string AssetDefaultCommercialAreas { + get { + return ResourceManager.GetString("AssetDefaultCommercialAreas", resourceCulture); + } + } + /// /// Recherche une chaîne localisée semblable à Default ground - Industrial. /// @@ -349,6 +367,42 @@ public static string AssetDefaultIndustrial { } } + /// + /// Recherche une chaîne localisée semblable à Default Areas - Industrial. + /// + public static string AssetDefaultIndustrialAreas { + get { + return ResourceManager.GetString("AssetDefaultIndustrialAreas", resourceCulture); + } + } + + /// + /// Recherche une chaîne localisée semblable à Default Areas - Military. + /// + public static string AssetDefaultMilitaryAreas { + get { + return ResourceManager.GetString("AssetDefaultMilitaryAreas", resourceCulture); + } + } + + /// + /// Recherche une chaîne localisée semblable à Default Areas - Residential. + /// + public static string AssetDefaultResidentialAreas { + get { + return ResourceManager.GetString("AssetDefaultResidentialAreas", resourceCulture); + } + } + + /// + /// Recherche une chaîne localisée semblable à Default Areas - Retail. + /// + public static string AssetDefaultRetailAreas { + get { + return ResourceManager.GetString("AssetDefaultRetailAreas", resourceCulture); + } + } + /// /// Recherche une chaîne localisée semblable à Default ground - Urban. /// diff --git a/GameRealisticMap.Studio/Labels.fr.resx b/GameRealisticMap.Studio/Labels.fr.resx index c70a9702..465951ea 100644 --- a/GameRealisticMap.Studio/Labels.fr.resx +++ b/GameRealisticMap.Studio/Labels.fr.resx @@ -145,7 +145,7 @@ Le fichier de style de carte est manquant. - Zones par défaut + Zones par défaut - Non urbain / nature Bouche d'incendie @@ -1141,4 +1141,22 @@ Dernière génération le {1} Trottoirs + + Zones par défaut - Agricole + + + Zones par défaut - Bureaux + + + Zones par défaut - Industriel + + + Zones par défaut - Militaire + + + Zones par défaut - Résidentiel + + + Zones par défaut - Commercial + \ No newline at end of file diff --git a/GameRealisticMap.Studio/Labels.resx b/GameRealisticMap.Studio/Labels.resx index 80a37138..454874ec 100644 --- a/GameRealisticMap.Studio/Labels.resx +++ b/GameRealisticMap.Studio/Labels.resx @@ -136,7 +136,7 @@ Commercial Building - Default Areas + Default Areas - Non urban / natural Fence @@ -1141,4 +1141,22 @@ Last generated on {1} Sidewalks + + Default Areas - Agricultural + + + Default Areas - Commercial / offices + + + Default Areas - Industrial + + + Default Areas - Military + + + Default Areas - Residential + + + Default Areas - Retail + \ No newline at end of file diff --git a/GameRealisticMap.Studio/Resources/Icons/DefaultAgriculturalAreas.png b/GameRealisticMap.Studio/Resources/Icons/DefaultAgriculturalAreas.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6daf0ddc70a1e2ec87e2522a3feb8deb2f714a GIT binary patch literal 11691 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 diff --git a/GameRealisticMap.Studio/Resources/Icons/DefaultCommercialAreas.png b/GameRealisticMap.Studio/Resources/Icons/DefaultCommercialAreas.png new file mode 100644 index 0000000000000000000000000000000000000000..ef96709196dceb72aea5c45b596a68041dc70850 GIT binary patch literal 7594 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 M07*qoM6N<$f_T^P(*OVf literal 0 HcmV?d00001 diff --git a/GameRealisticMap.Studio/Resources/Icons/DefaultIndustrialAreas.png b/GameRealisticMap.Studio/Resources/Icons/DefaultIndustrialAreas.png new file mode 100644 index 0000000000000000000000000000000000000000..99fd0f047f3972e1297bd09f12f7e292c8da2190 GIT binary patch literal 6478 zcmV-U8L{SxP)M@hKLgTH>e$Pz4|Wpbh{B5CISapaSRxcoIa%z;TQ~ZDg6pssnW5-ueDxL}YpQ z>zs$YHlS4gZC8A}#HGI=!Y2T_2H^7nG&q?CBjDDVGA1^%1S7lw;7tH~0qh~7(@v)4 zHW!@$o_mf~bSwZb z19*&xb~+KElT?%dT6XI=K7>fg;I1o+(3PUX5!>Xnldcxsk3dU0bwCqSsBF0t|aKD#! z^z(^H66TF}q}U(8;y^f&`m=cEHNS#Rzl{5vYUmY56Dj8Y+jr8*2 zmw~G%N|-%b0xR*?Yep*5qbk7j6!V4RlMoH~@R_C>+T>iU*(tjK{(YBvH-KMKYT(5) z7y+|KOSpQXR8nzo@xDw?0(uE=yB#uvwdIg@|Cbi}|GRvtlu-bjb6UGgdx!{Y065pW zDuNL~!i^u3(Og~p&owO|l(28qIRPW!z&Qh_Ll!{vRQ*ZiyPx|Ul|^o45x~#4@EX5g zdyWH3%MrgQ1Yqv?)LUO{aj%=HjE^N#hYnHXT~_cYUv9_?CU` zM(S`nUB_tI78}cCc_Tb->@fls&ytI7;hPrF8A)~N$_=Ab#=qZgqC1w~J1k2$JZ}_z z?y9N2cb!V#F#$ZiJvq&kXcIgbwHwU!(`3vZU0miH7H}?9-Uc3HfMIf+jaoR|VG5-+ zzMkRwX%b{cv7iq#h^XBOTO4tJtlJSAXENFhV5$@GmBOS(R#N7l4VBiH9}EE?0+J?2 zPt3x}kcHlacx$3AK)7zQgvl4Gvg)M4_i@hW5|!>bELi|8`*^*jX)mDyGGAiA!l}ji zm^cT{hn>lMMu2K^oR3;K+HFEDqAFnoTs1+$mE$BxgY+DbX`EqUE9d+MBI+&0){+F! zvX2KPReg~Y%_}7yr$*$PJ1?Izb_WXfb$U(@17~W z`0&fX9hWO;vhi6M7SIvKbs)UWIiFPQ{DPtd5SpN^hR6Nxl557L#Vd0$8^rc^L@LqC#d9^-~`x&YWC_R4V#vqxvP0eVAGXgS zGg?E9lD{}Q)E0r2BPIrJsL9Y}e|68IqqaYwkAm6&x?g*kJj{H{G;#E;T{wMUKe&~d zv3t_~*HiwC+W+p5%umNOEQG@eq0Dy{j&N59 z8-B5N;G2{0y^Ry^zm+%hP18a+yWqd(b( zNvejUlQRmXr=w@!|1%$bU>jad>fjC<%mKW&xAnGVUwBl=B`+iZ(zKs~Fta4fN`!L` zL$zOa$1QKC+jEP}WNNLX6|JiR?Rjex%`-K^3eA~cK{XB$pY z%CewC7{6bEB&Dk0hOy&q!~1;YDO5XE3oDoYV7py7TLDCL={Kl=soMZBW5G@ESJ&hX z;}1v(1cci_jzWyE@b2XUpFeipjR@4%=Do+~lTlUWyuBR2E?u$p(&p_3KC#(+FcD`@ zHZ|x_WDhIWGz?8e$FWu*`K1B2)9nV(D;1yvh&DdxGazWnHzJmzPI zbIu-nnMVwhf{M)1RIgW*>xV@`_}VZ2I(Gn02zA>pJ?M&*FbL4cmIuEMKJ)UtVMtHn zYfpYL?;{L#&4ArQ?uw`=WOAA$0nhgy4Sc(GLspkn&MM$%n~aAIlY#)C8-!TW^Qrt9 z_|F~7d!4&D54C>Zo3>$m?QMCpmUD)3ykVvZTt0nHTdwOlpOT?V84bT^T!LX%P7x63 zIGOi4x7-u#h*PI*!}!nJ*vrdj@5j25V^(2~FWa@O0(g8Ae?T`WqxHf$5Q=)+!cM2U z`)uCp<$R!nsSihO!vwp|p@Ov3fSB0H+b!k+6IrK#S{yTTk zFwQx+&2(ZdX*2Vr+zSo?SQf|W7S{na7DH`yiQY5-RkaOZ zg2joZCc$%f0Q=!CJkWG{I?iFl*z98!rmn-ZDQVmq!R$JDYEk;<0RepD8!gJg4QnTx zdSR7f$N7jOhAn^K+X&R=_w)CoC+uf&x;-S^(|$Im0BqlWxMy!X5|jRJ)$bdgTy=LZ zkX8jmjpz-gUIEQ}0knj`19icUbV41uyQNyfeo?QJa{}_FV{x>%_YPD80~t;zd_tjD z2t81jtAJ=vPtI$)kYL@jxA$E8b^ZSj2tZNfdt9?18wKMCWiwM?9 zYx0wb#s{i?1^_M3{P7CiFs8U?!cYpSd&JrR?#>KK#&g>wCRq0rYZ@HiTKVEFK;LtZ zClX(AEp-Rbk}mDqPyo7`yAQ7m*z0B$0C04kJO9r>UoYVLo35$3W?^ybJNLKdALX(` z)d`U#hg@AHe2*qj0$47$0gOD$i^S}8(i(fBogK4*J^_pzIpT_9hoWgjXY6lkSVlGd{wnmuIxCLqOZVsrt zMqqz>-+W}#eT?at?P|&;VrWTNW`6Ow-2(tpa*K8i9rL#g19sk3w==(=WKa0>41`&p zq+TQ|=I9UbHXoiS%RS`TC{OY;YOP?Hzp8Zo4M0jL^-sxkN! zj_N8CeqZ)_T*$BP(G!h@hmMSD$;#^i^rLG!4G5r8&~$>P%aA3G>Y#~$&jO|OAw`@j z9<%`g0BSr_oSXwOfrTe-4_x(QnHI_LcpLXz7$zYUkr5#v;I|O)oA4=IOaLCW0@Xyy z9jxnwxGEv3GQ*@X?htFkzPJ~{%N9<&Y4m4mzp zvnE;y`ZHVgOJ=3EQ|qTaYT{T=;f^4~BAhyW1X`Yf7XZ*T6PhYk55yzR?ZBQ)NEw+A z0B4ULhMH%j5CC-Df|e9}95A z00;~mVy{&NpvS}Zf#7Kk06lFHh#C{M*Q+7`kO?@!0aRC4VMJ5?z%`#whBj!PTXisy z5e5JhC37iZu%-%)&6#0*J|8sgLKRS5lY5b5KD4;lDkLujV5BVp6BU40MF3+2*&-Y# z4%~C^t+?mjTMLflOu~Wn)q-eoSB}#yiS)*WXV8lq1)-0=7ke0 zO5I< z0CI1)F^Em?0NdX0|CDw2v7%`2?S`4pb2jaMp?K1VV-&KW?tZE?!wMkXRh@5}c&{Nw z*z)TCtzbmN33%IUgDxey&$Pj`bg`jkk4gZENdOL{_5Fq3MI83$n+zj_8c#rt3VH!OXaq2cVaLWto&wS~iQ>RZ06s1f!L>7i8GZX9jjqoh zwh;Cmse>-C>!t|ry!{~#es~;~>i$@lsq4@xc-%r!m9}1WyAUQJ4AyfGN$+ z8P-s%WIYtI7&`Z#!22h>so6}^5?a6lz>{7;z%TFZ|9`-%GIb<&0uZaXhRKU%S}+8* zh6CWb0EiJrkL(!O5Nx0XAR@D^gTKrN?Il|bYu9Z;BAMy7ojz?0mMxt>B(e<;l3Sj$=53yrcYGZ4M4W>gb#!*vn_)ORQof|4aj)X)0*%afc$5%3}XxDTx|L};Hm;r z|`#47;aDvL#zI85LW zseZ~`14y!j9a|sExf5LO5`c&^3lCzrM^G?~3TXqB(GUQ^x~g~cUC(Rj_^D z?G&0h4&N25+WxHZ`6Y;!0p)4~)HYV_eEo&Tg{JxoH&?&&Y5Muh3CQYA8s-88xq-_d z0Dr(|Zrl9m4Wi)-S`=0_3AZ)ZLu|oY5fBJOaP`k=6rXopKqg738`m_mkb4S#1f26( z0QR6lcNi^{Ho^59l@23dYy(V1!ixaDOhh4}`wC5nhzNw{@%eIRa01;UL z?gOx^*f@qM4ZjSGtj&6t2jjHN3nr75k+$vyZgf}#eo#3?zLJ$#WL>4hJ6-7==7!}y=lQ4Mo zNdmwhi0F61@j7MTlF$5TEZ2Rn0{jZ6;&g*pq{KaLT!t~IjI2d}eC@Hl_Mrvhb0QJ| zc=dN{+7&B#6M)@L#W_qS#3)`R^Lb8XKH#7L0N|yU9_xV`yA7aCPR2V7z!>ZG1*>Lm z-1z80C*yUzjy`f^mp*aa&Ff_!t_0yS`#Zcv*DC+G1c}jE$x>!)*|@U9>A1@|zDG-z zuY8Du*1+MC#z`u@4Is&E_vpq$H?3d4zAVG>Wgp;Oa@WdRIA^~B_~>${RScCX00Ow| zqm^4XKC-&Z>6D+POIJ-WWjqJ)p{qJPrV<4}jN(2SOJCpk$hLB)bW=n zN;Oam;99sOJP|6X4L|@Snck5`D08;F@bF>V8yrg0RX%y=iUk%)YXLsT?X1?P8rWrLR`0F&4mh2g8OZ(6<4D;p}JE?#oys%tsn9|3-o+i80t z0LCaPN%X_5n^yna^~48J5d!Gv_PbWyMHc@7sQhaX`f*bLB(bne^wieP53g`7Q5z~s z0R1dpwqibK(t`y4d6c=0P;LPb04A|>Q1Fv&udHq!=^1(43-Wh>@`u`dzu1r9j2KdF-fAb^uB9g_(y zTQ)uX1TKPenJ*dv^z+%zepU*_XU!uS7U10)d0TiIYhL0|XU77b7~u ofn!Ac5XpFb>xM@zxydg752S?4+=9+ufB*mh07*qoM6N<$f)!5r1^@s6 literal 0 HcmV?d00001 diff --git a/GameRealisticMap.Studio/Resources/Icons/DefaultMilitaryAreas.png b/GameRealisticMap.Studio/Resources/Icons/DefaultMilitaryAreas.png new file mode 100644 index 0000000000000000000000000000000000000000..ef87407f9fa5a537fe83644d0c2c841481b9e7ba GIT binary patch literal 8017 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 Date: Mon, 4 Sep 2023 20:07:10 +0200 Subject: [PATCH 4/4] Fix --- .../DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs | 2 +- .../ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs | 2 +- .../DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs | 2 +- .../ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs index 79f8983e..35b31e6e 100644 --- a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultIndustrialAreasGenerator.cs @@ -5,7 +5,7 @@ namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas { - internal class DefaultIndustrialAreasGenerator : BasicGeneratorBase + internal class DefaultIndustrialAreasGenerator : BasicGeneratorBase { public DefaultIndustrialAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) : base(progress, assets) diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs index 2dd0efc4..408bad54 100644 --- a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultMilitaryAreasGenerator.cs @@ -5,7 +5,7 @@ namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas { - internal class DefaultMilitaryAreasGenerator : BasicGeneratorBase + internal class DefaultMilitaryAreasGenerator : BasicGeneratorBase { public DefaultMilitaryAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) : base(progress, assets) diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs index 191b3a95..5c5b1b28 100644 --- a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultResidentialAreasGenerator.cs @@ -5,7 +5,7 @@ namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas { - internal class DefaultResidentialAreasGenerator : BasicGeneratorBase + internal class DefaultResidentialAreasGenerator : BasicGeneratorBase { public DefaultResidentialAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) : base(progress, assets) diff --git a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs index 81b2ff6a..54a67e3f 100644 --- a/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs +++ b/GameRealisticMap.Arma3/ManMade/DefaultUrbanAreas/DefaultRetailAreasGenerator.cs @@ -5,7 +5,7 @@ namespace GameRealisticMap.Arma3.Nature.DefaultUrbanAreas { - internal class DefaultRetailAreasGenerator : BasicGeneratorBase + internal class DefaultRetailAreasGenerator : BasicGeneratorBase { public DefaultRetailAreasGenerator(IProgressSystem progress, IArma3RegionAssets assets) : base(progress, assets)