Fix incorrect shroud visibility for stationary units.
This commit is contained in:
@@ -27,7 +27,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public readonly VisibilityType Type = VisibilityType.Footprint;
|
public readonly VisibilityType Type = VisibilityType.Footprint;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class AffectsShroud : ConditionalTrait<AffectsShroudInfo>, ITick, ISync, INotifyAddedToWorld, INotifyRemovedFromWorld
|
public abstract class AffectsShroud : ConditionalTrait<AffectsShroudInfo>, ITick, ISync, INotifyAddedToWorld, INotifyRemovedFromWorld, INotifyMoving
|
||||||
{
|
{
|
||||||
static readonly PPos[] NoCells = { };
|
static readonly PPos[] NoCells = { };
|
||||||
|
|
||||||
@@ -42,6 +42,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Sync]
|
[Sync]
|
||||||
protected bool CachedTraitDisabled { get; private set; }
|
protected bool CachedTraitDisabled { get; private set; }
|
||||||
|
|
||||||
|
bool dirty;
|
||||||
|
|
||||||
protected abstract void AddCellsToPlayerShroud(Actor self, Player player, PPos[] uv);
|
protected abstract void AddCellsToPlayerShroud(Actor self, Player player, PPos[] uv);
|
||||||
protected abstract void RemoveCellsFromPlayerShroud(Actor self, Player player);
|
protected abstract void RemoveCellsFromPlayerShroud(Actor self, Player player);
|
||||||
|
|
||||||
@@ -88,12 +90,13 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
var traitDisabled = IsTraitDisabled;
|
var traitDisabled = IsTraitDisabled;
|
||||||
var range = Range;
|
var range = Range;
|
||||||
|
|
||||||
if (cachedLocation == projectedLocation && cachedRange == range && traitDisabled == CachedTraitDisabled)
|
if (!dirty && cachedLocation == projectedLocation && cachedRange == range && traitDisabled == CachedTraitDisabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cachedRange = range;
|
cachedRange = range;
|
||||||
cachedLocation = projectedLocation;
|
cachedLocation = projectedLocation;
|
||||||
CachedTraitDisabled = traitDisabled;
|
CachedTraitDisabled = traitDisabled;
|
||||||
|
dirty = false;
|
||||||
|
|
||||||
var cells = ProjectedCells(self);
|
var cells = ProjectedCells(self);
|
||||||
foreach (var p in self.World.Players)
|
foreach (var p in self.World.Players)
|
||||||
@@ -122,5 +125,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
}
|
}
|
||||||
|
|
||||||
public virtual WDist Range { get { return CachedTraitDisabled ? WDist.Zero : Info.Range; } }
|
public virtual WDist Range { get { return CachedTraitDisabled ? WDist.Zero : Info.Range; } }
|
||||||
|
|
||||||
|
void INotifyMoving.MovementTypeChanged(Actor self, MovementType type)
|
||||||
|
{
|
||||||
|
// Recalculate the visiblity at our final stop position
|
||||||
|
if (type == MovementType.None)
|
||||||
|
dirty = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user