From 7f4b62b7eeee7f6091341a13de4fb82f1ec6cfee Mon Sep 17 00:00:00 2001 From: Oliver Brakmann Date: Tue, 10 Feb 2015 19:21:49 +0100 Subject: [PATCH] Fix extent of buildable area below structures Restore use of GetBuildingAt to take bibs into account for buildable area, and only consult the actor map if the actor at that location is not a building. --- OpenRA.Mods.Common/Traits/Buildings/Building.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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); } }