diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index beb9eb0d1f..ab08569b67 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -18,12 +18,12 @@ namespace OpenRa.Game readonly SpriteRenderer rgbaRenderer; readonly SpriteRenderer shpRenderer; - // Money indicator - readonly Sprite moneyBinSprite; - readonly List digitSprites; - + string chromeCollection; + string radarCollection; + string paletteCollection; + string digitCollection; + // Special power bin - readonly Sprite[] specialBinSprites; readonly Dictionary spsprites; // Options menu (to be refactored) @@ -54,8 +54,8 @@ namespace OpenRa.Game // Build Palette const int paletteColumns = 3; const int paletteRows = 5; - static float2 paletteOpenOrigin = new float2(Game.viewport.Width - 215, 260); - static float2 paletteClosedOrigin = new float2(Game.viewport.Width - 9, 260); + static float2 paletteOpenOrigin = new float2(Game.viewport.Width - 215, 280); + static float2 paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280); static float2 paletteOrigin = paletteClosedOrigin; const int paletteAnimationLength = 7; int paletteAnimationFrame = 0; @@ -65,8 +65,6 @@ namespace OpenRa.Game readonly Animation ready; readonly Animation clock; const int NumClockFrames = 54; - readonly Sprite blank; - readonly Sprite tooltipSprite; // Radar static float2 radarOpenOrigin = new float2(Game.viewport.Width - 215, 29); @@ -90,15 +88,6 @@ namespace OpenRa.Game lineRenderer = new LineRenderer(renderer); shpRenderer = new SpriteRenderer(renderer, true); - specialBinSprites = new [] - { - SequenceProvider.GetImageFromCollection(renderer, "chrome", "powershim-top"), - SequenceProvider.GetImageFromCollection(renderer, "chrome", "powershim-middle"), - SequenceProvider.GetImageFromCollection(renderer, "chrome", "powershim-bottom"), - }; - moneyBinSprite = SequenceProvider.GetImageFromCollection(renderer, "chrome", "moneybin"); - tooltipSprite = SequenceProvider.GetImageFromCollection(renderer, "chrome", "tooltip-bg"); - repairButton = new Animation("repair"); repairButton.PlayRepeating("normal"); @@ -121,8 +110,6 @@ namespace OpenRa.Game optionsBottomRight = SpriteSheetBuilder.LoadAllSprites("dd-crnr")[3]; optionsBackground = SpriteSheetBuilder.LoadAllSprites("dd-bkgnd")[Game.CosmeticRandom.Next(4)]; - blank = SheetBuilder.Add(new Size(64, 48), 16); - tabSprites = groups .SelectMany(g => Rules.Categories[g]) .Where(u => Rules.UnitInfo[u].TechLevel != -1) @@ -144,9 +131,6 @@ namespace OpenRa.Game cantBuild = new Animation("clock"); cantBuild.PlayFetchIndex("idle", () => 0); - digitSprites = Graphics.Util.MakeArray(10, a => a) - .Select(n => SequenceProvider.GetImageFromCollection(renderer, "digit", n.ToString())).ToList(); - ready = new Animation("pips"); ready.PlayRepeating("ready"); clock = new Animation("clock"); @@ -160,6 +144,11 @@ namespace OpenRa.Game public void Draw() { + chromeCollection = (Game.LocalPlayer.Race == Race.Allies) ? "chrome-allies" : "chrome-soviet"; + radarCollection = (Game.LocalPlayer.Race == Race.Allies) ? "radar-allies" : "radar-soviet"; + paletteCollection = (Game.LocalPlayer.Race == Race.Allies) ? "palette-allies" : "palette-soviet"; + digitCollection = (Game.LocalPlayer.Race == Race.Allies) ? "digits-allies" : "digits-soviet"; + buttons.Clear(); renderer.Device.DisableScissor(); @@ -175,7 +164,7 @@ namespace OpenRa.Game DrawRadar(); DrawPower(); - rgbaRenderer.DrawSprite(moneyBinSprite, new float2(Game.viewport.Width - 320, 0), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, chromeCollection, "moneybin"), new float2(Game.viewport.Width - 320, 0), PaletteType.Chrome); DrawMoney(); rgbaRenderer.Flush(); DrawButtons(); @@ -237,11 +226,13 @@ namespace OpenRa.Game var isJammed = false; // todo: MRJ can do this - var bgSprite = SequenceProvider.GetImageFromCollection(renderer, "radar", "nobg"); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, radarCollection, "left"), radarOrigin, PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, radarCollection, "right"), radarOrigin + new float2(201, 0), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, radarCollection, "bottom"), radarOrigin + new float2(0, 192), PaletteType.Chrome); + if (radarAnimating) - bgSprite = (Game.LocalPlayer.Race == Race.Allies) ? SequenceProvider.GetImageFromCollection(renderer, "radar", "allied") : SequenceProvider.GetImageFromCollection(renderer, "radar", "soviet"); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, radarCollection, "bg"), radarOrigin + new float2(9, 0), PaletteType.Chrome); - rgbaRenderer.DrawSprite(bgSprite, radarOrigin, PaletteType.Chrome); rgbaRenderer.Flush(); if (radarAnimationFrame >= radarSlideAnimationLength) @@ -316,7 +307,7 @@ namespace OpenRa.Game var x = Game.viewport.Width - 65; foreach (var d in moneyDigits.Reverse()) { - rgbaRenderer.DrawSprite(digitSprites[d - '0'], new float2(x, 6), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, digitCollection, (d - '0').ToString()), new float2(x, 6), PaletteType.Chrome); x -= 14; } } @@ -366,7 +357,7 @@ namespace OpenRa.Game lineRenderer.Flush(); // Power usage indicator - var indicator = SequenceProvider.GetImageFromCollection(renderer, "radar", "powerindicator"); + var indicator = SequenceProvider.GetImageFromCollection(renderer, radarCollection, "power-indicator"); var powerDrainedTemp = barStart.X + (barEnd.X - barStart.X) * (Game.LocalPlayer.PowerDrained / powerScaleBy) - Game.viewport.Location.X; lastPowerDrainedPos = float2.Lerp(lastPowerDrainedPos.GetValueOrDefault(powerDrainedTemp), powerDrainedTemp, .3f); float2 powerDrainLevel = new float2(lastPowerDrainedPos.Value-indicator.size.X/2, barStart.Y - Game.viewport.Location.Y-1); @@ -549,9 +540,8 @@ namespace OpenRa.Game string tooltipItem = null; // Draw the top border - var collection = (Game.LocalPlayer.Race == Race.Allies) ? "palette-allies" : "palette-soviet"; - rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, collection, "border-top"), new float2(origin.X - 9, origin.Y - 9), PaletteType.Chrome); - + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, paletteCollection, "top"), new float2(origin.X - 9, origin.Y - 9), PaletteType.Chrome); + // Draw the icons int lasty = -1; foreach (var item in allItems) @@ -559,7 +549,7 @@ namespace OpenRa.Game // Draw the background for this row if (y != lasty) { - rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, collection, "row-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), PaletteType.Chrome); rgbaRenderer.Flush(); lasty = y; } @@ -617,13 +607,15 @@ namespace OpenRa.Game var closureItem = item; AddButton(rect, isLmb => HandleBuildPalette(closureItem, isLmb)); + + if (++x == columns) { x = 0; y++; } } if (x != 0) y++; while (y < paletteRows) { - rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, collection, "row-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), PaletteType.Chrome); y++; } @@ -631,8 +623,15 @@ namespace OpenRa.Game shpRenderer.DrawSprite(ob.First, ob.Second, PaletteType.Chrome); shpRenderer.Flush(); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, paletteCollection, "bottom"), new float2(origin.X - 9, origin.Y - 1 + 48 * y), PaletteType.Chrome); - rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, collection, "border-bottom"), new float2(origin.X - 9, origin.Y - 1 + 48 * y), PaletteType.Chrome); + // Draw dock + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, paletteCollection, "dock-top"), new float2(Game.viewport.Width - 14, origin.Y - 23), PaletteType.Chrome); + for (int i = 0; i < y; i++) + { + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, paletteCollection, "dock-" + (y % 4).ToString()), new float2(Game.viewport.Width - 14, origin.Y + 48 * i), PaletteType.Chrome); + } + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, paletteCollection, "dock-bottom"), new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * y), PaletteType.Chrome); rgbaRenderer.Flush(); if (tooltipItem != null) @@ -726,6 +725,7 @@ namespace OpenRa.Game void DrawProductionTooltip(string unit, int2 pos) { + var tooltipSprite = SequenceProvider.GetImageFromCollection(renderer, chromeCollection, "tooltip-bg"); var p = pos.ToFloat2() - new float2(tooltipSprite.size.X, 0); rgbaRenderer.DrawSprite(tooltipSprite, p, PaletteType.Chrome); rgbaRenderer.Flush(); @@ -770,10 +770,10 @@ namespace OpenRa.Game if (numPowers == 0) return; - rgbaRenderer.DrawSprite(specialBinSprites[0], new float2(0,14), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, chromeCollection, "specialbin-top"), new float2(0, 14), PaletteType.Chrome); for (var i = 1; i < numPowers; i++) - rgbaRenderer.DrawSprite(specialBinSprites[1], new float2(0, 14 + i * 51), PaletteType.Chrome); - rgbaRenderer.DrawSprite(specialBinSprites[2], new float2(0, 14 + numPowers * 51), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, chromeCollection, "specialbin-middle"), new float2(0, 14 + i * 51), PaletteType.Chrome); + rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, chromeCollection, "specialbin-bottom"), new float2(0, 14 + numPowers * 51), PaletteType.Chrome); rgbaRenderer.Flush(); @@ -839,6 +839,7 @@ namespace OpenRa.Game void DrawSupportPowerTooltip(string sp, int2 pos) { + var tooltipSprite = SequenceProvider.GetImageFromCollection(renderer, chromeCollection, "tooltip-bg"); rgbaRenderer.DrawSprite(tooltipSprite, pos, PaletteType.Chrome); rgbaRenderer.Flush(); diff --git a/OpenRa.Game/Graphics/SequenceProvider.cs b/OpenRa.Game/Graphics/SequenceProvider.cs index eddc27204b..96512aa4e7 100644 --- a/OpenRa.Game/Graphics/SequenceProvider.cs +++ b/OpenRa.Game/Graphics/SequenceProvider.cs @@ -106,13 +106,21 @@ namespace OpenRa.Game.Graphics public static Sprite GetImageFromCollection(Renderer renderer,string collection, string image) - { + { + + // Cached sprite if (cachedSprites.ContainsKey(collection) && cachedSprites[collection].ContainsKey(image)) return cachedSprites[collection][image]; - var mi = collections[collection][image]; - + MappedImage mi; + try { mi = collections[collection][image];} + catch (KeyNotFoundException) + { + throw new InvalidOperationException( + "Collection `{0}` does not have an image `{1}`".F(collection, image)); + } + // Cached sheet Sheet sheet; if (cachedSheets.ContainsKey(mi.Src)) diff --git a/artsrc/chrome.xcf b/artsrc/chrome.xcf index 09ba54a717..ff5b798750 100644 Binary files a/artsrc/chrome.xcf and b/artsrc/chrome.xcf differ diff --git a/artsrc/radarbin.xcf b/artsrc/radarbin.xcf deleted file mode 100644 index d15f51442f..0000000000 Binary files a/artsrc/radarbin.xcf and /dev/null differ diff --git a/chrome-allies.png b/chrome-allies.png new file mode 100644 index 0000000000..6bf0bdf808 Binary files /dev/null and b/chrome-allies.png differ diff --git a/chrome-soviet.png b/chrome-soviet.png new file mode 100644 index 0000000000..e8ec2ac96d Binary files /dev/null and b/chrome-soviet.png differ diff --git a/chrome.png b/chrome.png deleted file mode 100644 index 3770fe9210..0000000000 Binary files a/chrome.png and /dev/null differ diff --git a/chrome.xml b/chrome.xml index ce6f7f9642..84242c5709 100644 --- a/chrome.xml +++ b/chrome.xml @@ -1,39 +1,73 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/palette-allies.png b/palette-allies.png deleted file mode 100644 index 0070533077..0000000000 Binary files a/palette-allies.png and /dev/null differ diff --git a/palette-soviet.png b/palette-soviet.png deleted file mode 100644 index db4d647f56..0000000000 Binary files a/palette-soviet.png and /dev/null differ diff --git a/radarbin-allies.png b/radarbin-allies.png deleted file mode 100644 index f9093123b0..0000000000 Binary files a/radarbin-allies.png and /dev/null differ diff --git a/radarbin-border.png b/radarbin-border.png deleted file mode 100644 index 2cc1984952..0000000000 Binary files a/radarbin-border.png and /dev/null differ diff --git a/radarbin-soviet.png b/radarbin-soviet.png deleted file mode 100644 index 02922d3dbe..0000000000 Binary files a/radarbin-soviet.png and /dev/null differ diff --git a/specialbin.png b/specialbin.png deleted file mode 100644 index 9985343d8c..0000000000 Binary files a/specialbin.png and /dev/null differ