diff --git a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs index c3c8682511..0f2ac4963a 100644 --- a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs +++ b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs @@ -254,38 +254,33 @@ namespace OpenRA.Traits void ITick.Tick(Actor self) { - // Update visibility at the end of the tick to make sure that - // the fog/shroud state has been updated for the tick - self.World.AddFrameEndTask(w => + UpdateDirtyFrozenActorsFromDirtyBins(); + + var frozenActorsToRemove = new List(); + VisibilityHash = 0; + FrozenHash = 0; + + foreach (var kvp in frozenActorsById) { - UpdateDirtyFrozenActorsFromDirtyBins(); + var id = kvp.Key; + var hash = (int)id; + FrozenHash += hash; - var frozenActorsToRemove = new List(); - VisibilityHash = 0; - FrozenHash = 0; + var frozenActor = kvp.Value; + frozenActor.Tick(); + if (dirtyFrozenActorIds.Contains(id)) + frozenActor.UpdateVisibility(); - foreach (var kvp in frozenActorsById) - { - var id = kvp.Key; - var hash = (int)id; - FrozenHash += hash; + if (frozenActor.Visible) + VisibilityHash += hash; + else if (frozenActor.Actor == null) + frozenActorsToRemove.Add(frozenActor); + } - var frozenActor = kvp.Value; - frozenActor.Tick(); - if (dirtyFrozenActorIds.Contains(id)) - frozenActor.UpdateVisibility(); + dirtyFrozenActorIds.Clear(); - if (frozenActor.Visible) - VisibilityHash += hash; - else if (frozenActor.Actor == null) - frozenActorsToRemove.Add(frozenActor); - } - - dirtyFrozenActorIds.Clear(); - - foreach (var fa in frozenActorsToRemove) - Remove(fa); - }); + foreach (var fa in frozenActorsToRemove) + Remove(fa); } void UpdateDirtyFrozenActorsFromDirtyBins()