diff --git a/OpenRA.Game/Graphics/Minimap.cs b/OpenRA.Game/Graphics/Minimap.cs index b092b3c1b5..e464dbc1ba 100644 --- a/OpenRA.Game/Graphics/Minimap.cs +++ b/OpenRA.Game/Graphics/Minimap.cs @@ -147,12 +147,11 @@ namespace OpenRA.Graphics if (!t.Actor.IsInWorld || world.FogObscures(t.Actor)) continue; - var color = t.Trait.RadarSignatureColor(t.Actor); foreach (var cell in t.Trait.RadarSignatureCells(t.Actor)) { - var uv = cell.ToMPos(map); + var uv = cell.First.ToMPos(map); if (b.Contains(uv.U, uv.V)) - colors[(uv.V - b.Top) * stride + uv.U - b.Left] = color.ToArgb(); + colors[(uv.V - b.Top) * stride + uv.U - b.Left] = cell.Second.ToArgb(); } } } diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index a4e5561ee5..015632cef0 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -150,8 +150,7 @@ namespace OpenRA.Traits public interface IRadarSignature { - IEnumerable RadarSignatureCells(Actor self); - Color RadarSignatureColor(Actor self); + IEnumerable> RadarSignatureCells(Actor self); } public interface IVisibilityModifier { bool IsVisible(Actor self, Player byPlayer); } diff --git a/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs b/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs index 4d0a6a8fe6..5697e9dc60 100644 --- a/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs +++ b/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; +using OpenRA.Primitives; using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits @@ -28,21 +29,15 @@ namespace OpenRA.Mods.Common.Traits public AppearsOnRadar(AppearsOnRadarInfo info) { this.info = info; } - public IEnumerable RadarSignatureCells(Actor self) - { - if (info.UseLocation) - return new CPos[] { self.Location }; - else - return self.OccupiesSpace.OccupiedCells().Select(c => c.First); - } - - public Color RadarSignatureColor(Actor self) + public IEnumerable> RadarSignatureCells(Actor self) { var mod = self.TraitsImplementing().FirstOrDefault(); - if (mod != null) - return mod.RadarColorOverride(self); + var color = mod != null ? mod.RadarColorOverride(self) : self.Owner.Color.RGB; - return self.Owner.Color.RGB; + if (info.UseLocation) + return new[] { Pair.New(self.Location, color) }; + else + return self.OccupiesSpace.OccupiedCells().Select(c => Pair.New(c.First, color)); } } } \ No newline at end of file diff --git a/OpenRA.Mods.Common/Widgets/RadarWidget.cs b/OpenRA.Mods.Common/Widgets/RadarWidget.cs index 324998366c..aeb82d0063 100644 --- a/OpenRA.Mods.Common/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.Common/Widgets/RadarWidget.cs @@ -305,13 +305,12 @@ namespace OpenRA.Mods.Common.Widgets if (!t.Actor.IsInWorld || world.FogObscures(t.Actor)) continue; - var color = t.Trait.RadarSignatureColor(t.Actor); foreach (var cell in t.Trait.RadarSignatureCells(t.Actor)) { - var uv = cell.ToMPos(world.Map); + var uv = cell.First.ToMPos(world.Map); if (world.Map.Bounds.Contains(uv.U, uv.V)) - colors[(uv.V + dy) * stride + uv.U + dx] = color.ToArgb(); + colors[(uv.V + dy) * stride + uv.U + dx] = cell.Second.ToArgb(); } } }