From c60ca83751d2bebc7bb7844eec7274a88d4dda69 Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Thu, 4 Jan 2018 20:01:12 +0000 Subject: [PATCH] Revert "Fix actors disappearing for a tick when swapping to the frozen actor." This reverts commit 2eb090f1539f35137121fbbcaaca83c9a0f094b6. This fixes flicker for the actor->frozen transition, but then introduces the same flicker for the frozen->actor transition instead. --- OpenRA.Game/Traits/Player/FrozenActorLayer.cs | 49 +++++++++---------- 1 file changed, 22 insertions(+), 27 deletions(-) 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()