From c84f53c10d36a7ffd4e8d537c3532d1d55f7488b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 27 Jul 2011 21:17:24 +1200 Subject: [PATCH] Extract tile overlays into a shp instead of rolling our own in code; Remove UIOverlay. Fixes #1061. --- OpenRA.Game/Graphics/WorldRenderer.cs | 3 -- OpenRA.Game/OpenRA.Game.csproj | 1 - OpenRA.Game/UiOverlay.cs | 44 ------------------ .../Orders/PlaceBuildingOrderGenerator.cs | 9 +++- .../SupportPowers/ChronoshiftPower.cs | 9 ++-- .../SupportPowers/IronCurtainPower.cs | 2 +- mods/cnc/bits/overlay.shp | Bin 0 -> 2410 bytes mods/cnc/sequences/misc.yaml | 12 +++++ mods/ra/bits/overlay.shp | Bin 0 -> 2410 bytes mods/ra/sequences.yaml | 11 +++++ 10 files changed, 35 insertions(+), 56 deletions(-) delete mode 100644 OpenRA.Game/UiOverlay.cs create mode 100644 mods/cnc/bits/overlay.shp create mode 100644 mods/ra/bits/overlay.shp diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 97f1fce031..06f187fa1e 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -22,8 +22,6 @@ namespace OpenRA.Graphics public readonly World world; internal readonly TerrainRenderer terrainRenderer; internal readonly ShroudRenderer shroudRenderer; - - public readonly UiOverlay uiOverlay; internal readonly HardwarePalette palette; internal WorldRenderer(World world) @@ -35,7 +33,6 @@ namespace OpenRA.Graphics terrainRenderer = new TerrainRenderer(world, this); shroudRenderer = new ShroudRenderer(world); - uiOverlay = new UiOverlay(); } public int GetPaletteIndex(string name) { return palette.GetPaletteIndex(name); } diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 58323d8270..4777cc3cd5 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -137,7 +137,6 @@ - diff --git a/OpenRA.Game/UiOverlay.cs b/OpenRA.Game/UiOverlay.cs deleted file mode 100644 index cf3b9e750f..0000000000 --- a/OpenRA.Game/UiOverlay.cs +++ /dev/null @@ -1,44 +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.Collections.Generic; -using System.Drawing; -using OpenRA.Graphics; - -namespace OpenRA -{ - public class UiOverlay - { - Sprite buildOk, buildBlocked; - - public UiOverlay() - { - buildOk = SynthesizeTile(0x0f); - buildBlocked = SynthesizeTile(0x08); - } - - public static Sprite SynthesizeTile(byte paletteIndex) - { - byte[] data = new byte[Game.CellSize * Game.CellSize]; - - for (int i = 0; i < Game.CellSize; i++) - for (int j = 0; j < Game.CellSize; j++) - data[i * Game.CellSize + j] = ((i+j) % 4 != 0) ? (byte)0 : paletteIndex; - - return Game.modData.SheetBuilder.Add(data, new Size(Game.CellSize, Game.CellSize)); - } - - public void DrawGrid( WorldRenderer wr, Dictionary cells ) - { - foreach( var c in cells ) - ( c.Value ? buildOk : buildBlocked ).DrawAt( wr, Game.CellSize * c.Key, "terrain" ); - } - } -} diff --git a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs index 123b26c12d..7c88fb9197 100755 --- a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs @@ -23,6 +23,7 @@ namespace OpenRA.Mods.RA.Orders readonly string Building; readonly IEnumerable Preview; BuildingInfo BuildingInfo { get { return Rules.Info[ Building ].Traits.Get(); } } + Sprite buildOk, buildBlocked; public PlaceBuildingOrderGenerator(Actor producer, string name) { @@ -31,6 +32,9 @@ namespace OpenRA.Mods.RA.Orders Preview = Rules.Info[Building].Traits.Get() .RenderPreview(Rules.Info[Building], producer.Owner); + + buildOk = SequenceProvider.GetSequence("overlay", "build-valid").GetSprite(0); + buildBlocked = SequenceProvider.GetSequence("overlay", "build-invalid").GetSprite(0); } public IEnumerable Order(World world, int2 xy, MouseInput mi) @@ -95,8 +99,9 @@ namespace OpenRA.Mods.RA.Orders foreach (var t in FootprintUtils.Tiles(Building, BuildingInfo, topLeft)) cells.Add( t, isCloseEnough && world.IsCellBuildable(t, BuildingInfo.WaterBound) && res.GetResource(t) == null ); } - - wr.uiOverlay.DrawGrid( wr, cells ); + + foreach( var c in cells ) + ( c.Value ? buildOk : buildBlocked ).DrawAt( wr, Game.CellSize * c.Key, "terrain" ); } public string GetCursor(World world, int2 xy, MouseInput mi) { return "default"; } diff --git a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs index f8fe418539..26b4f2ca9d 100755 --- a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs @@ -84,7 +84,7 @@ namespace OpenRA.Mods.RA this.order = order; this.power = power; this.range = (power.Info as ChronoshiftPowerInfo).Range; - tile = UiOverlay.SynthesizeTile(0x04); + tile = SequenceProvider.GetSequence("overlay", "target-select").GetSprite(0); } public IEnumerable Order(World world, int2 xy, MouseInput mi) @@ -142,10 +142,9 @@ namespace OpenRA.Mods.RA this.sourceLocation = sourceLocation; this.range = (power.Info as ChronoshiftPowerInfo).Range; - // todo: this burns up more texture space every time someone uses chronoshift. - validTile = UiOverlay.SynthesizeTile(0x0f); - invalidTile = UiOverlay.SynthesizeTile(0x08); - sourceTile = UiOverlay.SynthesizeTile(0x04); + validTile = SequenceProvider.GetSequence("overlay", "target-valid").GetSprite(0); + invalidTile = SequenceProvider.GetSequence("overlay", "target-invalid").GetSprite(0); + sourceTile = SequenceProvider.GetSequence("overlay", "target-select").GetSprite(0); } public IEnumerable Order(World world, int2 xy, MouseInput mi) diff --git a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs index 77521f2937..4384431c76 100755 --- a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs @@ -70,7 +70,7 @@ namespace OpenRA.Mods.RA this.order = order; this.power = power; this.range = (power.Info as IronCurtainPowerInfo).Range; - tile = UiOverlay.SynthesizeTile(0x04); + tile = SequenceProvider.GetSequence("overlay", "target-select").GetSprite(0); } public IEnumerable Order(World world, int2 xy, MouseInput mi) diff --git a/mods/cnc/bits/overlay.shp b/mods/cnc/bits/overlay.shp new file mode 100644 index 0000000000000000000000000000000000000000..25a931c89a0b49eb16f33c7fa84ad0148cc49373 GIT binary patch literal 2410 zcmb7?K~BXm3`8qb1gzMy<0c%4Q)K&3l}r2sF>YKumNQD*DvI+mcAQc6&Au=E_Wf*I zv-$Bd=I1`<@3%4ke%Nk&{S)zQ2n=ab_s}K2#1L4ep34n*qmuP6%_+h&F8v;X`)YgiF#FrQXOYCPh z&o?Sr|3dC3%(f!~{l|hsj!D7T4p9Dyl!D#A!iPKSD-{1kC4rBpB=#<0JSEq)zN6jQ z5E#;=HY*$?zQhn%Vn4HazER2g7ji#gwjCMhKNcKvObW(!fbvhI6zu*LKHOPfq4*~% z34A;yv3CjMDY>roSF}4D0z;bAW`%>qmly&|>}NL5H!4~GLhdKbwj%@m$AUwSNx|3- fQ2vROg5AHuhdb*l6#qmefsdyo_AX&OCD*k-Or14v literal 0 HcmV?d00001 diff --git a/mods/cnc/sequences/misc.yaml b/mods/cnc/sequences/misc.yaml index a6127ba68a..5931490d6e 100644 --- a/mods/cnc/sequences/misc.yaml +++ b/mods/cnc/sequences/misc.yaml @@ -212,3 +212,15 @@ pips: groups: pdigits Start: 0 Length: * + +overlay: + build-valid: + Start: 0 + build-invalid: + Start: 1 + target-select: + Start: 2 + target-valid: + Start: 0 + target-invalid: + Start: 1 \ No newline at end of file diff --git a/mods/ra/bits/overlay.shp b/mods/ra/bits/overlay.shp new file mode 100644 index 0000000000000000000000000000000000000000..25a931c89a0b49eb16f33c7fa84ad0148cc49373 GIT binary patch literal 2410 zcmb7?K~BXm3`8qb1gzMy<0c%4Q)K&3l}r2sF>YKumNQD*DvI+mcAQc6&Au=E_Wf*I zv-$Bd=I1`<@3%4ke%Nk&{S)zQ2n=ab_s}K2#1L4ep34n*qmuP6%_+h&F8v;X`)YgiF#FrQXOYCPh z&o?Sr|3dC3%(f!~{l|hsj!D7T4p9Dyl!D#A!iPKSD-{1kC4rBpB=#<0JSEq)zN6jQ z5E#;=HY*$?zQhn%Vn4HazER2g7ji#gwjCMhKNcKvObW(!fbvhI6zu*LKHOPfq4*~% z34A;yv3CjMDY>roSF}4D0z;bAW`%>qmly&|>}NL5H!4~GLhdKbwj%@m$AUwSNx|3- fQ2vROg5AHuhdb*l6#qmefsdyo_AX&OCD*k-Or14v literal 0 HcmV?d00001 diff --git a/mods/ra/sequences.yaml b/mods/ra/sequences.yaml index 583d1865bf..c5a7aadf25 100644 --- a/mods/ra/sequences.yaml +++ b/mods/ra/sequences.yaml @@ -1999,3 +1999,14 @@ gpsdot: Harvester: Start: 5 +overlay: + build-valid: + Start: 0 + build-invalid: + Start: 1 + target-select: + Start: 2 + target-valid: + Start: 0 + target-invalid: + Start: 1 \ No newline at end of file