From 2c680a183148ceaed2887d1309cd2a1568acf9a8 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 10 Apr 2013 22:33:58 +1200 Subject: [PATCH] Fix shroud for observers observing a player after win/loss. --- OpenRA.Game/World.cs | 9 ++++++++- OpenRA.Mods.RA/ConquestVictoryConditions.cs | 14 ++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 7143784bff..0845bba5ff 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -42,7 +42,14 @@ namespace OpenRA public void AddPlayer(Player p) { Players.Add(p); } public Player LocalPlayer { get; private set; } - public Player RenderPlayer; + Player renderPlayer; + public bool ObserveAfterWinOrLose; + public Player RenderPlayer + { + get { return renderPlayer == null || (ObserveAfterWinOrLose && renderPlayer.WinState != WinState.Undefined)? null : renderPlayer; } + set { renderPlayer = value; } + } + public bool FogObscures(Actor a) { return RenderPlayer != null && !RenderPlayer.Shroud.IsVisible(a); } public bool FogObscures(CPos p) { return RenderPlayer != null && !RenderPlayer.Shroud.IsVisible(p); } public bool ShroudObscures(Actor a) { return RenderPlayer != null && !RenderPlayer.Shroud.IsExplored(a); } diff --git a/OpenRA.Mods.RA/ConquestVictoryConditions.cs b/OpenRA.Mods.RA/ConquestVictoryConditions.cs index 975df3b842..f37020a031 100644 --- a/OpenRA.Mods.RA/ConquestVictoryConditions.cs +++ b/OpenRA.Mods.RA/ConquestVictoryConditions.cs @@ -19,13 +19,17 @@ namespace OpenRA.Mods.RA [Desc("Milliseconds")] public int NotificationDelay = 1500; - public object Create(ActorInitializer init) { return new ConquestVictoryConditions(this); } + public object Create(ActorInitializer init) { return new ConquestVictoryConditions(init.world, this); } } public class ConquestVictoryConditions : ITick, IResolveOrder { ConquestVictoryConditionsInfo Info; - public ConquestVictoryConditions(ConquestVictoryConditionsInfo info) { Info = info; } + public ConquestVictoryConditions(World world, ConquestVictoryConditionsInfo info) + { + world.ObserveAfterWinOrLose = true; + Info = info; + } public void Tick(Actor self) { @@ -63,14 +67,11 @@ namespace OpenRA.Mods.RA a.Kill(a); if (self.Owner == self.World.LocalPlayer) - { - self.World.RenderPlayer = null; Game.RunAfterDelay(Info.NotificationDelay, () => { if (Game.IsCurrentWorld(self.World)) Sound.PlayNotification(self.Owner, "Speech", "Lose", self.Owner.Country.Race); }); - } } public void Win(Actor self) @@ -80,10 +81,7 @@ namespace OpenRA.Mods.RA Game.Debug("{0} is victorious.".F(self.Owner.PlayerName)); if (self.Owner == self.World.LocalPlayer) - { - self.World.RenderPlayer = null; Game.RunAfterDelay(Info.NotificationDelay, () => Sound.PlayNotification(self.Owner, "Speech", "Win", self.Owner.Country.Race)); - } } }