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