diff --git a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs index 7f00360054..7305370b14 100755 --- a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs @@ -19,12 +19,15 @@ namespace OpenRA.Mods.RA.Widgets public class PowerBinWidget : Widget { // Power bar - static float2 powerOrigin = new float2(42, 205); // Relative to radarOrigin - static Size powerSize = new Size(138, 5); + float2 powerOrigin = new float2(42, 205); // Relative to radarOrigin + Size powerSize = new Size(138, 5); + float? lastPowerProvidedPos; float? lastPowerDrainedPos; string powerCollection; + readonly string RadarBin = "INGAME_RADAR_BIN"; + readonly World world; [ObjectCreator.UseCtor] public PowerBinWidget( [ObjectCreator.Param] World world ) @@ -32,21 +35,29 @@ namespace OpenRA.Mods.RA.Widgets this.world = world; } + static Color GetPowerColor(PowerManager pm) + { + if (pm.PowerState == PowerState.Critical) return Color.Red; + if (pm.PowerState == PowerState.Low) return Color.Orange; + return Color.LimeGreen; + } + public override void Draw() { if( world.LocalPlayer == null ) return; + var radarBin = Widget.RootWidget.GetWidget(RadarBin); + powerCollection = "power-" + world.LocalPlayer.Country.Race; var power = world.LocalPlayer.PlayerActor.Trait(); // Nothing to draw - if (power.PowerProvided == 0 - && power.PowerDrained == 0) + if (power.PowerProvided == 0 && power.PowerDrained == 0) return; // Draw bar horizontally - var barStart = powerOrigin + RadarBinWidget.radarOrigin; + var barStart = powerOrigin + radarBin.RadarOrigin; var barEnd = barStart + new float2(powerSize.Width, 0); float powerScaleBy = 100; @@ -58,11 +69,7 @@ namespace OpenRA.Mods.RA.Widgets lastPowerProvidedPos = float2.Lerp(lastPowerProvidedPos.GetValueOrDefault(powerLevelTemp), powerLevelTemp, .3f); float2 powerLevel = new float2(lastPowerProvidedPos.Value, barStart.Y); - var color = Color.LimeGreen; - if (power.PowerState == PowerState.Low) - color = Color.Orange; - if (power.PowerState == PowerState.Critical) - color = Color.Red; + var color = GetPowerColor(power); var colorDark = Graphics.Util.Lerp(0.25f, color, Color.Black); for (int i = 0; i < powerSize.Height; i++) diff --git a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs index e9b5676ece..99cc476c12 100755 --- a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs @@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA.Widgets static float2 radarOpenOrigin = new float2(Game.viewport.Width - 215, 29); static float2 radarClosedOrigin = new float2(Game.viewport.Width - 215, -166); - public static float2 radarOrigin = radarClosedOrigin; + float2 radarOrigin = radarClosedOrigin; float radarMinimapHeight; const int radarSlideAnimationLength = 15; const int radarActivateAnimationLength = 5; @@ -41,6 +41,9 @@ namespace OpenRA.Mods.RA.Widgets Sprite actorSprite; Sprite shroudSprite; + /* hack to expose this to other broken widgets which rely on it */ + public float2 RadarOrigin { get { return radarOrigin; } } + readonly World world; [ObjectCreator.UseCtor] public RadarBinWidget( [ObjectCreator.Param] World world )