Fix crushable logic for actors in cell
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user