diff --git a/OpenRA.Game/Traits/World/Shroud.cs b/OpenRA.Game/Traits/World/Shroud.cs index cd3dc6f125..ac4a6bb62c 100644 --- a/OpenRA.Game/Traits/World/Shroud.cs +++ b/OpenRA.Game/Traits/World/Shroud.cs @@ -22,8 +22,6 @@ namespace OpenRA.Traits public class Shroud : ISync { - [Sync] public bool Disabled; - public event Action> CellsChanged; readonly Actor self; @@ -38,6 +36,24 @@ namespace OpenRA.Traits readonly Dictionary visibility = new Dictionary(); readonly Dictionary generation = new Dictionary(); + [Sync] bool disabled; + public bool Disabled + { + get + { + return disabled; + } + + set + { + if (disabled == value) + return; + + disabled = value; + Invalidate(map.ProjectedCellBounds); + } + } + public int Hash { get; private set; } public Shroud(Actor self) @@ -270,7 +286,7 @@ namespace OpenRA.Traits public bool IsExplored(PPos puv) { if (!ShroudEnabled) - return true; + return map.Contains(puv); var uv = (MPos)puv; return explored.Contains(uv) && explored[uv] && (generatedShroudCount[uv] == 0 || visibleCount[uv] > 0); @@ -304,7 +320,7 @@ namespace OpenRA.Traits public bool IsVisible(PPos puv) { if (!FogEnabled) - return true; + return map.Contains(puv); var uv = (MPos)puv; return visibleCount.Contains(uv) && visibleCount[uv] > 0; diff --git a/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs b/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs index c2486cf033..1e251a3dd4 100644 --- a/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs +++ b/OpenRA.Mods.Common/Traits/World/ShroudRenderer.cs @@ -242,12 +242,12 @@ namespace OpenRA.Mods.Common.Traits shroud.CellsChanged += DirtyCells; // Needs the anonymous function to ensure the correct overload is chosen - if (shroud != null && shroud.ShroudEnabled) + if (shroud != null) visibleUnderShroud = puv => currentShroud.IsExplored(puv); else visibleUnderShroud = puv => map.Contains(puv); - if (shroud != null && shroud.FogEnabled) + if (shroud != null) visibleUnderFog = puv => currentShroud.IsVisible(puv); else visibleUnderFog = puv => map.Contains(puv);