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:
@@ -10,6 +10,7 @@
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Traits;
|
||||
|
||||
@@ -29,6 +30,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public bool IsInitialized { get; private set; }
|
||||
|
||||
readonly World world;
|
||||
IRadarTerrainLayer[] radarTerrainLayers;
|
||||
CellLayer<(int, int)> terrainColor;
|
||||
readonly Shroud shroud;
|
||||
|
||||
@@ -50,22 +52,20 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
void UpdateTerrainCell(MPos uv)
|
||||
{
|
||||
if (!world.Map.CustomTerrain.Contains(uv))
|
||||
return;
|
||||
|
||||
if (shroud.IsVisible(uv))
|
||||
UpdateTerrainCellColor(uv);
|
||||
}
|
||||
|
||||
void UpdateTerrainCellColor(MPos uv)
|
||||
{
|
||||
terrainColor[uv] = GetColor(world.Map, uv);
|
||||
terrainColor[uv] = GetColor(world.Map, radarTerrainLayers, uv);
|
||||
|
||||
CellTerrainColorChanged?.Invoke(uv);
|
||||
}
|
||||
|
||||
public void WorldLoaded(World w, WorldRenderer wr)
|
||||
{
|
||||
radarTerrainLayers = w.WorldActor.TraitsImplementing<IRadarTerrainLayer>().ToArray();
|
||||
terrainColor = new CellLayer<(int, int)>(w.Map);
|
||||
|
||||
w.AddFrameEndTask(_ =>
|
||||
@@ -75,7 +75,8 @@ namespace OpenRA.Mods.Common.Traits
|
||||
UpdateTerrainCellColor(uv);
|
||||
|
||||
world.Map.Tiles.CellEntryChanged += cell => UpdateTerrainCell(cell.ToMPos(world.Map));
|
||||
world.Map.CustomTerrain.CellEntryChanged += cell => UpdateTerrainCell(cell.ToMPos(world.Map));
|
||||
foreach (var rtl in radarTerrainLayers)
|
||||
rtl.CellEntryChanged += cell => UpdateTerrainCell(cell.ToMPos(world.Map));
|
||||
|
||||
IsInitialized = true;
|
||||
});
|
||||
@@ -83,14 +84,11 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public (int Left, int Right) this[MPos uv] => terrainColor[uv];
|
||||
|
||||
public static (int Left, int Right) GetColor(Map map, MPos uv)
|
||||
public static (int Left, int Right) GetColor(Map map, IRadarTerrainLayer[] radarTerrainLayers, MPos uv)
|
||||
{
|
||||
var custom = map.CustomTerrain[uv];
|
||||
if (custom != byte.MaxValue)
|
||||
{
|
||||
var c = map.Rules.TerrainInfo.TerrainTypes[custom].Color.ToArgb();
|
||||
return (c, c);
|
||||
}
|
||||
foreach (var rtl in radarTerrainLayers)
|
||||
if (rtl.TryGetTerrainColorPair(uv, out var c))
|
||||
return (c.Left.ToArgb(), c.Right.ToArgb());
|
||||
|
||||
var tc = map.GetTerrainColorPair(uv);
|
||||
return (tc.Left.ToArgb(), tc.Right.ToArgb());
|
||||
|
||||
Reference in New Issue
Block a user