Replace Map.CustomTerrain radar colors with IRadarTerrainLayer.

* TSVeinsRenderer now shows border cells on the radar
* BuildableTerrainLayer now uses the radar colors defined on the individual tiles
* CliffBackImpassabilityLayer no longer overrides the underlying terrain color.
This commit is contained in:
Paul Chote
2021-08-20 18:43:22 +01:00
committed by abcdefg30
parent 72c0c7e38b
commit 7f94d67d39
11 changed files with 278 additions and 58 deletions

View File

@@ -34,6 +34,7 @@ namespace OpenRA.Mods.Common.Widgets
readonly World world;
readonly WorldRenderer worldRenderer;
readonly RadarPings radarPings;
readonly IRadarTerrainLayer[] radarTerrainLayers;
readonly bool isRectangularIsometric;
readonly int cellWidth;
readonly int previewWidth;
@@ -69,7 +70,7 @@ namespace OpenRA.Mods.Common.Widgets
this.worldRenderer = worldRenderer;
radarPings = world.WorldActor.TraitOrDefault<RadarPings>();
radarTerrainLayers = world.WorldActor.TraitsImplementing<IRadarTerrainLayer>().ToArray();
isRectangularIsometric = world.Map.Grid.Type == MapGridType.RectangularIsometric;
cellWidth = isRectangularIsometric ? 2 : 1;
previewWidth = world.Map.MapSize.X;
@@ -152,7 +153,8 @@ namespace OpenRA.Mods.Common.Widgets
else
{
world.Map.Tiles.CellEntryChanged -= CellTerrainColorChanged;
world.Map.CustomTerrain.CellEntryChanged -= CellTerrainColorChanged;
foreach (var rtl in radarTerrainLayers)
rtl.CellEntryChanged -= CellTerrainColorChanged;
}
if (newPlayerRadarTerrain != null)
@@ -160,7 +162,8 @@ namespace OpenRA.Mods.Common.Widgets
else
{
world.Map.Tiles.CellEntryChanged += CellTerrainColorChanged;
world.Map.CustomTerrain.CellEntryChanged += CellTerrainColorChanged;
foreach (var rtl in radarTerrainLayers)
rtl.CellEntryChanged += CellTerrainColorChanged;
}
playerRadarTerrain = newPlayerRadarTerrain;
@@ -206,7 +209,8 @@ namespace OpenRA.Mods.Common.Widgets
void UpdateTerrainColor(MPos uv)
{
var colorPair = playerRadarTerrain != null && playerRadarTerrain.IsInitialized ? playerRadarTerrain[uv] : PlayerRadarTerrain.GetColor(world.Map, uv);
var colorPair = playerRadarTerrain != null && playerRadarTerrain.IsInitialized ?
playerRadarTerrain[uv] : PlayerRadarTerrain.GetColor(world.Map, radarTerrainLayers, uv);
var leftColor = colorPair.Left;
var rightColor = colorPair.Right;