diff --git a/OpenRA.Mods.RA/JamsMissiles.cs b/OpenRA.Mods.RA/JamsMissiles.cs
index 34c8f0be15..0f04fdd1ef 100644
--- a/OpenRA.Mods.RA/JamsMissiles.cs
+++ b/OpenRA.Mods.RA/JamsMissiles.cs
@@ -11,22 +11,25 @@
using OpenRA;
using OpenRA.Traits;
-class JamsMissilesInfo : ITraitInfo
+namespace OpenRA.Mods.RA
{
- public readonly int Range = 0;
- public readonly bool AlliedMissiles = true;
- public readonly int Chance = 100;
+ class JamsMissilesInfo : ITraitInfo
+ {
+ public readonly int Range = 0;
+ public readonly bool AlliedMissiles = true;
+ public readonly int Chance = 100;
- public object Create(ActorInitializer init) { return new JamsMissiles(this); }
-}
+ public object Create(ActorInitializer init) { return new JamsMissiles(this); }
+ }
-class JamsMissiles
-{
- readonly JamsMissilesInfo info;
+ class JamsMissiles
+ {
+ readonly JamsMissilesInfo info;
- public int Range { get { return info.Range; } }
- public bool AlliedMissiles { get { return info.AlliedMissiles; } }
- public int Chance { get { return info.Chance; } }
+ public int Range { get { return info.Range; } }
+ public bool AlliedMissiles { get { return info.AlliedMissiles; } }
+ public int Chance { get { return info.Chance; } }
- public JamsMissiles(JamsMissilesInfo info) { this.info = info; }
+ public JamsMissiles(JamsMissilesInfo info) { this.info = info; }
+ }
}
\ No newline at end of file
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index 737680152a..9af3413a88 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -302,6 +302,7 @@
+
diff --git a/OpenRA.Mods.RA/RenderJammerCircle.cs b/OpenRA.Mods.RA/RenderJammerCircle.cs
new file mode 100644
index 0000000000..b70c985f92
--- /dev/null
+++ b/OpenRA.Mods.RA/RenderJammerCircle.cs
@@ -0,0 +1,63 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System.Drawing;
+using OpenRA.Graphics;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.RA
+{
+ //todo: remove all the Render*Circle duplication
+ class RenderJammerCircleInfo : TraitInfo, IPlaceBuildingDecoration
+ {
+ public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation)
+ {
+ var jamsMissiles = ai.Traits.GetOrDefault();
+ if (jamsMissiles != null)
+ RenderJammerCircle.DrawRangeCircle(wr, centerLocation.ToFloat2(), jamsMissiles.Range, Color.Red);
+
+ var jamsRadar = ai.Traits.GetOrDefault();
+ if (jamsRadar != null)
+ RenderJammerCircle.DrawRangeCircle(wr, centerLocation.ToFloat2(), jamsRadar.Range, Color.Blue);
+
+ foreach (var a in w.ActorsWithTrait())
+ if (a.Actor.Owner == a.Actor.World.LocalPlayer)
+ a.Trait.RenderBeforeWorld(wr, a.Actor);
+ }
+ }
+
+ public class RenderJammerCircle : IPreRenderSelection
+ {
+ public void RenderBeforeWorld(WorldRenderer wr, Actor self)
+ {
+ if (self.Owner != self.World.LocalPlayer)
+ return;
+
+ var jamsMissiles = self.Info.Traits.GetOrDefault();
+ if (jamsMissiles != null)
+ DrawRangeCircle(wr, self.CenterLocation.ToFloat2(), jamsMissiles.Range, Color.Red);
+
+ var jamsRadar = self.Info.Traits.GetOrDefault();
+ if (jamsRadar != null)
+ DrawRangeCircle(wr, self.CenterLocation.ToFloat2(), jamsRadar.Range, Color.Blue);
+ }
+
+ public static void DrawRangeCircle(WorldRenderer wr, float2 location, int range, Color color)
+ {
+ wr.DrawRangeCircleWithContrast(
+ Color.FromArgb(128, color),
+ location,
+ range,
+ Color.FromArgb(96, Color.Black),
+ 1);
+ }
+ }
+}
+
diff --git a/mods/ra/rules/vehicles.yaml b/mods/ra/rules/vehicles.yaml
index 90bc492d64..c3d6028568 100644
--- a/mods/ra/rules/vehicles.yaml
+++ b/mods/ra/rules/vehicles.yaml
@@ -564,6 +564,7 @@ MRJ:
Range: 15
JamsMissiles:
Range: 3
+ RenderJammerCircle:
1TNK.Husk:
Inherits: ^Husk