diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
index 0713fd3395..67d44f1880 100644
--- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
+++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
@@ -102,7 +102,6 @@
-
@@ -110,7 +109,6 @@
-
diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs
index 0bc7b465f2..df979a5ff1 100644
--- a/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs
+++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncIngameChromeLogic.cs
@@ -125,11 +125,12 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
siloBar.GetProvided = () => playerResources.OreCapacity;
siloBar.GetUsed = () => playerResources.Ore;
siloBar.TooltipFormat = "Silo Usage: {0}/{1}";
- siloBar.RightIndicator = true;
siloBar.GetBarColor = () =>
{
- if (playerResources.Ore == playerResources.OreCapacity) return Color.Red;
- if (playerResources.Ore >= 0.8 * playerResources.OreCapacity) return Color.Orange;
+ if (playerResources.Ore == playerResources.OreCapacity)
+ return Color.Red;
+ if (playerResources.Ore >= 0.8 * playerResources.OreCapacity)
+ return Color.Orange;
return Color.LimeGreen;
};
@@ -137,11 +138,12 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
powerBar.GetProvided = () => powerManager.PowerProvided;
powerBar.GetUsed = () => powerManager.PowerDrained;
powerBar.TooltipFormat = "Power Usage: {0}/{1}";
- powerBar.RightIndicator = false;
powerBar.GetBarColor = () =>
{
- if (powerManager.PowerState == PowerState.Critical) return Color.Red;
- if (powerManager.PowerState == PowerState.Low) return Color.Orange;
+ if (powerManager.PowerState == PowerState.Critical)
+ return Color.Red;
+ if (powerManager.PowerState == PowerState.Low)
+ return Color.Orange;
return Color.LimeGreen;
};
}
diff --git a/OpenRA.Mods.Cnc/Widgets/ResourceBarWidget.cs b/OpenRA.Mods.Cnc/Widgets/ResourceBarWidget.cs
deleted file mode 100755
index 7038fb46ba..0000000000
--- a/OpenRA.Mods.Cnc/Widgets/ResourceBarWidget.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 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;
-using System.Drawing;
-using OpenRA.FileFormats;
-using OpenRA.Graphics;
-using OpenRA.Traits;
-using OpenRA.Widgets;
-
-namespace OpenRA.Mods.Cnc.Widgets
-{
- public class ResourceBarWidget : Widget
- {
- public readonly string TooltipTemplate = "SIMPLE_TOOLTIP";
- public readonly string TooltipContainer;
- Lazy tooltipContainer;
-
- public float LowStorageThreshold = 0.8f;
- EWMA providedLerp = new EWMA(0.3f);
- EWMA usedLerp = new EWMA(0.3f);
-
- public Func GetProvided = () => 0;
- public Func GetUsed = () => 0;
- public string TooltipFormat = "";
- public bool RightIndicator = false;
- public Func GetBarColor = () => Color.White;
-
- [ObjectCreator.UseCtor]
- public ResourceBarWidget(World world)
- {
- tooltipContainer = Lazy.New(() =>
- Ui.Root.Get(TooltipContainer));
- }
-
- public override void MouseEntered()
- {
- if (TooltipContainer == null) return;
- Func getText = () => TooltipFormat.F(GetUsed(), GetProvided());
- tooltipContainer.Value.SetTooltip(TooltipTemplate, new WidgetArgs() {{ "getText", getText }});
- }
-
- public override void MouseExited()
- {
- if (TooltipContainer == null) return;
- tooltipContainer.Value.RemoveTooltip();
- }
-
- public override void Draw()
- {
- var scaleBy = 100.0f;
- var provided = GetProvided();
- var used = GetUsed();
- var max = Math.Max(provided, used);
- while (max >= scaleBy) scaleBy *= 2;
-
- var providedFrac = providedLerp.Update(provided/scaleBy);
- var usedFrac = usedLerp.Update(used/scaleBy);
-
- var color = GetBarColor();
-
- var b = RenderBounds;
- var rect = new RectangleF(b.X, float2.Lerp( b.Bottom, b.Top, providedFrac ),
- b.Width, providedFrac*b.Height);
- Game.Renderer.LineRenderer.FillRect(rect, color);
-
- var indicator = ChromeProvider.GetImage("sidebar-bits",
- RightIndicator ? "right-indicator" : "left-indicator");
-
- var indicatorX = RightIndicator ? (b.Right - indicator.size.X) : b.Left;
-
- var pos = new float2(indicatorX, float2.Lerp( b.Bottom, b.Top, usedFrac ) - indicator.size.Y / 2);
-
- Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, pos);
- }
- }
-}
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index 6a187983c5..6713cdc609 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -408,7 +408,6 @@
-
@@ -456,6 +455,8 @@
+
+
diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs
index 8d08ec3895..f5992b2efd 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs
@@ -11,6 +11,7 @@
using System.Drawing;
using System.Linq;
using OpenRA.Network;
+using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
using OpenRA.Widgets;
@@ -119,6 +120,21 @@ namespace OpenRA.Mods.RA.Widgets.Logic
radarBin.Get("RADAR_BIN_BG").GetImageCollection = () => "chrome-"+world.LocalPlayer.Country.Race;
+ var powerManager = world.LocalPlayer.PlayerActor.Trait();
+ var powerBar = radarBin.Get("POWERBAR");
+ powerBar.IndicatorCollection = "power-"+world.LocalPlayer.Country.Race;
+ powerBar.GetProvided = () => powerManager.PowerProvided;
+ powerBar.GetUsed = () => powerManager.PowerDrained;
+ powerBar.TooltipFormat = "Power Usage: {0}/{1}";
+ powerBar.GetBarColor = () =>
+ {
+ if (powerManager.PowerState == PowerState.Critical)
+ return Color.Red;
+ if (powerManager.PowerState == PowerState.Low)
+ return Color.Orange;
+ return Color.LimeGreen;
+ };
+
var sidebarTicker = playerWidgets.Get("SIDEBAR_TICKER");
sidebarTicker.OnTick = () =>
{
diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/SimpleTooltipLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/SimpleTooltipLogic.cs
similarity index 90%
rename from OpenRA.Mods.Cnc/Widgets/Logic/SimpleTooltipLogic.cs
rename to OpenRA.Mods.RA/Widgets/Logic/SimpleTooltipLogic.cs
index 3939b26bce..f47a072bb6 100644
--- a/OpenRA.Mods.Cnc/Widgets/Logic/SimpleTooltipLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/SimpleTooltipLogic.cs
@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
- * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
+ * 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,
@@ -11,7 +11,7 @@
using System;
using OpenRA.Widgets;
-namespace OpenRA.Mods.Cnc.Widgets.Logic
+namespace OpenRA.Mods.RA.Widgets.Logic
{
public class SimpleTooltipLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs
deleted file mode 100755
index 120e8caff1..0000000000
--- a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 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;
-using System.Drawing;
-using OpenRA.Graphics;
-using OpenRA.Mods.RA.Buildings;
-using OpenRA.Widgets;
-
-namespace OpenRA.Mods.RA.Widgets
-{
- public class PowerBinWidget : Widget
- {
- // Power bar
- 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 PowerManager power;
- readonly World world;
-
- [ObjectCreator.UseCtor]
- public PowerBinWidget(World world)
- {
- this.world = world;
-
- if (world.LocalPlayer != null)
- power = world.LocalPlayer.PlayerActor.Trait();
- }
-
- static Color GetPowerColor(PowerManager pm)
- {
- if (pm.PowerState == PowerState.Critical) return Color.Red;
- if (pm.PowerState == PowerState.Low) return Color.Orange;
- return Color.LimeGreen;
- }
-
- const float PowerBarLerpFactor = .2f;
-
- public override void Draw()
- {
- if( world.LocalPlayer == null ) return;
- if( world.LocalPlayer.WinState != WinState.Undefined ) return;
-
- var radarBin = Ui.Root.Get(RadarBin);
-
- powerCollection = "power-" + world.LocalPlayer.Country.Race;
-
- // Nothing to draw
- if (power.PowerProvided == 0 && power.PowerDrained == 0)
- return;
-
- // Draw bar horizontally
- var barStart = powerOrigin + radarBin.ChildOrigin;
- var barEnd = barStart + new float2(powerSize.Width, 0);
-
- float powerScaleBy = 100;
- var maxPower = Math.Max(power.PowerProvided, power.PowerDrained);
-
- while (maxPower >= powerScaleBy) powerScaleBy *= 2;
-
- // Current power supply
- var powerLevelTemp = barStart.X + (barEnd.X - barStart.X) * (power.PowerProvided / powerScaleBy);
- lastPowerProvidedPos = float2.Lerp(lastPowerProvidedPos.GetValueOrDefault(powerLevelTemp), powerLevelTemp, PowerBarLerpFactor);
- var powerLevel = new float2(lastPowerProvidedPos.Value, barStart.Y);
-
- var color = GetPowerColor(power);
-
- var colorDark = Exts.ColorLerp(0.25f, color, Color.Black);
- for (int i = 0; i < powerSize.Height; i++)
- {
- color = (i - 1 < powerSize.Height / 2) ? color : colorDark;
- var leftOffset = new float2(0, i);
- var rightOffset = new float2(0, i);
- // Indent corners
- if ((i == 0 || i == powerSize.Height - 1) && powerLevel.X - barStart.X > 1)
- {
- leftOffset.X += 1;
- rightOffset.X -= 1;
- }
- Game.Renderer.LineRenderer.DrawLine(barStart + leftOffset, powerLevel + rightOffset, color, color);
- }
-
- // Power usage indicator
- var indicator = ChromeProvider.GetImage( powerCollection, "power-indicator");
- var powerDrainedTemp = barStart.X + (barEnd.X - barStart.X) * (power.PowerDrained / powerScaleBy);
- lastPowerDrainedPos = float2.Lerp(lastPowerDrainedPos.GetValueOrDefault(powerDrainedTemp), powerDrainedTemp, PowerBarLerpFactor);
- var powerDrainLevel = new float2(lastPowerDrainedPos.Value - indicator.size.X / 2, barStart.Y - 1);
-
- Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, powerDrainLevel);
-
- // Render the tooltip
- var rect = new Rectangle((int) barStart.X, (int) barStart.Y, powerSize.Width, powerSize.Height);
-
- if (rect.InflateBy(0, 5, 0, 5).Contains(Viewport.LastMousePos))
- {
- var pos = new int2(rect.Left + 5, rect.Top + 5);
-
- var border = WidgetUtils.GetBorderSizes("dialog4");
- WidgetUtils.DrawPanel("dialog4", rect.InflateBy(0, 0, 0, 50 + border[1]));
-
- Game.Renderer.Fonts["Bold"].DrawText("Power", pos, Color.White);
- pos += new int2(0, 20);
- Game.Renderer.Fonts["Regular"].DrawText("Provided: {0}\nDrained: {1}".F(power.PowerProvided, power.PowerDrained), pos, Color.White);
- }
- }
- }
-}
diff --git a/OpenRA.Mods.RA/Widgets/ResourceBarWidget.cs b/OpenRA.Mods.RA/Widgets/ResourceBarWidget.cs
new file mode 100755
index 0000000000..32d0c28d5a
--- /dev/null
+++ b/OpenRA.Mods.RA/Widgets/ResourceBarWidget.cs
@@ -0,0 +1,138 @@
+#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;
+using System.Drawing;
+using OpenRA.FileFormats;
+using OpenRA.Graphics;
+using OpenRA.Traits;
+using OpenRA.Widgets;
+
+namespace OpenRA.Mods.RA.Widgets
+{
+ public enum ResourceBarOrientation { Vertical, Horizontal }
+ public enum ResourceBarStyle { Flat, Bevelled }
+ public class ResourceBarWidget : Widget
+ {
+ public readonly string TooltipTemplate = "SIMPLE_TOOLTIP";
+ public readonly string TooltipContainer;
+ Lazy tooltipContainer;
+
+ public string TooltipFormat = "";
+ public ResourceBarOrientation Orientation = ResourceBarOrientation.Vertical;
+ public ResourceBarStyle Style = ResourceBarStyle.Flat;
+ public string IndicatorCollection = "sidebar-bits";
+ public string IndicatorImage = "indicator";
+
+ public Func GetProvided = () => 0;
+ public Func GetUsed = () => 0;
+ public Func GetBarColor = () => Color.White;
+ EWMA providedLerp = new EWMA(0.3f);
+ EWMA usedLerp = new EWMA(0.3f);
+
+ [ObjectCreator.UseCtor]
+ public ResourceBarWidget(World world)
+ {
+ tooltipContainer = Lazy.New(() =>
+ Ui.Root.Get(TooltipContainer));
+ }
+
+ public override void MouseEntered()
+ {
+ if (TooltipContainer == null)
+ return;
+
+ Func getText = () => TooltipFormat.F(GetUsed(), GetProvided());
+ tooltipContainer.Value.SetTooltip(TooltipTemplate, new WidgetArgs() {{ "getText", getText }});
+ }
+
+ public override void MouseExited()
+ {
+ if (TooltipContainer == null)
+ return;
+ tooltipContainer.Value.RemoveTooltip();
+ }
+
+ public override void Draw()
+ {
+ var scaleBy = 100.0f;
+ var provided = GetProvided();
+ var used = GetUsed();
+ var max = Math.Max(provided, used);
+ while (max >= scaleBy)
+ scaleBy *= 2;
+
+ var providedFrac = providedLerp.Update(provided/scaleBy);
+ var usedFrac = usedLerp.Update(used/scaleBy);
+
+ var b = RenderBounds;
+ var indicator = ChromeProvider.GetImage(IndicatorCollection, IndicatorImage);
+
+ var color = GetBarColor();
+ if (Orientation == ResourceBarOrientation.Vertical)
+ {
+ if (Style == ResourceBarStyle.Bevelled)
+ {
+ var colorDark = Exts.ColorLerp(0.25f, color, Color.Black);
+ for (var i = 0; i < b.Height; i++)
+ {
+ color = (i - 1 < b.Height / 2) ? color : colorDark;
+ var bottom = new float2(b.Left + i, b.Bottom);
+ var top = new float2(b.Left + i, b.Bottom + providedFrac*b.Height);
+
+ // Indent corners
+ if ((i == 0 || i == b.Width - 1) && providedFrac*b.Height > 1)
+ {
+ bottom.Y += 1;
+ top.Y -= 1;
+ }
+
+ Game.Renderer.LineRenderer.DrawLine(bottom, top, color, color);
+ }
+ }
+ else
+ Game.Renderer.LineRenderer.FillRect(new Rectangle(b.X, (int)float2.Lerp(b.Bottom, b.Top, providedFrac),
+ b.Width, (int)(providedFrac*b.Height)), color);
+
+ var x = (b.Left + b.Right - indicator.size.X) / 2;
+ var y = float2.Lerp(b.Bottom, b.Top, usedFrac) - indicator.size.Y / 2;
+ Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
+ }
+ else
+ {
+ if (Style == ResourceBarStyle.Bevelled)
+ {
+ var colorDark = Exts.ColorLerp(0.25f, color, Color.Black);
+ for (var i = 0; i < b.Height; i++)
+ {
+ color = (i - 1 < b.Height / 2) ? color : colorDark;
+ var left = new float2(b.Left, b.Top + i);
+ var right = new float2(b.Left + providedFrac*b.Width, b.Top + i);
+
+ // Indent corners
+ if ((i == 0 || i == b.Height - 1) && providedFrac*b.Width > 1)
+ {
+ left.X += 1;
+ right.X -= 1;
+ }
+
+ Game.Renderer.LineRenderer.DrawLine(left, right, color, color);
+ }
+ }
+ else
+ Game.Renderer.LineRenderer.FillRect(new Rectangle(b.X, b.Y, (int)(providedFrac*b.Width), b.Height), color);
+
+ var x = float2.Lerp(b.Left, b.Right, usedFrac) - indicator.size.X / 2;
+ var y = (b.Bottom + b.Top - indicator.size.Y) / 2;
+ Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
+ }
+ }
+ }
+}
diff --git a/artsrc/cnc/chrome.svg b/artsrc/cnc/chrome.svg
index 56a282f7ca..7f653feeee 100644
--- a/artsrc/cnc/chrome.svg
+++ b/artsrc/cnc/chrome.svg
@@ -99,9 +99,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="15.999999"
- inkscape:cx="385.97751"
- inkscape:cy="397.09537"
+ inkscape:zoom="5.6568539"
+ inkscape:cx="371.83537"
+ inkscape:cy="425.37964"
inkscape:document-units="px"
inkscape:current-layer="svg2"
showgrid="false"
@@ -205,13 +205,6 @@
-
-
+ x="403"
+ y="591.36224" />
+
+