Refine civilian building placement and multibrushes
This commit is contained in:
committed by
Gustas Kažukauskas
parent
cc632660eb
commit
98fe3c98ab
@@ -338,7 +338,8 @@ namespace OpenRA.Mods.Common.MapGenerator
|
||||
List<ActorPlan> actorPlans,
|
||||
CellLayer<Replaceability> replace,
|
||||
IReadOnlyList<MultiBrush> availableBrushes,
|
||||
MersenneTwister random)
|
||||
MersenneTwister random,
|
||||
bool alwaysPreferLargerBrushes = false)
|
||||
{
|
||||
var brushesByAreaDict = new Dictionary<int, List<MultiBrush>>();
|
||||
foreach (var brush in availableBrushes)
|
||||
@@ -438,7 +439,7 @@ namespace OpenRA.Mods.Common.MapGenerator
|
||||
var brushWeights = brushes.Select(o => o.Weight).ToArray();
|
||||
var brushWeightForArea = brushWeights.Sum();
|
||||
var remainingQuota =
|
||||
brushArea == 1
|
||||
(brushArea == 1 || alwaysPreferLargerBrushes)
|
||||
? int.MaxValue
|
||||
: (int)(((long)replaceMposes.Count * brushWeightForArea + brushTotalWeight - 1) / brushTotalWeight);
|
||||
RefreshIndices();
|
||||
|
||||
@@ -175,6 +175,8 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[FieldLoader.Require]
|
||||
public readonly int CivilianBuildings = default;
|
||||
[FieldLoader.Require]
|
||||
public readonly int CivilianBuildingDensity = default;
|
||||
[FieldLoader.Require]
|
||||
public readonly int MinimumCivilianBuildingDensity = default;
|
||||
[FieldLoader.Require]
|
||||
public readonly int CivilianBuildingDensityRadius = default;
|
||||
@@ -440,6 +442,8 @@ namespace OpenRA.Mods.Common.Traits
|
||||
throw new MapGenerationException("MinimumBuildings must be <= maximumBuildings");
|
||||
if (CivilianBuildings < 0 || CivilianBuildings > FractionMax)
|
||||
throw new MapGenerationException($"CivilianBuildings must be between 0 and {FractionMax} inclusive");
|
||||
if (CivilianBuildingDensity < 0 || CivilianBuildingDensity > FractionMax)
|
||||
throw new MapGenerationException($"CivilianBuildingDensity must be between 0 and {FractionMax} inclusive");
|
||||
if (MinimumCivilianBuildingDensity < 0 || MinimumCivilianBuildingDensity > FractionMax)
|
||||
throw new MapGenerationException($"MinimumCivilianBuildingDensity must be between 0 and {FractionMax} inclusive");
|
||||
if (CivilianBuildingDensityRadius < 0)
|
||||
@@ -1679,13 +1683,26 @@ namespace OpenRA.Mods.Common.Traits
|
||||
param.CivilianBuildingsFeatureSize,
|
||||
wavelength => 1);
|
||||
|
||||
var densityNoise = new CellLayer<int>(map);
|
||||
NoiseUtils.SymmetricFractalNoiseIntoCellLayer(
|
||||
decorationRandom,
|
||||
densityNoise,
|
||||
param.Rotations,
|
||||
param.Mirror,
|
||||
1024,
|
||||
NoiseUtils.PinkAmplitude);
|
||||
CellLayerUtils.CalibrateQuantileInPlace(
|
||||
densityNoise,
|
||||
0,
|
||||
FractionMax - param.CivilianBuildingDensity, FractionMax);
|
||||
|
||||
var decorable = new CellLayer<bool>(map);
|
||||
var totalDecorable = 0;
|
||||
foreach (var mpos in map.AllCells.MapCoords)
|
||||
{
|
||||
var isDecorable =
|
||||
map.Tiles[mpos].Type == param.LandTile
|
||||
&& zoneable[mpos] && space[mpos] && !reserved[mpos];
|
||||
&& zoneable[mpos] && space[mpos] && !reserved[mpos] && densityNoise[mpos] >= 0;
|
||||
decorable[mpos] = isDecorable;
|
||||
if (isDecorable)
|
||||
totalDecorable++;
|
||||
@@ -1736,7 +1753,13 @@ namespace OpenRA.Mods.Common.Traits
|
||||
foreach (var mpos in map.AllCells.MapCoords)
|
||||
replace[mpos] = decorable[mpos] ? MultiBrush.Replaceability.Actor : MultiBrush.Replaceability.None;
|
||||
|
||||
MultiBrush.PaintArea(map, actorPlans, replace, param.CivilianBuildingsObstacles, decorationTilingRandom);
|
||||
MultiBrush.PaintArea(
|
||||
map,
|
||||
actorPlans,
|
||||
replace,
|
||||
param.CivilianBuildingsObstacles,
|
||||
decorationTilingRandom,
|
||||
alwaysPreferLargerBrushes: true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,8 +49,9 @@
|
||||
ExpansionInner: 2
|
||||
ExpansionBorder: 1
|
||||
CivilianBuildings: 125
|
||||
MinimumCivilianBuildingDensity: 50
|
||||
CivilianBuildingDensityRadius: 6
|
||||
CivilianBuildingDensity: 500
|
||||
MinimumCivilianBuildingDensity: 90
|
||||
CivilianBuildingDensityRadius: 3
|
||||
DefaultResource: Tiberium
|
||||
ResourceSpawnSeeds:
|
||||
split2: Tiberium
|
||||
|
||||
@@ -3195,24 +3195,18 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v20:
|
||||
Actor: v20
|
||||
Weight: 25000
|
||||
MultiBrush@v21:
|
||||
Actor: v21
|
||||
Weight: 25000
|
||||
MultiBrush@v22:
|
||||
Actor: v22
|
||||
Weight: 10000
|
||||
MultiBrush@v23:
|
||||
Actor: v23
|
||||
MultiBrush@v24:
|
||||
Actor: v24
|
||||
Weight: 25000
|
||||
MultiBrush@v25:
|
||||
Actor: v25
|
||||
Weight: 25000
|
||||
MultiBrush@v26:
|
||||
Actor: v26
|
||||
Weight: 10000
|
||||
MultiBrush@v27:
|
||||
Actor: v27
|
||||
MultiBrush@v28:
|
||||
@@ -3221,16 +3215,12 @@ MultiBrushCollections:
|
||||
Actor: v29
|
||||
MultiBrush@v30:
|
||||
Actor: v30
|
||||
Weight: 10000
|
||||
MultiBrush@v31:
|
||||
Actor: v31
|
||||
Weight: 10000
|
||||
MultiBrush@v32:
|
||||
Actor: v32
|
||||
Weight: 10000
|
||||
MultiBrush@v33:
|
||||
Actor: v33
|
||||
Weight: 10000
|
||||
MultiBrush@v34:
|
||||
Actor: v34
|
||||
MultiBrush@v35:
|
||||
|
||||
@@ -2630,25 +2630,16 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v01:
|
||||
Actor: v01
|
||||
Weight: 25000
|
||||
MultiBrush@v02:
|
||||
Actor: v02
|
||||
Weight: 25000
|
||||
MultiBrush@v03:
|
||||
Actor: v03
|
||||
Weight: 25000
|
||||
MultiBrush@v04:
|
||||
Actor: v04
|
||||
Weight: 25000
|
||||
MultiBrush@v05:
|
||||
Actor: v05
|
||||
Weight: 10000
|
||||
MultiBrush@v06:
|
||||
Actor: v06
|
||||
Weight: 10000
|
||||
MultiBrush@v07:
|
||||
Actor: v07
|
||||
Weight: 10000
|
||||
MultiBrush@v08:
|
||||
Actor: v08
|
||||
MultiBrush@v09:
|
||||
@@ -2657,17 +2648,3 @@ MultiBrushCollections:
|
||||
Actor: v10
|
||||
MultiBrush@v11:
|
||||
Actor: v11
|
||||
MultiBrush@v12:
|
||||
Actor: v12
|
||||
MultiBrush@v13:
|
||||
Actor: v13
|
||||
MultiBrush@v14:
|
||||
Actor: v14
|
||||
MultiBrush@v15:
|
||||
Actor: v15
|
||||
MultiBrush@v16:
|
||||
Actor: v16
|
||||
MultiBrush@v17:
|
||||
Actor: v17
|
||||
MultiBrush@v18:
|
||||
Actor: v18
|
||||
|
||||
@@ -2632,25 +2632,18 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v01:
|
||||
Actor: v01
|
||||
Weight: 25000
|
||||
MultiBrush@v02:
|
||||
Actor: v02
|
||||
Weight: 25000
|
||||
MultiBrush@v03:
|
||||
Actor: v03
|
||||
Weight: 25000
|
||||
MultiBrush@v04:
|
||||
Actor: v04
|
||||
Weight: 25000
|
||||
MultiBrush@v05:
|
||||
Actor: v05
|
||||
Weight: 10000
|
||||
MultiBrush@v06:
|
||||
Actor: v06
|
||||
Weight: 10000
|
||||
MultiBrush@v07:
|
||||
Actor: v07
|
||||
Weight: 10000
|
||||
MultiBrush@v08:
|
||||
Actor: v08
|
||||
MultiBrush@v09:
|
||||
@@ -2661,15 +2654,7 @@ MultiBrushCollections:
|
||||
Actor: v11
|
||||
MultiBrush@v12:
|
||||
Actor: v12
|
||||
Weight: 500
|
||||
MultiBrush@v13:
|
||||
Actor: v13
|
||||
MultiBrush@v14:
|
||||
Actor: v14
|
||||
MultiBrush@v15:
|
||||
Actor: v15
|
||||
MultiBrush@v16:
|
||||
Actor: v16
|
||||
MultiBrush@v17:
|
||||
Actor: v17
|
||||
MultiBrush@v18:
|
||||
Actor: v18
|
||||
Weight: 500
|
||||
|
||||
@@ -2635,25 +2635,18 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v01:
|
||||
Actor: v01
|
||||
Weight: 25000
|
||||
MultiBrush@v02:
|
||||
Actor: v02
|
||||
Weight: 25000
|
||||
MultiBrush@v03:
|
||||
Actor: v03
|
||||
Weight: 25000
|
||||
MultiBrush@v04:
|
||||
Actor: v04
|
||||
Weight: 25000
|
||||
MultiBrush@v05:
|
||||
Actor: v05
|
||||
Weight: 10000
|
||||
MultiBrush@v06:
|
||||
Actor: v06
|
||||
Weight: 10000
|
||||
MultiBrush@v07:
|
||||
Actor: v07
|
||||
Weight: 10000
|
||||
MultiBrush@v08:
|
||||
Actor: v08
|
||||
MultiBrush@v09:
|
||||
@@ -2662,14 +2655,6 @@ MultiBrushCollections:
|
||||
Actor: v10
|
||||
MultiBrush@v11:
|
||||
Actor: v11
|
||||
MultiBrush@v12:
|
||||
Actor: v12
|
||||
MultiBrush@v13:
|
||||
Actor: v13
|
||||
MultiBrush@v14:
|
||||
Actor: v14
|
||||
MultiBrush@v15:
|
||||
Actor: v15
|
||||
MultiBrush@v16:
|
||||
Actor: v16
|
||||
MultiBrush@v17:
|
||||
|
||||
@@ -2673,25 +2673,18 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v01:
|
||||
Actor: v01
|
||||
Weight: 25000
|
||||
MultiBrush@v02:
|
||||
Actor: v02
|
||||
Weight: 25000
|
||||
MultiBrush@v03:
|
||||
Actor: v03
|
||||
Weight: 25000
|
||||
MultiBrush@v04:
|
||||
Actor: v04
|
||||
Weight: 25000
|
||||
MultiBrush@v05:
|
||||
Actor: v05
|
||||
Weight: 10000
|
||||
MultiBrush@v06:
|
||||
Actor: v06
|
||||
Weight: 10000
|
||||
MultiBrush@v07:
|
||||
Actor: v07
|
||||
Weight: 10000
|
||||
MultiBrush@v08:
|
||||
Actor: v08
|
||||
MultiBrush@v09:
|
||||
@@ -2702,15 +2695,13 @@ MultiBrushCollections:
|
||||
Actor: v11
|
||||
MultiBrush@v12:
|
||||
Actor: v12
|
||||
Weight: 250
|
||||
MultiBrush@v13:
|
||||
Actor: v13
|
||||
MultiBrush@v14:
|
||||
Actor: v14
|
||||
MultiBrush@v15:
|
||||
Actor: v15
|
||||
MultiBrush@v16:
|
||||
Actor: v16
|
||||
MultiBrush@v17:
|
||||
Actor: v17
|
||||
MultiBrush@v18:
|
||||
Actor: v18
|
||||
Weight: 250
|
||||
MultiBrush@v12.husk:
|
||||
Actor: v12.husk
|
||||
Weight: 250
|
||||
MultiBrush@v13.husk:
|
||||
Actor: v13.husk
|
||||
Weight: 250
|
||||
|
||||
@@ -49,8 +49,9 @@
|
||||
ExpansionInner: 2
|
||||
ExpansionBorder: 1
|
||||
CivilianBuildings: 125
|
||||
MinimumCivilianBuildingDensity: 50
|
||||
CivilianBuildingDensityRadius: 6
|
||||
CivilianBuildingDensity: 500
|
||||
MinimumCivilianBuildingDensity: 90
|
||||
CivilianBuildingDensityRadius: 3
|
||||
DefaultResource: Ore
|
||||
ResourceSpawnSeeds:
|
||||
mine: Ore
|
||||
@@ -180,7 +181,6 @@
|
||||
Settings:
|
||||
Water: 500
|
||||
TerrainFeatureSize: 102400
|
||||
CivilianBuildings: 256
|
||||
Choice@Wetlands:
|
||||
Label: label-ra-map-generator-choice-terrain-type-wetlands
|
||||
Settings:
|
||||
|
||||
@@ -4169,24 +4169,18 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v20:
|
||||
Actor: v20
|
||||
Weight: 25000
|
||||
MultiBrush@v21:
|
||||
Actor: v21
|
||||
Weight: 25000
|
||||
MultiBrush@v22:
|
||||
Actor: v22
|
||||
Weight: 10000
|
||||
MultiBrush@v23:
|
||||
Actor: v23
|
||||
MultiBrush@v24:
|
||||
Actor: v24
|
||||
Weight: 25000
|
||||
MultiBrush@v25:
|
||||
Actor: v25
|
||||
Weight: 25000
|
||||
MultiBrush@v26:
|
||||
Actor: v26
|
||||
Weight: 10000
|
||||
MultiBrush@v27:
|
||||
Actor: v27
|
||||
MultiBrush@v28:
|
||||
@@ -4195,16 +4189,12 @@ MultiBrushCollections:
|
||||
Actor: v29
|
||||
MultiBrush@v30:
|
||||
Actor: v30
|
||||
Weight: 10000
|
||||
MultiBrush@v31:
|
||||
Actor: v31
|
||||
Weight: 10000
|
||||
MultiBrush@v32:
|
||||
Actor: v32
|
||||
Weight: 10000
|
||||
MultiBrush@v33:
|
||||
Actor: v33
|
||||
Weight: 10000
|
||||
MultiBrush@v34:
|
||||
Actor: v34
|
||||
MultiBrush@v35:
|
||||
|
||||
@@ -4354,25 +4354,18 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v01:
|
||||
Actor: v01
|
||||
Weight: 25000
|
||||
MultiBrush@v02:
|
||||
Actor: v02
|
||||
Weight: 25000
|
||||
MultiBrush@v03:
|
||||
Actor: v03
|
||||
Weight: 25000
|
||||
MultiBrush@v04:
|
||||
Actor: v04
|
||||
Weight: 25000
|
||||
MultiBrush@v05:
|
||||
Actor: v05
|
||||
Weight: 10000
|
||||
MultiBrush@v06:
|
||||
Actor: v06
|
||||
Weight: 10000
|
||||
MultiBrush@v07:
|
||||
Actor: v07
|
||||
Weight: 10000
|
||||
MultiBrush@v08:
|
||||
Actor: v08
|
||||
MultiBrush@v09:
|
||||
@@ -4383,18 +4376,10 @@ MultiBrushCollections:
|
||||
Actor: v11
|
||||
MultiBrush@v12:
|
||||
Actor: v12
|
||||
Weight: 500
|
||||
MultiBrush@v13:
|
||||
Actor: v13
|
||||
MultiBrush@v14:
|
||||
Actor: v14
|
||||
MultiBrush@v15:
|
||||
Actor: v15
|
||||
MultiBrush@v16:
|
||||
Actor: v16
|
||||
MultiBrush@v17:
|
||||
Actor: v17
|
||||
MultiBrush@v18:
|
||||
Actor: v18
|
||||
Weight: 500
|
||||
MultiBrush@railmine:
|
||||
Actor: railmine
|
||||
MultiBrush@snowhut:
|
||||
|
||||
@@ -4841,25 +4841,18 @@ MultiBrushCollections:
|
||||
CivilianBuildings:
|
||||
MultiBrush@v01:
|
||||
Actor: v01
|
||||
Weight: 25000
|
||||
MultiBrush@v02:
|
||||
Actor: v02
|
||||
Weight: 25000
|
||||
MultiBrush@v03:
|
||||
Actor: v03
|
||||
Weight: 25000
|
||||
MultiBrush@v04:
|
||||
Actor: v04
|
||||
Weight: 25000
|
||||
MultiBrush@v05:
|
||||
Actor: v05
|
||||
Weight: 10000
|
||||
MultiBrush@v06:
|
||||
Actor: v06
|
||||
Weight: 10000
|
||||
MultiBrush@v07:
|
||||
Actor: v07
|
||||
Weight: 10000
|
||||
MultiBrush@v08:
|
||||
Actor: v08
|
||||
MultiBrush@v09:
|
||||
@@ -4868,14 +4861,6 @@ MultiBrushCollections:
|
||||
Actor: v10
|
||||
MultiBrush@v11:
|
||||
Actor: v11
|
||||
MultiBrush@v12:
|
||||
Actor: v12
|
||||
MultiBrush@v13:
|
||||
Actor: v13
|
||||
MultiBrush@v14:
|
||||
Actor: v14
|
||||
MultiBrush@v15:
|
||||
Actor: v15
|
||||
MultiBrush@v16:
|
||||
Actor: v16
|
||||
MultiBrush@v17:
|
||||
@@ -4884,6 +4869,7 @@ MultiBrushCollections:
|
||||
Actor: v18
|
||||
MultiBrush@railmine:
|
||||
Actor: railmine
|
||||
Weight: 250
|
||||
MultiBrush@rice:
|
||||
Actor: rice
|
||||
MultiBrush@asianhut:
|
||||
|
||||
Reference in New Issue
Block a user