From cb41be113a3031ffa8c5379cf5f0d4ee76dc88c4 Mon Sep 17 00:00:00 2001 From: Nikita Pozdeev Date: Sun, 14 Jun 2020 22:31:10 +0400 Subject: [PATCH] Fix map editor radar ignoring color from terrain --- .../Traits/Radar/RadarColorFromTerrain.cs | 15 ++++++++++----- .../Traits/World/EditorActorLayer.cs | 2 +- .../Traits/World/EditorActorPreview.cs | 5 +++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Radar/RadarColorFromTerrain.cs b/OpenRA.Mods.Common/Traits/Radar/RadarColorFromTerrain.cs index 07e27c16d1..039b4c2de5 100644 --- a/OpenRA.Mods.Common/Traits/Radar/RadarColorFromTerrain.cs +++ b/OpenRA.Mods.Common/Traits/Radar/RadarColorFromTerrain.cs @@ -19,17 +19,22 @@ namespace OpenRA.Mods.Common.Traits.Radar [FieldLoader.Require] public readonly string Terrain; - public override object Create(ActorInitializer init) { return new RadarColorFromTerrain(init.Self, Terrain); } + public Color GetColorFromTerrain(World world) + { + var tileSet = world.Map.Rules.TileSet; + return tileSet[tileSet.GetTerrainIndex(Terrain)].Color; + } + + public override object Create(ActorInitializer init) { return new RadarColorFromTerrain(init.Self, this); } } public class RadarColorFromTerrain : IRadarColorModifier { - Color c; + readonly Color c; - public RadarColorFromTerrain(Actor self, string terrain) + public RadarColorFromTerrain(Actor self, RadarColorFromTerrainInfo info) { - var tileSet = self.World.Map.Rules.TileSet; - c = tileSet[tileSet.GetTerrainIndex(terrain)].Color; + c = info.GetColorFromTerrain(self.World); } public bool VisibleOnRadar(Actor self) { return true; } diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs index 90c44864e4..be9107ff52 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs @@ -316,7 +316,7 @@ namespace OpenRA.Mods.Common.Traits { foreach (var previewsForCell in cellMap) foreach (var preview in previewsForCell.Value) - destinationBuffer.Add(Pair.New(previewsForCell.Key, preview.Owner.Color)); + destinationBuffer.Add(Pair.New(previewsForCell.Key, preview.RadarColor)); } public EditorActorPreview this[string id] diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs b/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs index 169b4b6763..ce1265fa9a 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs @@ -15,6 +15,7 @@ using System.IO; using System.Linq; using OpenRA.Graphics; using OpenRA.Mods.Common.Graphics; +using OpenRA.Mods.Common.Traits.Radar; using OpenRA.Primitives; using OpenRA.Traits; @@ -49,6 +50,7 @@ namespace OpenRA.Mods.Common.Traits readonly TooltipInfoBase tooltip; IActorPreview[] previews; readonly ActorReference reference; + public readonly Color RadarColor; public EditorActorPreview(WorldRenderer worldRenderer, string id, ActorReference reference, PlayerReference owner) { @@ -75,6 +77,9 @@ namespace OpenRA.Mods.Common.Traits var subCellInit = reference.GetOrDefault(); var subCell = subCellInit != null ? subCellInit.Value : SubCell.Any; + var radarColorInfo = Info.TraitInfoOrDefault(); + RadarColor = radarColorInfo == null ? owner.Color : radarColorInfo.GetColorFromTerrain(world); + if (ios != null) Footprint = ios.OccupiedCells(Info, location, subCell); else