From 79019b06ca228f719fb4419c6e4044eb9c467660 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 25 Oct 2020 20:01:35 +0000 Subject: [PATCH] Remove BuildingInfluence from Plug placement. --- .../Orders/PlaceBuildingOrderGenerator.cs | 15 +++++------ .../Traits/Player/PlaceBuilding.cs | 27 +++++++++---------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs index 4c05099301..04ffc47447 100644 --- a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs @@ -81,9 +81,9 @@ namespace OpenRA.Mods.Common.Orders } } + readonly World world; readonly ProductionQueue queue; readonly PlaceBuildingInfo placeBuildingInfo; - readonly BuildingInfluence buildingInfluence; readonly ResourceLayer resourceLayer; readonly Viewport viewport; readonly VariantWrapper[] variants; @@ -91,10 +91,9 @@ namespace OpenRA.Mods.Common.Orders public PlaceBuildingOrderGenerator(ProductionQueue queue, string name, WorldRenderer worldRenderer) { - var world = queue.Actor.World; this.queue = queue; + world = queue.Actor.World; placeBuildingInfo = queue.Actor.Owner.PlayerActor.Info.TraitInfo(); - buildingInfluence = world.WorldActor.Trait(); resourceLayer = world.WorldActor.TraitOrDefault(); viewport = worldRenderer.Viewport; @@ -225,12 +224,12 @@ namespace OpenRA.Mods.Common.Orders bool AcceptsPlug(CPos cell, PlugInfo plug) { - var host = buildingInfluence.GetBuildingAt(cell); - if (host == null) - return false; + foreach (var a in world.ActorMap.GetActorsAt(cell)) + foreach (var p in a.TraitsImplementing()) + if (p.AcceptsPlug(a, plug.Type)) + return true; - var location = host.Location; - return host.TraitsImplementing().Any(p => p.AcceptsPlug(host, plug.Type)); + return false; } IEnumerable IOrderGenerator.Render(WorldRenderer wr, World world) { yield break; } diff --git a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs index 0dce17aab3..304ec13dc5 100644 --- a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs +++ b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs @@ -135,27 +135,26 @@ namespace OpenRA.Mods.Common.Traits } else if (os == "PlacePlug") { - var host = self.World.WorldActor.Trait().GetBuildingAt(targetLocation); - if (host == null) - return; - var plugInfo = actorInfo.TraitInfoOrDefault(); if (plugInfo == null) return; - var location = host.Location; - var pluggableLocations = host.TraitsImplementing() - .Where(p => p.AcceptsPlug(host, plugInfo.Type)); + foreach (var a in self.World.ActorMap.GetActorsAt(targetLocation)) + { + var pluggables = a.TraitsImplementing() + .Where(p => p.AcceptsPlug(a, plugInfo.Type)) + .ToList(); - var pluggable = pluggableLocations.FirstOrDefault(p => location + p.Info.Offset == targetLocation) - ?? pluggableLocations.FirstOrDefault(); + var pluggable = pluggables.FirstOrDefault(p => a.Location + p.Info.Offset == targetLocation) + ?? pluggables.FirstOrDefault(); - if (pluggable == null) - return; + if (pluggable == null) + return; - pluggable.EnablePlug(host, plugInfo.Type); - foreach (var s in buildingInfo.BuildSounds) - Game.Sound.PlayToPlayer(SoundType.World, order.Player, s, host.CenterPosition); + pluggable.EnablePlug(a, plugInfo.Type); + foreach (var s in buildingInfo.BuildSounds) + Game.Sound.PlayToPlayer(SoundType.World, order.Player, s, a.CenterPosition); + } } else {