Merge pull request #10468 from RoosterDragon/fix-dev-shroud-invalidation

Fix shroud not updating when disabled
This commit is contained in:
Oliver Brakmann
2016-01-17 22:42:34 +01:00
2 changed files with 22 additions and 6 deletions

View File

@@ -22,8 +22,6 @@ namespace OpenRA.Traits
public class Shroud : ISync
{
[Sync] public bool Disabled;
public event Action<IEnumerable<PPos>> CellsChanged;
readonly Actor self;
@@ -38,6 +36,24 @@ namespace OpenRA.Traits
readonly Dictionary<Actor, PPos[]> visibility = new Dictionary<Actor, PPos[]>();
readonly Dictionary<Actor, PPos[]> generation = new Dictionary<Actor, PPos[]>();
[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;

View File

@@ -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);