Adjust IRadarSignature to support per-cell colors.

This commit is contained in:
Paul Chote
2015-04-04 00:21:29 +01:00
parent 9df371b393
commit 145f7b28f5
4 changed files with 12 additions and 20 deletions

View File

@@ -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();
}
}
}

View File

@@ -150,8 +150,7 @@ namespace OpenRA.Traits
public interface IRadarSignature
{
IEnumerable<CPos> RadarSignatureCells(Actor self);
Color RadarSignatureColor(Actor self);
IEnumerable<Pair<CPos, Color>> RadarSignatureCells(Actor self);
}
public interface IVisibilityModifier { bool IsVisible(Actor self, Player byPlayer); }

View File

@@ -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<CPos> 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<Pair<CPos, Color>> RadarSignatureCells(Actor self)
{
var mod = self.TraitsImplementing<IRadarColorModifier>().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));
}
}
}

View File

@@ -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();
}
}
}