From a8471d9f547893a4159da6d2d7eab0069a7f1d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 2 Apr 2016 13:01:35 +0200 Subject: [PATCH 1/3] Disable Gps when tech center is disabled. --- .../Traits/SupportPowers/GpsPower.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs index 3742762a6d..11b74f4e00 100644 --- a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs +++ b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Traits public override object Create(ActorInitializer init) { return new GpsPower(init.Self, this); } } - class GpsPower : SupportPower, INotifyKilled, INotifySold, INotifyOwnerChanged + class GpsPower : SupportPower, INotifyKilled, INotifySold, INotifyOwnerChanged, ITick { readonly GpsPowerInfo info; GpsWatcher owner; @@ -83,5 +83,21 @@ namespace OpenRA.Mods.RA.Traits owner = newOwner.PlayerActor.Trait(); owner.GpsAdd(self); } + + bool wasDisabled; + + public void Tick(Actor self) + { + if (!wasDisabled && self.IsDisabled()) + { + wasDisabled = true; + RemoveGps(self); + } + else if (wasDisabled && !self.IsDisabled()) + { + wasDisabled = false; + owner.GpsAdd(self); + } + } } } From ec87b186082e33b2923d54fd45b398ba999d2dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 2 Apr 2016 14:26:17 +0200 Subject: [PATCH 2/3] Disable GPS dots without active radar. --- OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs index 11b74f4e00..34b5f6d6f5 100644 --- a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs +++ b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs @@ -31,17 +31,22 @@ namespace OpenRA.Mods.RA.Traits [SequenceReference("SatelliteImage")] public readonly string SatelliteSequence = "idle"; [PaletteReference] public readonly string SatellitePalette = "effect"; + [Desc("Requires an actor with an online `ProvidesRadar` to show GPS dots.")] + public readonly bool RequiresActiveRadar = true; + public override object Create(ActorInitializer init) { return new GpsPower(init.Self, this); } } class GpsPower : SupportPower, INotifyKilled, INotifySold, INotifyOwnerChanged, ITick { + readonly Actor self; readonly GpsPowerInfo info; GpsWatcher owner; public GpsPower(Actor self, GpsPowerInfo info) : base(self, info) { + this.self = self; this.info = info; owner = self.Owner.PlayerActor.Trait(); owner.GpsAdd(self); @@ -84,16 +89,17 @@ namespace OpenRA.Mods.RA.Traits owner.GpsAdd(self); } + bool NoActiveRadar { get { return !self.World.ActorsHavingTrait(r => r.IsActive).Any(a => a.Owner == self.Owner); } } bool wasDisabled; public void Tick(Actor self) { - if (!wasDisabled && self.IsDisabled()) + if (!wasDisabled && (self.IsDisabled() || (info.RequiresActiveRadar && NoActiveRadar))) { wasDisabled = true; RemoveGps(self); } - else if (wasDisabled && !self.IsDisabled()) + else if (wasDisabled && !self.IsDisabled() && !(info.RequiresActiveRadar && NoActiveRadar)) { wasDisabled = false; owner.GpsAdd(self); From 231c8ed786083153dd5f83920f9a784759bbdf24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 2 Apr 2016 14:26:28 +0200 Subject: [PATCH 3/3] Update GPS satellite player information. --- mods/ra/rules/structures.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 50e1313522..848259086c 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -776,7 +776,7 @@ ATEK: OneShot: yes ChargeTime: 480 Description: GPS Satellite - LongDesc: Reveals map terrain and provides tactical\ninformation. + LongDesc: Reveals map terrain and provides tactical\ninformation. Requires power and active radar. RevealDelay: 15 LaunchSound: satlnch1.aud DisplayTimer: True