diff --git a/OpenRA.Mods.Common/Traits/Buildings/Building.cs b/OpenRA.Mods.Common/Traits/Buildings/Building.cs index 51e4eb0d55..47f9a60e33 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Building.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Building.cs @@ -72,6 +72,7 @@ namespace OpenRA.Mods.Common.Traits var scanEnd = world.Map.Clamp(topLeft + buildingMaxBounds + new CVec(Adjacent, Adjacent)); var nearnessCandidates = new List(); + var bi = world.WorldActor.Trait(); var allyBuildRadius = world.LobbyInfo.GlobalSettings.AllyBuildRadius; for (var y = scanStart.Y; y < scanEnd.Y; y++) @@ -80,11 +81,19 @@ namespace OpenRA.Mods.Common.Traits { var pos = new CPos(x, y); - var at = world.ActorMap.GetUnitsAt(pos).Where(a => a.IsInWorld - && (a.Owner == p || (allyBuildRadius && a.Owner.Stances[p] == Stance.Ally)) - && a.HasTrait()); + var buildingAtPos = bi.GetBuildingAt(pos); - if (at.Any()) + if (buildingAtPos == null) + { + var unitsAtPos = world.ActorMap.GetUnitsAt(pos).Where(a => a.IsInWorld + && (a.Owner == p || (allyBuildRadius && a.Owner.Stances[p] == Stance.Ally)) + && a.HasTrait()); + + if (unitsAtPos.Any()) + nearnessCandidates.Add(pos); + } + else if (buildingAtPos.IsInWorld && buildingAtPos.HasTrait() + && (buildingAtPos.Owner == p || (allyBuildRadius && buildingAtPos.Owner.Stances[p] == Stance.Ally))) nearnessCandidates.Add(pos); } }