From 142caa6691ba9e37a6027d4c8c5746f8e46dd5da Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 4 Sep 2016 16:40:48 +0100 Subject: [PATCH] Explore shroud on first GPS launch, ignoring power/radar. --- OpenRA.Mods.RA/Traits/GpsWatcher.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.RA/Traits/GpsWatcher.cs b/OpenRA.Mods.RA/Traits/GpsWatcher.cs index 9ff24f79bf..713d0f6063 100644 --- a/OpenRA.Mods.RA/Traits/GpsWatcher.cs +++ b/OpenRA.Mods.RA/Traits/GpsWatcher.cs @@ -32,6 +32,9 @@ namespace OpenRA.Mods.RA.Traits [Sync] public bool GrantedAllies { get; private set; } [Sync] public bool Granted { get; private set; } + // Whether this watcher has explored the terrain (by becoming Launched, or an ally becoming Launched) + [Sync] bool explored; + readonly Player owner; readonly List actors = new List(); @@ -70,21 +73,23 @@ namespace OpenRA.Mods.RA.Traits foreach (var i in atek.World.ActorsWithTrait()) i.Trait.RefreshGranted(); - - if ((Granted || GrantedAllies) && atek.Owner.IsAlliedWith(owner)) - atek.Owner.Shroud.ExploreAll(); } void RefreshGranted() { var wasGranted = Granted; var wasGrantedAllies = GrantedAllies; + var allyWatchers = owner.World.ActorsWithTrait().Where(kv => kv.Actor.Owner.IsAlliedWith(owner)); Granted = actors.Count > 0 && Launched; - GrantedAllies = owner.World.ActorsHavingTrait(g => g.Granted).Any(p => p.Owner.IsAlliedWith(owner)); + GrantedAllies = allyWatchers.Any(w => w.Trait.Granted); - if (Granted || GrantedAllies) + var allyLaunched = allyWatchers.Any(w => w.Trait.Launched); + if ((Launched || allyLaunched) && !explored) + { + explored = true; owner.Shroud.ExploreAll(); + } if (wasGranted != Granted || wasGrantedAllies != GrantedAllies) foreach (var tp in notifyOnRefresh.ToList())