From 9848c987504a33054367921db7cdab6304889f8c Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Sun, 24 Apr 2016 17:48:13 +0200 Subject: [PATCH 1/6] Replace the DisplayTimer field with a DisplayTimerStances field in SupportPowerInfo --- .../Traits/SupportPowers/SupportPower.cs | 3 ++- .../Widgets/SupportPowerTimerWidget.cs | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs index 881df0428a..184b65591a 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/SupportPower.cs @@ -44,7 +44,8 @@ namespace OpenRA.Mods.Common.Traits public readonly string IncomingSound = null; public readonly string IncomingSpeechNotification = null; - public readonly bool DisplayTimer = false; + [Desc("Defines to which players the timer is shown.")] + public readonly Stance DisplayTimerStances = Stance.None; [Desc("Palette used for the icon.")] [PaletteReference] public readonly string IconPalette = "chrome"; diff --git a/OpenRA.Mods.Common/Widgets/SupportPowerTimerWidget.cs b/OpenRA.Mods.Common/Widgets/SupportPowerTimerWidget.cs index 23945801e4..bd9038fd87 100644 --- a/OpenRA.Mods.Common/Widgets/SupportPowerTimerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/SupportPowerTimerWidget.cs @@ -16,6 +16,7 @@ using System.Linq; using OpenRA.Graphics; using OpenRA.Mods.Common.Traits; using OpenRA.Primitives; +using OpenRA.Traits; using OpenRA.Widgets; namespace OpenRA.Mods.Common.Widgets @@ -36,7 +37,7 @@ namespace OpenRA.Mods.Common.Widgets powers = world.ActorsWithTrait() .Where(p => !p.Actor.IsDead && !p.Actor.Owner.NonCombatant) .SelectMany(s => s.Trait.Powers.Values) - .Where(p => p.Instances.Any() && p.Info.DisplayTimer && !p.Disabled); + .Where(p => p.Instances.Any() && p.Info.DisplayTimerStances != Stance.None && !p.Disabled); // Timers in replays should be synced to the effective game time, not the playback time. timestep = world.Timestep; @@ -46,7 +47,14 @@ namespace OpenRA.Mods.Common.Widgets public override void Tick() { - texts = powers.Select(p => + var displayedPowers = powers.Where(p => + { + var owner = p.Instances[0].Self.Owner; + var viewer = owner.World.RenderPlayer ?? owner.World.LocalPlayer; + return viewer == null || p.Info.DisplayTimerStances.HasStance(owner.Stances[viewer]); + }); + + texts = displayedPowers.Select(p => { var time = WidgetUtils.FormatTime(p.RemainingTime, false, timestep); var text = Format.F(p.Info.Description, time); From e9e49a5d02843022091c6a73ce7d874253ca9b07 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Sun, 24 Apr 2016 18:23:20 +0200 Subject: [PATCH 2/6] Add a new DisplayStances field to SupportPowerChargeBarInfo other --- .../Traits/Render/SupportPowerChargeBar.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs b/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs index 8d26c979e7..e01c215e77 100644 --- a/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs +++ b/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs @@ -15,9 +15,12 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits.Render { - [Desc("Display the time remaining until the super weapon attached to the actor is ready to the player and his allies.")] + [Desc("Display the time remaining until the super weapon attached to the actor is ready.")] class SupportPowerChargeBarInfo : ITraitInfo { + [Desc("Defines to which players the bar is to be shown.")] + public readonly Stance DisplayStances = Stance.Ally; + public readonly Color Color = Color.Magenta; public object Create(ActorInitializer init) { return new SupportPowerChargeBar(init.Self, this); } @@ -36,13 +39,15 @@ namespace OpenRA.Mods.Common.Traits.Render float ISelectionBar.GetValue() { - if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) - return 0; - var spm = self.Owner.PlayerActor.Trait(); var power = spm.GetPowersForActor(self).FirstOrDefault(sp => !sp.Disabled); - if (power == null) return 0; + if (power == null) + return 0; + + var viewer = self.World.RenderPlayer ?? self.World.LocalPlayer; + if (viewer != null && info.DisplayStances.HasStance(self.Owner.Stances[viewer])) + return 0; return 1 - (float)power.RemainingTime / power.TotalTime; } From e8084daad7a6cd30d90f40691239747e85f6bd6a Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Sun, 1 May 2016 13:56:40 +0200 Subject: [PATCH 3/6] Cache the SupportPowerManager in SupportPowerChargeBar --- .../Traits/Render/SupportPowerChargeBar.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs b/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs index e01c215e77..8297b1ff68 100644 --- a/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs +++ b/OpenRA.Mods.Common/Traits/Render/SupportPowerChargeBar.cs @@ -26,22 +26,22 @@ namespace OpenRA.Mods.Common.Traits.Render public object Create(ActorInitializer init) { return new SupportPowerChargeBar(init.Self, this); } } - class SupportPowerChargeBar : ISelectionBar + class SupportPowerChargeBar : ISelectionBar, INotifyOwnerChanged { readonly Actor self; readonly SupportPowerChargeBarInfo info; + SupportPowerManager spm; public SupportPowerChargeBar(Actor self, SupportPowerChargeBarInfo info) { this.self = self; this.info = info; + spm = self.Owner.PlayerActor.Trait(); } float ISelectionBar.GetValue() { - var spm = self.Owner.PlayerActor.Trait(); var power = spm.GetPowersForActor(self).FirstOrDefault(sp => !sp.Disabled); - if (power == null) return 0; @@ -53,5 +53,10 @@ namespace OpenRA.Mods.Common.Traits.Render } Color ISelectionBar.GetColor() { return info.Color; } + + void INotifyOwnerChanged.OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) + { + spm = newOwner.PlayerActor.Trait(); + } } } From ddfd4c7873d86b6360e73b6daee74da61fa8e745 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Thu, 23 Jun 2016 17:32:01 +0200 Subject: [PATCH 4/6] Add an upgrade rule --- OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 7a1c039647..91d6fc7dec 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -291,6 +291,20 @@ namespace OpenRA.Mods.Common.UtilityCommands } } + // DisplayTimer was replaced by DisplayTimerStances + if (engineVersion < 20160710) + { + if (node.Key == "DisplayTimer") + { + node.Key = "DisplayTimerStances"; + + if (node.Value.Value.ToLower() == "false") + node.Value.Value = "None"; + else + node.Value.Value = "Ally, Neutral, Enemy"; + } + } + UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1); } From 3024d47f89f8ba021ebdfaa76e693ef08ce32015 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Thu, 23 Jun 2016 17:34:54 +0200 Subject: [PATCH 5/6] Apply the upgrade rule to the ra mod --- mods/ra/rules/structures.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 9c37afa3fb..100da51d67 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -32,7 +32,7 @@ MSLO: IncomingSpeechNotification: AbombLaunchDetected MissileWeapon: atomic SpawnOffset: 0,427,0 - DisplayTimer: True + DisplayTimerStances: Ally, Neutral, Enemy DisplayBeacon: True DisplayRadarPing: True BeaconPoster: atomicon @@ -771,7 +771,7 @@ ATEK: LongDesc: Reveals map terrain and provides tactical\ninformation. Requires power and active radar. RevealDelay: 15 LaunchSpeechNotification: SatelliteLaunched - DisplayTimer: True + DisplayTimerStances: Ally, Neutral, Enemy SupportPowerChargeBar: RequiresPower: DisabledOverlay: From 426a88e6fb35fe76bb0cf6746cf1b8bf00778a9e Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Sun, 10 Jul 2016 18:26:55 +0200 Subject: [PATCH 6/6] Apply the upgrade rule to the ts mod --- mods/ts/rules/nod-support.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ts/rules/nod-support.yaml b/mods/ts/rules/nod-support.yaml index 01a75b5794..8aa1bd9167 100644 --- a/mods/ts/rules/nod-support.yaml +++ b/mods/ts/rules/nod-support.yaml @@ -243,7 +243,7 @@ NAMISL: LaunchSound: icbm1.aud MissileWeapon: ClusterMissile SpawnOffset: 0,427,0 - DisplayTimer: False + DisplayTimerStances: None DisplayBeacon: False DisplayRadarPing: True BeaconPoster: