From 30aee56d7800671eab3bded80978fbcf67610cf0 Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Sun, 25 Oct 2015 01:19:29 +0100 Subject: [PATCH] Improve some actor queries. Use ActorsWithTrait if possible to avoid querying all actors in the world. --- OpenRA.Mods.Common/Activities/Hunt.cs | 5 +++-- OpenRA.Mods.Common/Traits/World/BridgeLayer.cs | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/Hunt.cs b/OpenRA.Mods.Common/Activities/Hunt.cs index aabac0df67..99859b53f9 100644 --- a/OpenRA.Mods.Common/Activities/Hunt.cs +++ b/OpenRA.Mods.Common/Activities/Hunt.cs @@ -23,8 +23,9 @@ namespace OpenRA.Mods.Common.Activities public Hunt(Actor self) { var attack = self.Trait(); - targets = self.World.Actors.Where(a => self != a && !a.IsDead && a.IsInWorld && a.AppearsHostileTo(self) - && a.Info.HasTraitInfo() && IsTargetable(a, self) && attack.HasAnyValidWeapons(Target.FromActor(a))); + targets = self.World.ActorsWithTrait().Select(p => p.Actor).Where( + a => self != a && !a.IsDead && a.IsInWorld && a.AppearsHostileTo(self) + && IsTargetable(a, self) && attack.HasAnyValidWeapons(Target.FromActor(a))); } bool IsTargetable(Actor self, Actor viewer) diff --git a/OpenRA.Mods.Common/Traits/World/BridgeLayer.cs b/OpenRA.Mods.Common/Traits/World/BridgeLayer.cs index ee038c4196..e502fc79ee 100644 --- a/OpenRA.Mods.Common/Traits/World/BridgeLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/BridgeLayer.cs @@ -53,8 +53,8 @@ namespace OpenRA.Mods.Common.Traits ConvertBridgeToActor(w, cell); // Link adjacent (long)-bridges so that artwork is updated correctly - foreach (var b in w.Actors.SelectMany(a => a.TraitsImplementing())) - b.LinkNeighbouringBridges(w, this); + foreach (var p in w.ActorsWithTrait()) + p.Trait.LinkNeighbouringBridges(w, this); } void ConvertBridgeToActor(World w, CPos cell)