From c13fb8025777725400d4ca04d280377313b92772 Mon Sep 17 00:00:00 2001 From: teinarss Date: Mon, 2 Sep 2019 13:30:54 +0200 Subject: [PATCH] Fix crushable logic for actors in cell --- OpenRA.Mods.Common/Traits/World/Locomotor.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/World/Locomotor.cs b/OpenRA.Mods.Common/Traits/World/Locomotor.cs index 320e348d2a..944d2f9867 100644 --- a/OpenRA.Mods.Common/Traits/World/Locomotor.cs +++ b/OpenRA.Mods.Common/Traits/World/Locomotor.cs @@ -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(); 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); }