From 0884722c4bda5733de38436d83eba0437d5db542 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 21 Jul 2014 23:49:41 +1200 Subject: [PATCH] Change IOrderGenerator.RenderAfterWorld to return Renderables. --- OpenRA.Game/Graphics/WorldRenderer.cs | 6 +++--- OpenRA.Game/Orders/GenericSelectTarget.cs | 2 +- OpenRA.Game/Orders/IOrderGenerator.cs | 2 +- OpenRA.Game/Orders/UnitOrderGenerator.cs | 2 +- OpenRA.Mods.RA/Guard.cs | 2 +- OpenRA.Mods.RA/Minelayer.cs | 8 ++++---- OpenRA.Mods.RA/Orders/BeaconOrderGenerator.cs | 2 +- OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs | 10 +++++----- OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs | 2 +- OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs | 2 +- OpenRA.Mods.RA/PortableChrono.cs | 10 +++++----- OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs | 9 +++++---- OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs | 4 ++-- OpenRA.Mods.RA/SupportPowers/SupportPowerManager.cs | 2 +- 14 files changed, 32 insertions(+), 31 deletions(-) diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 375b00a1d7..049d48a859 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -91,6 +91,9 @@ namespace OpenRA.Graphics var effectRenderables = world.Effects .SelectMany(e => e.Render(this)); + if (world.OrderGenerator != null) + effectRenderables = effectRenderables.Concat(world.OrderGenerator.RenderAfterWorld(this, world)); + // Iterating via foreach() copies the structs, so enumerate by index var renderables = worldRenderables.Concat(effectRenderables).ToList(); @@ -124,9 +127,6 @@ namespace OpenRA.Graphics if (a.Actor.IsInWorld && !a.Actor.Destroyed) a.Trait.RenderAfterWorld(this, a.Actor); - if (world.OrderGenerator != null) - world.OrderGenerator.RenderAfterWorld(this, world); - var renderShroud = world.RenderPlayer != null ? world.RenderPlayer.Shroud : null; foreach (var a in world.ActorsWithTrait()) diff --git a/OpenRA.Game/Orders/GenericSelectTarget.cs b/OpenRA.Game/Orders/GenericSelectTarget.cs index a6048754ca..a4e129c081 100644 --- a/OpenRA.Game/Orders/GenericSelectTarget.cs +++ b/OpenRA.Game/Orders/GenericSelectTarget.cs @@ -65,7 +65,7 @@ namespace OpenRA.Orders public virtual void Tick(World world) { } public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) { } + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { yield break; } public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.Contains(xy) ? cursor : "generic-blocked"; } } } diff --git a/OpenRA.Game/Orders/IOrderGenerator.cs b/OpenRA.Game/Orders/IOrderGenerator.cs index db0c3c768a..daf63968a2 100644 --- a/OpenRA.Game/Orders/IOrderGenerator.cs +++ b/OpenRA.Game/Orders/IOrderGenerator.cs @@ -18,7 +18,7 @@ namespace OpenRA IEnumerable Order(World world, CPos xy, MouseInput mi); void Tick(World world); IEnumerable Render(WorldRenderer wr, World world); - void RenderAfterWorld(WorldRenderer wr, World world); + IEnumerable RenderAfterWorld(WorldRenderer wr, World world); string GetCursor(World world, CPos xy, MouseInput mi); } } diff --git a/OpenRA.Game/Orders/UnitOrderGenerator.cs b/OpenRA.Game/Orders/UnitOrderGenerator.cs index 23324f8171..ed2cd7bd44 100644 --- a/OpenRA.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRA.Game/Orders/UnitOrderGenerator.cs @@ -52,7 +52,7 @@ namespace OpenRA.Orders public void Tick(World world) { } public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) { } + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { yield break; } public string GetCursor(World world, CPos xy, MouseInput mi) { diff --git a/OpenRA.Mods.RA/Guard.cs b/OpenRA.Mods.RA/Guard.cs index 423a872776..7da972edb3 100644 --- a/OpenRA.Mods.RA/Guard.cs +++ b/OpenRA.Mods.RA/Guard.cs @@ -79,7 +79,7 @@ namespace OpenRA.Mods.RA } public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) { } + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { yield break; } public string GetCursor(World world, CPos xy, MouseInput mi) { diff --git a/OpenRA.Mods.RA/Minelayer.cs b/OpenRA.Mods.RA/Minelayer.cs index 603d4f9dea..9174ffa506 100644 --- a/OpenRA.Mods.RA/Minelayer.cs +++ b/OpenRA.Mods.RA/Minelayer.cs @@ -170,10 +170,10 @@ namespace OpenRA.Mods.RA CPos lastMousePos; public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { if (!minelayer.IsInWorld) - return; + yield break; var movement = minelayer.Trait(); var minefield = GetMinefieldCells(minefieldStart, lastMousePos, @@ -183,8 +183,8 @@ namespace OpenRA.Mods.RA foreach (var c in minefield) { var tile = movement.CanEnterCell(c) ? tileOk : tileBlocked; - new SpriteRenderable(tile, world.Map.CenterOfCell(c), - WVec.Zero, -511, pal, 1f, true).Render(wr); + yield return new SpriteRenderable(tile, world.Map.CenterOfCell(c), + WVec.Zero, -511, pal, 1f, true); } } diff --git a/OpenRA.Mods.RA/Orders/BeaconOrderGenerator.cs b/OpenRA.Mods.RA/Orders/BeaconOrderGenerator.cs index b4d1f88fa2..052ebbd6de 100644 --- a/OpenRA.Mods.RA/Orders/BeaconOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/BeaconOrderGenerator.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Orders public virtual void Tick(World world) { } public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) { } + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { yield break; } public string GetCursor(World world, CPos xy, MouseInput mi) { return !world.ShroudObscures(xy) ? "ability" : "generic-blocked"; } } } diff --git a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs index c5e1143b7f..e3f8f5f8fa 100644 --- a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs @@ -80,7 +80,7 @@ namespace OpenRA.Mods.RA.Orders public void Tick(World world) {} public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos); var topLeft = xy - FootprintUtils.AdjustForBuildingSize(BuildingInfo); @@ -90,7 +90,7 @@ namespace OpenRA.Mods.RA.Orders var actorInfo = rules.Actors[Building]; foreach (var dec in actorInfo.Traits.WithInterface()) foreach (var r in dec.Render(wr, world, actorInfo, world.Map.CenterOfCell(xy))) - r.Render(wr); + yield return r; var cells = new Dictionary(); // Linebuild for walls. @@ -120,7 +120,7 @@ namespace OpenRA.Mods.RA.Orders var offset = world.Map.CenterOfCell(topLeft) + FootprintUtils.CenterOffset(world, BuildingInfo) - WPos.Zero; foreach (var r in preview) - r.OffsetBy(offset).Render(wr); + yield return r.OffsetBy(offset); var res = world.WorldActor.Trait(); var isCloseEnough = BuildingInfo.IsCloseEnoughToBase(world, world.LocalPlayer, Building, topLeft); @@ -132,8 +132,8 @@ namespace OpenRA.Mods.RA.Orders foreach (var c in cells) { var tile = c.Value ? buildOk : buildBlocked; - new SpriteRenderable(tile, world.Map.CenterOfCell(c.Key), - WVec.Zero, -511, pal, 1f, true).Render(wr); + yield return new SpriteRenderable(tile, world.Map.CenterOfCell(c.Key), + WVec.Zero, -511, pal, 1f, true); } } diff --git a/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs b/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs index 417fe32b7e..8b12ecdf5e 100755 --- a/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs @@ -54,7 +54,7 @@ namespace OpenRA.Mods.RA.Orders } public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) { } + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { yield break; } public string GetCursor(World world, CPos xy, MouseInput mi) { diff --git a/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs b/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs index d71ebb71d1..f98aae0db8 100644 --- a/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs @@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Orders } public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) { } + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { yield break; } public string GetCursor(World world, CPos xy, MouseInput mi) { diff --git a/OpenRA.Mods.RA/PortableChrono.cs b/OpenRA.Mods.RA/PortableChrono.cs index e202380d27..66ba48d752 100644 --- a/OpenRA.Mods.RA/PortableChrono.cs +++ b/OpenRA.Mods.RA/PortableChrono.cs @@ -173,21 +173,21 @@ namespace OpenRA.Mods.RA yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { if (!self.IsInWorld || self.Owner != self.World.LocalPlayer) - return; + yield break; if (!self.Trait().Info.HasDistanceLimit) - return; + yield break; - new RangeCircleRenderable( + yield return new RangeCircleRenderable( self.CenterPosition, WRange.FromCells(self.Trait().Info.MaxDistance), 0, Color.FromArgb(128, Color.LawnGreen), Color.FromArgb(96, Color.Black) - ).Render(wr); + ); } public string GetCursor(World world, CPos xy, MouseInput mi) diff --git a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs index 8abf1bda73..0dd0291183 100644 --- a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs @@ -121,13 +121,14 @@ namespace OpenRA.Mods.RA world.CancelInputMode(); } - public void RenderAfterWorld(WorldRenderer wr, World world) + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos); var targetUnits = power.UnitsInRange(xy); + foreach (var unit in targetUnits) if (manager.self.Owner.Shroud.IsTargetable(unit)) - new SelectionBoxRenderable(unit, Color.Red).Render(wr); + yield return new SelectionBoxRenderable(unit, Color.Red); } public IEnumerable Render(WorldRenderer wr, World world) @@ -203,11 +204,11 @@ namespace OpenRA.Mods.RA world.CancelInputMode(); } - public void RenderAfterWorld(WorldRenderer wr, World world) + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { foreach (var unit in power.UnitsInRange(sourceLocation)) if (manager.self.Owner.Shroud.IsTargetable(unit)) - new SelectionBoxRenderable(unit, Color.Red).Render(wr); + yield return new SelectionBoxRenderable(unit, Color.Red); } public IEnumerable Render(WorldRenderer wr, World world) diff --git a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs index 668205519c..b33a1261d0 100644 --- a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs @@ -98,11 +98,11 @@ namespace OpenRA.Mods.RA world.CancelInputMode(); } - public void RenderAfterWorld(WorldRenderer wr, World world) + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos); foreach (var unit in power.UnitsInRange(xy)) - new SelectionBoxRenderable(unit, Color.Red).Render(wr); + yield return new SelectionBoxRenderable(unit, Color.Red); } public IEnumerable Render(WorldRenderer wr, World world) diff --git a/OpenRA.Mods.RA/SupportPowers/SupportPowerManager.cs b/OpenRA.Mods.RA/SupportPowers/SupportPowerManager.cs index d271c42fe3..472208290e 100644 --- a/OpenRA.Mods.RA/SupportPowers/SupportPowerManager.cs +++ b/OpenRA.Mods.RA/SupportPowers/SupportPowerManager.cs @@ -258,7 +258,7 @@ namespace OpenRA.Mods.RA } public IEnumerable Render(WorldRenderer wr, World world) { yield break; } - public void RenderAfterWorld(WorldRenderer wr, World world) { } + public IEnumerable RenderAfterWorld(WorldRenderer wr, World world) { yield break; } public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.Contains(xy) ? cursor : "generic-blocked"; } } }