Fix actors not being visible when created within sight range of an enemy.

Since bbf5970bc1 we only update frozen actor state on demand rather than every tick. However when the actor was initially created we were failing to set the initial visibility state if the frozen actor was invisible.

With this fix, we now set the visibility states on creation correctly. This fixes an issue where enemy actors created within line of sight would not appear.
This commit is contained in:
RoosterDragon
2022-08-11 19:14:45 +01:00
committed by Gustas
parent 2599cb26d8
commit 8339c6843e

View File

@@ -70,18 +70,26 @@ namespace OpenRA.Mods.Common.Traits
{
var frozenActor = new FrozenActor(self, this, footprint, player, startsRevealed);
player.PlayerActor.Trait<FrozenActorLayer>().Add(frozenActor);
return new FrozenState(frozenActor) { IsVisible = startsRevealed };
return new FrozenState(frozenActor) { IsVisible = !frozenActor.Visible };
});
// Set the initial visibility state
// This relies on actor.GetTargetablePositions(), which is also setup up in Created.
// Since we can't be sure whether our method will run after theirs, defer by a frame.
if (startsRevealed)
self.World.AddFrameEndTask(_ =>
self.World.AddFrameEndTask(_ =>
{
for (var playerIndex = 0; playerIndex < frozenStates.Count; playerIndex++)
{
for (var playerIndex = 0; playerIndex < frozenStates.Count; playerIndex++)
UpdateFrozenActor(frozenStates[playerIndex].FrozenActor, playerIndex);
});
var state = frozenStates[playerIndex];
if (startsRevealed || state.IsVisible)
{
UpdateFrozenActor(state.FrozenActor, playerIndex);
// Needed so tooltips appear.
state.FrozenActor.Hidden = false;
}
}
});
created = true;
}