diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 178d0d88f8..065d1b0236 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -166,8 +166,13 @@ namespace OpenRA.Graphics .Where(t => !t.SpatiallyPartitionable || onScreenActors.Contains(a)) .SelectMany(t => t.RenderAnnotations(a, this))); + var orderGenerator = SpriteRenderable.None; + if (World.OrderGenerator != null) + orderGenerator = World.OrderGenerator.RenderAnnotations(this, World); + return actors .Concat(selected) + .Concat(orderGenerator) .Select(r => r.PrepareRender(this)); } diff --git a/OpenRA.Game/Orders/IOrderGenerator.cs b/OpenRA.Game/Orders/IOrderGenerator.cs index a92fe9d20e..61fd02019e 100644 --- a/OpenRA.Game/Orders/IOrderGenerator.cs +++ b/OpenRA.Game/Orders/IOrderGenerator.cs @@ -20,6 +20,7 @@ namespace OpenRA void Tick(World world); IEnumerable Render(WorldRenderer wr, World world); IEnumerable RenderAboveShroud(WorldRenderer wr, World world); + IEnumerable RenderAnnotations(WorldRenderer wr, World world); string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi); void Deactivate(); bool HandleKeyPress(KeyInput e); diff --git a/OpenRA.Game/Orders/UnitOrderGenerator.cs b/OpenRA.Game/Orders/UnitOrderGenerator.cs index a8bfd68e27..703dd3d95d 100644 --- a/OpenRA.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRA.Game/Orders/UnitOrderGenerator.cs @@ -64,6 +64,7 @@ namespace OpenRA.Orders public virtual void Tick(World world) { } public virtual IEnumerable Render(WorldRenderer wr, World world) { yield break; } public virtual IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + public virtual IEnumerable RenderAnnotations(WorldRenderer wr, World world) { yield break; } public virtual string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { diff --git a/OpenRA.Mods.Cnc/Traits/Minelayer.cs b/OpenRA.Mods.Cnc/Traits/Minelayer.cs index 2ca0099672..4971537229 100644 --- a/OpenRA.Mods.Cnc/Traits/Minelayer.cs +++ b/OpenRA.Mods.Cnc/Traits/Minelayer.cs @@ -222,6 +222,8 @@ namespace OpenRA.Mods.Cnc.Traits } } + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { yield break; } + protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { return "ability"; diff --git a/OpenRA.Mods.Cnc/Traits/PortableChrono.cs b/OpenRA.Mods.Cnc/Traits/PortableChrono.cs index d80abae905..e79cf35e1f 100644 --- a/OpenRA.Mods.Cnc/Traits/PortableChrono.cs +++ b/OpenRA.Mods.Cnc/Traits/PortableChrono.cs @@ -215,12 +215,11 @@ namespace OpenRA.Mods.Cnc.Traits world.CancelInputMode(); } - protected override IEnumerable Render(WorldRenderer wr, World world) - { - yield break; - } + protected override IEnumerable Render(WorldRenderer wr, World world) { yield break; } - protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) + protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { if (!self.IsInWorld || self.Owner != self.World.LocalPlayer) yield break; diff --git a/OpenRA.Mods.Cnc/Traits/SupportPowers/AttackOrderPower.cs b/OpenRA.Mods.Cnc/Traits/SupportPowers/AttackOrderPower.cs index 65e5575892..d2b6855c4d 100644 --- a/OpenRA.Mods.Cnc/Traits/SupportPowers/AttackOrderPower.cs +++ b/OpenRA.Mods.Cnc/Traits/SupportPowers/AttackOrderPower.cs @@ -113,8 +113,9 @@ namespace OpenRA.Mods.Cnc.Traits } protected override IEnumerable Render(WorldRenderer wr, World world) { yield break; } + protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } - protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { foreach (var a in instance.Instances.Where(i => !i.IsTraitPaused)) { diff --git a/OpenRA.Mods.Cnc/Traits/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.Cnc/Traits/SupportPowers/ChronoshiftPower.cs index 609646f44b..2a26e00ab7 100644 --- a/OpenRA.Mods.Cnc/Traits/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.Cnc/Traits/SupportPowers/ChronoshiftPower.cs @@ -167,7 +167,9 @@ namespace OpenRA.Mods.Cnc.Traits world.CancelInputMode(); } - protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) + protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos); var targetUnits = power.UnitsInRange(xy).Where(a => !world.FogObscures(a)); @@ -291,7 +293,10 @@ namespace OpenRA.Mods.Cnc.Traits foreach (var r in unit.Render(wr)) yield return r.OffsetBy(offset); } + } + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) + { foreach (var unit in power.UnitsInRange(sourceLocation)) { if (unit.CanBeViewedByPlayer(manager.Self.Owner)) diff --git a/OpenRA.Mods.Common/Orders/BeaconOrderGenerator.cs b/OpenRA.Mods.Common/Orders/BeaconOrderGenerator.cs index 85308ac153..92107ff5f5 100644 --- a/OpenRA.Mods.Common/Orders/BeaconOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/BeaconOrderGenerator.cs @@ -28,6 +28,7 @@ namespace OpenRA.Mods.Common.Orders protected override void Tick(World world) { } protected override IEnumerable Render(WorldRenderer wr, World world) { yield break; } protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { yield break; } protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { return "ability"; diff --git a/OpenRA.Mods.Common/Orders/GlobalButtonOrderGenerator.cs b/OpenRA.Mods.Common/Orders/GlobalButtonOrderGenerator.cs index 554ea97166..e45af5beec 100644 --- a/OpenRA.Mods.Common/Orders/GlobalButtonOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/GlobalButtonOrderGenerator.cs @@ -63,6 +63,7 @@ namespace OpenRA.Mods.Common.Orders protected override IEnumerable Render(WorldRenderer wr, World world) { yield break; } protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { yield break; } protected abstract override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi); } diff --git a/OpenRA.Mods.Common/Orders/OrderGenerator.cs b/OpenRA.Mods.Common/Orders/OrderGenerator.cs index aab5e7b617..471a6fac0d 100644 --- a/OpenRA.Mods.Common/Orders/OrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/OrderGenerator.cs @@ -28,6 +28,7 @@ namespace OpenRA.Mods.Common.Orders void IOrderGenerator.Tick(World world) { Tick(world); } IEnumerable IOrderGenerator.Render(WorldRenderer wr, World world) { return Render(wr, world); } IEnumerable IOrderGenerator.RenderAboveShroud(WorldRenderer wr, World world) { return RenderAboveShroud(wr, world); } + IEnumerable IOrderGenerator.RenderAnnotations(WorldRenderer wr, World world) { return RenderAnnotations(wr, world); } string IOrderGenerator.GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { return GetCursor(world, cell, worldPixel, mi); } void IOrderGenerator.Deactivate() { } bool IOrderGenerator.HandleKeyPress(KeyInput e) { return false; } @@ -35,6 +36,7 @@ namespace OpenRA.Mods.Common.Orders protected abstract void Tick(World world); protected abstract IEnumerable Render(WorldRenderer wr, World world); protected abstract IEnumerable RenderAboveShroud(WorldRenderer wr, World world); + protected abstract IEnumerable RenderAnnotations(WorldRenderer wr, World world); protected abstract string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi); protected abstract IEnumerable OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi); } diff --git a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs index ab5c5c5701..cbfe7bc39d 100644 --- a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs @@ -281,6 +281,8 @@ namespace OpenRA.Mods.Common.Orders return preview != null ? preview.Render(wr, topLeft, footprint) : Enumerable.Empty(); } + IEnumerable IOrderGenerator.RenderAnnotations(WorldRenderer wr, World world) { yield break; } + string IOrderGenerator.GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { return "default"; } bool IOrderGenerator.HandleKeyPress(KeyInput e) diff --git a/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs b/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs index 768e318b53..37358895c9 100644 --- a/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/RepairOrderGenerator.cs @@ -85,6 +85,7 @@ namespace OpenRA.Mods.Common.Orders protected override IEnumerable Render(WorldRenderer wr, World world) { yield break; } protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { yield break; } protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs index ea602d0bcc..0db34e80d5 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/GrantExternalConditionPower.cs @@ -138,7 +138,9 @@ namespace OpenRA.Mods.Common.Traits world.CancelInputMode(); } - protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) + protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos); foreach (var unit in power.UnitsInRange(xy)) diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SelectDirectionalTarget.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SelectDirectionalTarget.cs index f41b8f0b1e..6a3a9544d2 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SelectDirectionalTarget.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SelectDirectionalTarget.cs @@ -118,6 +118,7 @@ namespace OpenRA.Mods.Common.Traits IEnumerable IOrderGenerator.Render(WorldRenderer wr, World world) { yield break; } IEnumerable IOrderGenerator.RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + IEnumerable IOrderGenerator.RenderAnnotations(WorldRenderer wr, World world) { yield break; } string IOrderGenerator.GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs index 87d596b9a7..d969bedcee 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPowerManager.cs @@ -296,6 +296,7 @@ namespace OpenRA.Mods.Common.Traits protected override IEnumerable Render(WorldRenderer wr, World world) { yield break; } protected override IEnumerable RenderAboveShroud(WorldRenderer wr, World world) { yield break; } + protected override IEnumerable RenderAnnotations(WorldRenderer wr, World world) { yield break; } protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { return world.Map.Contains(cell) ? cursor : "generic-blocked";