From 2aecd8a05d6721f0ef71da139beecbf1effb0803 Mon Sep 17 00:00:00 2001 From: Alli Date: Sun, 3 Jan 2010 00:34:42 +1300 Subject: [PATCH] basic powerbar --- OpenRa.Game/Chrome.cs | 49 ++++++++++++++++++++++++++++++++++++++++++- sequences.xml | 7 +++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 47a395e019..667f350f09 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -13,11 +13,15 @@ namespace OpenRa.Game class Chrome : IHandleInput { readonly Renderer renderer; + readonly LineRenderer lineRenderer; readonly Sheet specialBin; readonly SpriteRenderer chromeRenderer; readonly Sprite specialBinSprite; readonly Sprite moneyBinSprite; readonly Sprite tooltipSprite; + readonly Sprite powerIndicatorSprite; + readonly Sprite powerLevelTopSprite; + readonly Sprite powerLevelBottomSprite; readonly SpriteRenderer buildPaletteRenderer; readonly Animation cantBuild; readonly Animation ready; @@ -37,17 +41,30 @@ namespace OpenRa.Game // Positioning of chrome elements // Build palette paletteColumns = 4; - paletteOrigin = new int2(Game.viewport.Width - paletteColumns * 64 - 9, 240 - 9); + paletteOrigin = new int2(Game.viewport.Width - paletteColumns * 64 - 9 - 20, 240 - 9); this.renderer = r; specialBin = new Sheet(renderer, "specialbin.png"); chromeRenderer = new SpriteRenderer(renderer, true, renderer.RgbaSpriteShader); + lineRenderer = new LineRenderer(renderer); buildPaletteRenderer = new SpriteRenderer(renderer, true); specialBinSprite = new Sprite(specialBin, new Rectangle(0, 0, 32, 192), TextureChannel.Alpha); moneyBinSprite = new Sprite(specialBin, new Rectangle(512 - 320, 0, 320, 32), TextureChannel.Alpha); tooltipSprite = new Sprite(specialBin, new Rectangle(0, 288, 272, 136), TextureChannel.Alpha); + + var powerIndicator = new Animation("power"); + powerIndicator.PlayRepeating("power-level-indicator"); + powerIndicatorSprite = powerIndicator.Image; + + var powerTop = new Animation("powerbar"); + powerTop.PlayRepeating("powerbar-top"); + powerLevelTopSprite = powerTop.Image; + var powerBottom = new Animation("powerbar"); + powerBottom.PlayRepeating("powerbar-bottom"); + powerLevelBottomSprite = powerBottom.Image; + blank = SheetBuilder.Add(new Size(64, 48), 16); sprites = groups @@ -106,6 +123,7 @@ namespace OpenRa.Game chromeRenderer.DrawSprite(moneyBinSprite, new float2(Game.viewport.Width - 320, 0), PaletteType.Chrome); DrawMoney(); + DrawPower(); chromeRenderer.Flush(); @@ -184,6 +202,35 @@ namespace OpenRa.Game x -= 14; } } + + void DrawPower() + { + //draw background + float2 powerOrigin = Game.viewport.Location+new float2(Game.viewport.Width - 20, 240 - 9); + + buildPaletteRenderer.DrawSprite(powerLevelTopSprite, powerOrigin, PaletteType.Chrome); + buildPaletteRenderer.DrawSprite(powerLevelBottomSprite, powerOrigin + new float2(0, powerLevelTopSprite.size.Y), PaletteType.Chrome); + buildPaletteRenderer.Flush(); + float2 top = powerOrigin + new float2(0, 15); + float2 bottom = powerOrigin + new float2(0, powerLevelTopSprite.size.Y + powerLevelBottomSprite.size.Y) - new float2(0, 50); + + var scale = 100; + while(Game.LocalPlayer.PowerProvided >= scale) scale += 100; + //draw bar + float2 powerTop = new float2(bottom.X, bottom.Y + (top.Y - bottom.Y) * (Game.LocalPlayer.PowerProvided / (float)scale)); + + for(int i = 7; i < 11; i++) + lineRenderer.DrawLine(bottom + new float2(i, 0), powerTop + new float2(i, 0), Color.LimeGreen, Color.LimeGreen); + lineRenderer.Flush(); + + //draw indicator + float2 drainedPosition = new float2(bottom.X , bottom.Y + (top.Y - bottom.Y)*(Game.LocalPlayer.PowerDrained/(float) scale)); + + buildPaletteRenderer.DrawSprite(powerIndicatorSprite, drainedPosition, PaletteType.Chrome); + buildPaletteRenderer.Flush(); + + + } void DrawChat() { diff --git a/sequences.xml b/sequences.xml index 340642858c..d2cf6a6469 100644 --- a/sequences.xml +++ b/sequences.xml @@ -994,4 +994,11 @@ + + + + + + + \ No newline at end of file