Fix actors disappearing for a tick when swapping to the frozen actor.

This commit is contained in:
Paul Chote
2018-01-01 12:48:01 +00:00
committed by ltem
parent f8abd5d319
commit 2eb090f153

View File

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