From 738a500876c88afb226f39be6fdd968b4be7500f Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 14 Aug 2015 19:26:01 +0100 Subject: [PATCH] Fix visibility queries when fog is disabled. --- .../Traits/Modifiers/FrozenUnderFog.cs | 12 +++++++++++- .../Traits/Modifiers/HiddenUnderFog.cs | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs b/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs index 60728770d9..3b30c7ea2b 100644 --- a/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs +++ b/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs @@ -60,13 +60,23 @@ namespace OpenRA.Mods.Common.Traits visible = init.World.Players.ToDictionary(p => p, p => false); } + bool IsVisibleInner(Actor self, Player byPlayer) + { + // If fog is disabled visibility is determined by shroud + if (!byPlayer.Shroud.FogEnabled) + return self.OccupiesSpace.OccupiedCells() + .Any(o => byPlayer.Shroud.IsExplored(o.First)); + + return visible[byPlayer]; + } + public bool IsVisible(Actor self, Player byPlayer) { if (byPlayer == null) return true; var stance = self.Owner.Stances[byPlayer]; - return info.AlwaysVisibleStances.HasStance(stance) || visible[byPlayer]; + return info.AlwaysVisibleStances.HasStance(stance) || IsVisibleInner(self, byPlayer); } public void Tick(Actor self) diff --git a/OpenRA.Mods.Common/Traits/Modifiers/HiddenUnderFog.cs b/OpenRA.Mods.Common/Traits/Modifiers/HiddenUnderFog.cs index 2a0b4312cc..1b190d9765 100644 --- a/OpenRA.Mods.Common/Traits/Modifiers/HiddenUnderFog.cs +++ b/OpenRA.Mods.Common/Traits/Modifiers/HiddenUnderFog.cs @@ -28,6 +28,10 @@ namespace OpenRA.Mods.Common.Traits protected override bool IsVisibleInner(Actor self, Player byPlayer) { + // If fog is disabled visibility is determined by shroud + if (!byPlayer.Shroud.FogEnabled) + return base.IsVisibleInner(self, byPlayer); + if (Info.Type == VisibilityType.Footprint) return self.OccupiesSpace.OccupiedCells() .Any(o => byPlayer.Shroud.IsVisible(o.First));