From 4e548291cee9c50baf12c0cff231d75efe3e45c4 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Fri, 17 Apr 2020 11:28:59 +0200 Subject: [PATCH] Treat transit-only tiles as invalid locations for minelayers --- OpenRA.Mods.Cnc/Activities/LayMines.cs | 4 +++- OpenRA.Mods.Cnc/Traits/Minelayer.cs | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Cnc/Activities/LayMines.cs b/OpenRA.Mods.Cnc/Activities/LayMines.cs index 74d5ded137..8d8736c3fa 100644 --- a/OpenRA.Mods.Cnc/Activities/LayMines.cs +++ b/OpenRA.Mods.Cnc/Activities/LayMines.cs @@ -107,9 +107,11 @@ namespace OpenRA.Mods.Cnc.Activities if (minefield != null) { var positionable = (IPositionable)movement; + var mobile = positionable as Mobile; minefield.RemoveAll(c => self.World.ActorMap.GetActorsAt(c) .Any(a => a.Info.Name == minelayer.Info.Mine.ToLowerInvariant() && a.CanBeViewedByPlayer(self.Owner)) || - (!positionable.CanEnterCell(c, null, BlockedByActor.Immovable) && self.Owner.Shroud.IsVisible(c))); + ((!positionable.CanEnterCell(c, null, BlockedByActor.Immovable) || (mobile != null && !mobile.CanStayInCell(c))) + && self.Owner.Shroud.IsVisible(c))); } } diff --git a/OpenRA.Mods.Cnc/Traits/Minelayer.cs b/OpenRA.Mods.Cnc/Traits/Minelayer.cs index e050be3184..0c316a67b3 100644 --- a/OpenRA.Mods.Cnc/Traits/Minelayer.cs +++ b/OpenRA.Mods.Cnc/Traits/Minelayer.cs @@ -231,13 +231,14 @@ namespace OpenRA.Mods.Cnc.Traits minelayers.Max(m => m.Info.TraitInfo().MinefieldDepth)); var movement = minelayer.Trait(); + var mobile = movement as Mobile; var pal = wr.Palette(TileSet.TerrainPaletteInternalName); foreach (var c in minefield) { var tile = tileOk; if (world.FogObscures(c)) tile = tileUnknown; - else if (!movement.CanEnterCell(c, null, BlockedByActor.Immovable)) + else if (!movement.CanEnterCell(c, null, BlockedByActor.Immovable) || (mobile != null && !mobile.CanStayInCell(c))) tile = tileBlocked; yield return new SpriteRenderable(tile, world.Map.CenterOfCell(c),