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] 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);