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