Fix crushable logic for actors in cell

This commit is contained in:
teinarss
2019-09-02 13:30:54 +02:00
committed by Paul Chote
parent ca8ca2df5c
commit c13fb80257

View File

@@ -443,6 +443,8 @@ namespace OpenRA.Mods.Common.Traits
foreach (var actor in actors)
{
var actorBlocksPlayers = world.AllPlayersMask;
var actorCrushablePlayers = world.NoPlayersMask;
var crushables = actor.TraitsImplementing<ICrushable>();
var mobile = actor.OccupiesSpace as Mobile;
var isMoving = mobile != null && mobile.CurrentMovementTypes.HasMovementType(MovementType.Horizontal);
@@ -451,10 +453,8 @@ namespace OpenRA.Mods.Common.Traits
{
cellFlag |= CellFlag.HasCrushableActor;
foreach (var crushable in crushables)
cellCrushablePlayers = cellCrushablePlayers.Intersect(crushable.CrushableBy(actor, Info.Crushes));
actorCrushablePlayers = actorCrushablePlayers.Union(crushable.CrushableBy(actor, Info.Crushes));
}
else
cellCrushablePlayers = world.NoPlayersMask;
if (isMoving)
{
@@ -470,6 +470,7 @@ namespace OpenRA.Mods.Common.Traits
cellFlag |= CellFlag.HasTemporaryBlocker;
}
cellCrushablePlayers = cellCrushablePlayers.Intersect(actorCrushablePlayers);
cellBlockedPlayers = cellBlockedPlayers.Union(actorBlocksPlayers);
}