diff --git a/OpenRA.Mods.RA/Activities/Sell.cs b/OpenRA.Mods.RA/Activities/Sell.cs index 95f5a84ed6..ddc2f78652 100755 --- a/OpenRA.Mods.RA/Activities/Sell.cs +++ b/OpenRA.Mods.RA/Activities/Sell.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Activities foreach (var ns in self.TraitsImplementing()) ns.Sold(self); - if (refund > 0 && self.World.LocalPlayer != null && self.Owner.Stances[self.World.LocalPlayer] == Stance.Ally) + if (refund > 0 && self.Owner.IsAlliedWith(self.World.RenderPlayer)) self.World.AddFrameEndTask(w => w.Add(new CashTick(refund, 30, 2, self.CenterLocation, self.Owner.Color.RGB))); self.Destroy(); @@ -39,6 +39,6 @@ namespace OpenRA.Mods.RA.Activities } // Cannot be cancelled - public override void Cancel( Actor self ) { } + public override void Cancel(Actor self) { } } } diff --git a/OpenRA.Mods.RA/Effects/CashTick.cs b/OpenRA.Mods.RA/Effects/CashTick.cs index 976885945b..77d220e453 100644 --- a/OpenRA.Mods.RA/Effects/CashTick.cs +++ b/OpenRA.Mods.RA/Effects/CashTick.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Effects static string FormatCashAmount(int x) { return "{0}${1}".F(x < 0 ? "-" : "+", x); } public CashTick(int value, int lifetime, int velocity, PPos pos, Color color) - : this( FormatCashAmount(value), lifetime, velocity, pos, color ) { } + : this(FormatCashAmount(value), lifetime, velocity, pos, color) { } public CashTick(string value, int lifetime, int velocity, PPos pos, Color color) { diff --git a/OpenRA.Mods.RA/Effects/GpsDot.cs b/OpenRA.Mods.RA/Effects/GpsDot.cs index c9da29dc8b..f3cd8360bd 100644 --- a/OpenRA.Mods.RA/Effects/GpsDot.cs +++ b/OpenRA.Mods.RA/Effects/GpsDot.cs @@ -45,8 +45,6 @@ namespace OpenRA.Mods.RA.Effects anim.PlayRepeating(info.String); self.World.AddFrameEndTask(w => w.Add(this)); - if (self.World.LocalPlayer != null) - watcher = self.World.LocalPlayer.PlayerActor.Trait(); } bool firstTick = true; @@ -55,7 +53,7 @@ namespace OpenRA.Mods.RA.Effects if (self.Destroyed) world.AddFrameEndTask(w => w.Remove(this)); - if (world.LocalPlayer == null || !self.IsInWorld || self.Destroyed) + if (!self.IsInWorld || self.Destroyed) return; // Can be granted at runtime via a crate, so can't cache @@ -68,6 +66,10 @@ namespace OpenRA.Mods.RA.Effects firstTick = false; } + // Can change with the Shroud selector for observers so don't cache. + if (self.World.RenderPlayer != null) + watcher = self.World.RenderPlayer.PlayerActor.Trait(); + var hasGps = (watcher != null && (watcher.Granted || watcher.GrantedAllies)); var hasDot = (huf != null && !huf.IsVisible(self, self.World.RenderPlayer)); var dotHidden = (cloak != null && cloak.Cloaked) || (spy != null && spy.Disguised); @@ -84,7 +86,6 @@ namespace OpenRA.Mods.RA.Effects var palette = wr.Palette(info.IndicatorPalettePrefix+self.Owner.InternalName); yield return new Renderable(anim.Image, p.ToFloat2() - 0.5f * anim.Image.size, palette, p.Y) .WithScale(1.5f); - } } } diff --git a/OpenRA.Mods.RA/Effects/PowerdownIndicator.cs b/OpenRA.Mods.RA/Effects/PowerdownIndicator.cs index 1605d9dfcd..832062d681 100644 --- a/OpenRA.Mods.RA/Effects/PowerdownIndicator.cs +++ b/OpenRA.Mods.RA/Effects/PowerdownIndicator.cs @@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA.Effects public IEnumerable Render(WorldRenderer wr) { - if (!a.Destroyed && (a.World.LocalPlayer == null || a.Owner.Stances[a.Owner.World.LocalPlayer] == Stance.Ally)) + if (!a.Destroyed && a.Owner.IsAlliedWith(a.World.RenderPlayer)) yield return new Renderable(anim.Image, a.CenterLocation.ToFloat2() - .5f * anim.Image.size, wr.Palette("chrome"), (int)a.CenterLocation.Y); } diff --git a/OpenRA.Mods.RA/GainsExperience.cs b/OpenRA.Mods.RA/GainsExperience.cs index 6ac2ff50cd..cf9be1c4ec 100644 --- a/OpenRA.Mods.RA/GainsExperience.cs +++ b/OpenRA.Mods.RA/GainsExperience.cs @@ -101,7 +101,7 @@ namespace OpenRA.Mods.RA public IEnumerable ModifyRender(Actor self, WorldRenderer wr, IEnumerable r) { // TODO: Make this consistent with everything else that adds animations to RenderSimple. - if ((self.Owner == self.World.LocalPlayer || self.World.LocalPlayer == null) && Level > 0) + if (self.Owner.IsAlliedWith(self.World.RenderPlayer) && Level > 0) return InnerModifyRender(self, wr, r); else return r; diff --git a/OpenRA.Mods.RA/GivesBounty.cs b/OpenRA.Mods.RA/GivesBounty.cs index 33cb51e101..0a3064308d 100644 --- a/OpenRA.Mods.RA/GivesBounty.cs +++ b/OpenRA.Mods.RA/GivesBounty.cs @@ -53,7 +53,7 @@ namespace OpenRA.Mods.RA // 2 hundreds because of GetMultiplier and info.Percentage. var bounty = cost * GetMultiplier(self) * info.Percentage / 10000; - if (bounty > 0 && e.Attacker.World.LocalPlayer != null && e.Attacker.Owner.Stances[e.Attacker.World.LocalPlayer] == Stance.Ally) + if (bounty > 0 && e.Attacker.Owner.IsAlliedWith(self.World.RenderPlayer)) e.Attacker.World.AddFrameEndTask(w => w.Add(new CashTick(bounty, 20, 1, self.CenterLocation, e.Attacker.Owner.Color.RGB))); e.Attacker.Owner.PlayerActor.Trait().GiveCash(bounty); diff --git a/OpenRA.Mods.RA/OreRefinery.cs b/OpenRA.Mods.RA/OreRefinery.cs index 2023e951ca..a1069c7b9f 100644 --- a/OpenRA.Mods.RA/OreRefinery.cs +++ b/OpenRA.Mods.RA/OreRefinery.cs @@ -92,7 +92,7 @@ namespace OpenRA.Mods.RA if (Info.ShowTicks && currentDisplayValue > 0 && --currentDisplayTick <= 0) { var temp = currentDisplayValue; - if (self.World.LocalPlayer != null && self.Owner.Stances[self.World.LocalPlayer] == Stance.Ally) + if (self.Owner.IsAlliedWith(self.World.RenderPlayer)) self.World.AddFrameEndTask(w => w.Add(new CashTick(temp, Info.TickLifetime, Info.TickVelocity, self.CenterLocation, self.Owner.Color.RGB))); currentDisplayTick = Info.TickRate; currentDisplayValue = 0; diff --git a/OpenRA.Mods.RA/Spy.cs b/OpenRA.Mods.RA/Spy.cs index d5f87d15e5..a381444d1a 100644 --- a/OpenRA.Mods.RA/Spy.cs +++ b/OpenRA.Mods.RA/Spy.cs @@ -115,8 +115,7 @@ namespace OpenRA.Mods.RA public Color RadarColorOverride(Actor self) { - if (!Disguised || self.World.LocalPlayer == null || - self.Owner.Stances[self.World.LocalPlayer] == Stance.Ally) + if (!Disguised || self.Owner.IsAlliedWith(self.World.RenderPlayer)) return self.Owner.Color.RGB; return disguisedAsPlayer.Color.RGB; diff --git a/OpenRA.Mods.RA/SupportPowers/GpsPower.cs b/OpenRA.Mods.RA/SupportPowers/GpsPower.cs index 7b8bf92112..c3554b9d5e 100755 --- a/OpenRA.Mods.RA/SupportPowers/GpsPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/GpsPower.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA List actors = new List { }; - public GpsWatcher( Player owner ) { this.owner = owner; } + public GpsWatcher(Player owner) { this.owner = owner; } public void GpsRem(Actor atek) { @@ -62,16 +62,15 @@ namespace OpenRA.Mods.RA foreach (TraitPair i in atek.World.ActorsWithTrait()) i.Trait.RefreshGranted(); - if ((Granted || GrantedAllies) && atek.World.LocalPlayer != null && (atek.World.LocalPlayer.Stances[atek.Owner] == Stance.Ally)) + if ((Granted || GrantedAllies) && atek.Owner.IsAlliedWith(atek.World.RenderPlayer)) atek.Owner.Shroud.ExploreAll(atek.World); } void RefreshGranted() { Granted = (actors.Count > 0 && Launched); - GrantedAllies = owner.World.ActorsWithTrait().Any(p => - p.Actor.Owner.Stances[owner] == Stance.Ally && p.Trait.Granted); - + GrantedAllies = owner.World.ActorsWithTrait().Any(p => p.Actor.Owner.IsAlliedWith(owner) && p.Trait.Granted); + if (Granted || GrantedAllies) owner.Shroud.ExploreAll(owner.World); } diff --git a/OpenRA.Mods.RA/SupportPowers/SupportPowerChargeBar.cs b/OpenRA.Mods.RA/SupportPowers/SupportPowerChargeBar.cs index 57c6735cdd..ba705da377 100644 --- a/OpenRA.Mods.RA/SupportPowers/SupportPowerChargeBar.cs +++ b/OpenRA.Mods.RA/SupportPowers/SupportPowerChargeBar.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA public float GetValue() { // only people we like should see our charge status. - if (self.World.LocalPlayer != null && self.Owner.Stances[self.World.LocalPlayer] != Stance.Ally) + if (!self.Owner.IsAlliedWith(self.World.RenderPlayer)) return 0; var spm = self.Owner.PlayerActor.Trait(); diff --git a/mods/cnc/rules/system.yaml b/mods/cnc/rules/system.yaml index 1b5b7c3b18..991dd0e609 100644 --- a/mods/cnc/rules/system.yaml +++ b/mods/cnc/rules/system.yaml @@ -229,6 +229,7 @@ World: Name: effect Filename: temperat.pal ShadowIndex: 4 + AllowModifiers: false PaletteFromFile@colorpicker: Name: colorpicker Filename: temperat.pal