From 149324ea92b42686876bc092009151bc5d0ffe32 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 17 Mar 2011 21:48:50 +1300 Subject: [PATCH] remove most of the crap from queries --- OpenRA.Game/Orders/GenericSelectTarget.cs | 5 +- OpenRA.Game/Traits/Player/PlayerResources.cs | 3 +- OpenRA.Game/Traits/World/Shroud.cs | 2 +- OpenRA.Game/World.cs | 31 ---------- OpenRA.Mods.Cnc/Missions/Gdi01Script.cs | 17 ++++-- OpenRA.Mods.RA/Air/HeliReturn.cs | 2 +- OpenRA.Mods.RA/Air/ReturnToBase.cs | 17 +++--- OpenRA.Mods.RA/Buildings/TechTree.cs | 20 +++--- OpenRA.Mods.RA/ConquestVictoryConditions.cs | 15 +++-- OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs | 7 ++- OpenRA.Mods.RA/HackyAI.cs | 61 ++++++++----------- OpenRA.Mods.RA/Harvester.cs | 15 ++--- OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs | 3 +- .../Player/ClassicProductionQueue.cs | 8 ++- OpenRA.Mods.RA/Player/PlaceBuilding.cs | 3 +- OpenRA.Mods.RA/PrimaryBuilding.cs | 4 +- OpenRA.Mods.RA/RenderRangeCircle.cs | 10 +-- .../Strategic/StrategicVictoryConditions.cs | 4 +- OpenRA.Mods.RA/Widgets/RadarBinWidget.cs | 8 +-- OpenRA.Mods.RA/Widgets/RadarWidget.cs | 4 +- OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs | 3 +- 21 files changed, 113 insertions(+), 129 deletions(-) diff --git a/OpenRA.Game/Orders/GenericSelectTarget.cs b/OpenRA.Game/Orders/GenericSelectTarget.cs index 81a70d6df6..ac99fad5ab 100644 --- a/OpenRA.Game/Orders/GenericSelectTarget.cs +++ b/OpenRA.Game/Orders/GenericSelectTarget.cs @@ -83,9 +83,8 @@ namespace OpenRA.Orders public override void Tick(World world) { - var hasStructure = world.Queries.OwnedBy[world.LocalPlayer] - .WithTrait() - .Any(); + var hasStructure = world.Queries.WithTrait() + .Any( a => a.Actor.Owner == world.LocalPlayer ); if (!hasStructure) world.CancelInputMode(); diff --git a/OpenRA.Game/Traits/Player/PlayerResources.cs b/OpenRA.Game/Traits/Player/PlayerResources.cs index fc622289df..e103082fef 100644 --- a/OpenRA.Game/Traits/Player/PlayerResources.cs +++ b/OpenRA.Game/Traits/Player/PlayerResources.cs @@ -132,7 +132,8 @@ namespace OpenRA.Traits { var eva = self.World.WorldActor.Info.Traits.Get(); - OreCapacity = self.World.Queries.OwnedBy[Owner].WithTrait() + OreCapacity = self.World.Queries.WithTrait() + .Where(a => a.Actor.Owner == Owner) .Sum(a => a.Trait.Capacity); if (Ore > OreCapacity) diff --git a/OpenRA.Game/Traits/World/Shroud.cs b/OpenRA.Game/Traits/World/Shroud.cs index 23bfdf091c..e7018ffb01 100644 --- a/OpenRA.Game/Traits/World/Shroud.cs +++ b/OpenRA.Game/Traits/World/Shroud.cs @@ -126,7 +126,7 @@ namespace OpenRA.Traits } // Is now our ally; add unit vis if (newStance == Stance.Ally) - foreach (var a in w.Queries.OwnedBy[player]) + foreach (var a in w.Actors.Where( a => a.Owner == player )) AddActor(a); } diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index bee8eeac44..04da180b0b 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -208,46 +208,15 @@ namespace OpenRA { readonly World world; - public readonly Cache OwnedBy; - public AllQueries( World world ) { this.world = world; - OwnedBy = new Cache(p => new OwnedByCachedView(world, world.actors, x => x.Owner == p)); } public IEnumerable> WithTrait() { return world.traitDict.ActorsWithTraitMultiple( world ); } - - static CachedView> WithTraitInner( Set set, TypeDictionary hasTrait ) - { - var ret = hasTrait.GetOrDefault>>(); - if( ret != null ) - return ret; - ret = new CachedView>( - set, - x => x.HasTrait(), - x => new TraitPair { Actor = x, Trait = x.Trait() } ); - hasTrait.Add( ret ); - return ret; - } - - public class OwnedByCachedView : CachedView - { - readonly TypeDictionary hasTrait = new TypeDictionary(); - - public OwnedByCachedView( World world, Set set, Func include ) - : base( set, include, a => a ) - { - } - - public CachedView> WithTrait() - { - return WithTraitInner( this, hasTrait ); - } - } } public AllQueries Queries; diff --git a/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs b/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs index 69b598f584..4cf8641575 100644 --- a/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs +++ b/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs @@ -45,6 +45,8 @@ namespace OpenRA.Mods.Cnc started = true; })); } + + // THIS IS SHIT public void OnVictory(World w) { @@ -54,7 +56,8 @@ namespace OpenRA.Mods.Cnc w.WorldActor.CancelActivity(); w.WorldActor.QueueActivity(new Wait(125)); - w.WorldActor.QueueActivity(new CallFunc(() => Scripting.Media.PlayFMVFullscreen(w, "consyard.vqa", () => + w.WorldActor.QueueActivity(new CallFunc( + () => Scripting.Media.PlayFMVFullscreen(w, "consyard.vqa", () => { Sound.StopMusic(); Game.Disconnect(); @@ -69,7 +72,8 @@ namespace OpenRA.Mods.Cnc w.WorldActor.CancelActivity(); w.WorldActor.QueueActivity(new Wait(125)); - w.WorldActor.QueueActivity(new CallFunc(() => Scripting.Media.PlayFMVFullscreen(w, "gameover.vqa", () => + w.WorldActor.QueueActivity(new CallFunc( + () => Scripting.Media.PlayFMVFullscreen(w, "gameover.vqa", () => { Sound.StopMusic(); Game.Disconnect(); @@ -108,8 +112,8 @@ namespace OpenRA.Mods.Cnc }); } // GoodGuy win conditions - // BadGuy is dead - int badcount = self.World.Queries.OwnedBy[Players["BadGuy"]].Count(a => !a.IsDead()); + // BadGuy is dead + var badcount = self.World.Actors.Count(a => a.Owner == Players["BadGuy"] && !a.IsDead()); if (badcount != lastBadCount) { Game.Debug("{0} badguys remain".F(badcount)); @@ -119,8 +123,9 @@ namespace OpenRA.Mods.Cnc OnVictory(self.World); } - //GoodGuy lose conditions - if (self.World.Queries.OwnedBy[Players["GoodGuy"]].Count( a => !a.IsDead()) == 0) + //GoodGuy lose conditions + var goodCount = self.World.Actors.Count(a => a.Owner == Players["GoodGuy"] && !a.IsDead()); + if (goodCount == 0) OnLose(self.World); // GoodGuy reinforcements diff --git a/OpenRA.Mods.RA/Air/HeliReturn.cs b/OpenRA.Mods.RA/Air/HeliReturn.cs index f799f78c0f..69494f6220 100755 --- a/OpenRA.Mods.RA/Air/HeliReturn.cs +++ b/OpenRA.Mods.RA/Air/HeliReturn.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA.Air static Actor ChooseHelipad(Actor self) { var rearmBuildings = self.Info.Traits.Get().RearmBuildings; - return self.World.Queries.OwnedBy[self.Owner].FirstOrDefault( + return self.World.Actors.Where( a => a.Owner == self.Owner ).FirstOrDefault( a => rearmBuildings.Contains(a.Info.Name) && !Reservable.IsReserved(a)); } diff --git a/OpenRA.Mods.RA/Air/ReturnToBase.cs b/OpenRA.Mods.RA/Air/ReturnToBase.cs index 5a7ae48ce5..359b50b9f8 100755 --- a/OpenRA.Mods.RA/Air/ReturnToBase.cs +++ b/OpenRA.Mods.RA/Air/ReturnToBase.cs @@ -11,7 +11,8 @@ using System; using System.Linq; using OpenRA.Traits; -using OpenRA.Traits.Activities; +using OpenRA.Traits.Activities; +using OpenRA.Mods.RA.Buildings; namespace OpenRA.Mods.RA.Air { @@ -23,12 +24,14 @@ namespace OpenRA.Mods.RA.Air int2 w1, w2, w3; /* tangent points to turn circles */ public static Actor ChooseAirfield(Actor self) - { - return self.World.Queries.OwnedBy[self.Owner] - .Where(a => self.Info.Traits.Get().RearmBuildings.Contains(a.Info.Name) - && !Reservable.IsReserved(a)) - .OrderBy(a => (a.CenterLocation - self.CenterLocation).LengthSquared) - .FirstOrDefault(); + { + return self.World.Queries.WithTrait() + .Where(a => a.Actor.Owner == self.Owner) + .Where(a => self.Info.Traits.Get().RearmBuildings.Contains(a.Actor.Info.Name) + && !Reservable.IsReserved(a.Actor)) + .OrderBy(a => (a.Actor.CenterLocation - self.CenterLocation).LengthSquared) + .Select(a => a.Actor) + .FirstOrDefault(); } void Calculate(Actor self) diff --git a/OpenRA.Mods.RA/Buildings/TechTree.cs b/OpenRA.Mods.RA/Buildings/TechTree.cs index 534aa1618e..310e08e711 100755 --- a/OpenRA.Mods.RA/Buildings/TechTree.cs +++ b/OpenRA.Mods.RA/Buildings/TechTree.cs @@ -58,16 +58,18 @@ namespace OpenRA.Mods.RA.Buildings { var ret = new Cache>( x => new List() ); if (player == null) - return ret; + return ret; + + foreach (var b in player.World.Queries.WithTrait() + .Where(a => a.Actor.Owner == player).Select(a => a.Actor)) + { + ret[b.Info.Name].Add(b); + var tt = b.Info.Traits.GetOrDefault(); + if (tt != null) + foreach (var alt in tt.AlternateName) + ret[alt].Add(b); + } - foreach( var b in player.World.Queries.OwnedBy[player].Where( x=>x.Info.Traits.Contains() ) ) - { - ret[ b.Info.Name ].Add( b ); - var tt = b.Info.Traits.GetOrDefault(); - if( tt != null ) - foreach( var alt in tt.AlternateName ) - ret[ alt ].Add( b ); - } return ret; } diff --git a/OpenRA.Mods.RA/ConquestVictoryConditions.cs b/OpenRA.Mods.RA/ConquestVictoryConditions.cs index a2d5e46cc7..68f66c0dc2 100644 --- a/OpenRA.Mods.RA/ConquestVictoryConditions.cs +++ b/OpenRA.Mods.RA/ConquestVictoryConditions.cs @@ -21,13 +21,15 @@ namespace OpenRA.Mods.RA { if (self.Owner.WinState != WinState.Undefined || self.Owner.NonCombatant) return; - var hasAnything = self.World.Queries.OwnedBy[self.Owner] - .WithTrait().Any(); + var hasAnything = self.World.Queries.WithTrait() + .Any( a => a.Actor.Owner == self.Owner ); if (!hasAnything && !self.Owner.NonCombatant) Surrender(self); - var others = self.World.players.Where( p => !p.Value.NonCombatant && p.Value != self.Owner && p.Value.Stances[self.Owner] != Stance.Ally ); + var others = self.World.players.Where( p => !p.Value.NonCombatant + && p.Value != self.Owner && p.Value.Stances[self.Owner] != Stance.Ally ); + if (others.Count() == 0) return; if(others.All(p => p.Value.WinState == WinState.Lost)) @@ -45,9 +47,10 @@ namespace OpenRA.Mods.RA if (self.Owner.WinState == WinState.Lost) return; self.Owner.WinState = WinState.Lost; - Game.Debug("{0} is defeated.".F(self.Owner.PlayerName)); - foreach (var a in self.World.Queries.OwnedBy[self.Owner]) - a.Kill(a); + Game.Debug("{0} is defeated.".F(self.Owner.PlayerName)); + + foreach (var a in self.World.Actors.Where(a => a.Owner == self.Owner)) + a.Kill(a); if (self.Owner == self.World.LocalPlayer) self.World.LocalShroud.Disabled = true; diff --git a/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs b/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs index a12f08db9e..4302f440a8 100644 --- a/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs +++ b/OpenRA.Mods.RA/Crates/GiveMcvCrateAction.cs @@ -29,8 +29,11 @@ namespace OpenRA.Mods.RA.Crates if (base.GetSelectionShares(collector) == 0) return 0; // there's some other really good reason why we shouldn't give this. - var hasBase = self.World.Queries.OwnedBy[collector.Owner].WithTrait().Any(); - return hasBase ? info.SelectionShares : (info as GiveMcvCrateActionInfo).NoBaseSelectionShares; + var hasBase = self.World.Queries.WithTrait() + .Any(a => a.Actor.Owner == collector.Owner); + + return hasBase ? info.SelectionShares : + (info as GiveMcvCrateActionInfo).NoBaseSelectionShares; } } } diff --git a/OpenRA.Mods.RA/HackyAI.cs b/OpenRA.Mods.RA/HackyAI.cs index 88525a98d6..cea50281ce 100644 --- a/OpenRA.Mods.RA/HackyAI.cs +++ b/OpenRA.Mods.RA/HackyAI.cs @@ -110,10 +110,10 @@ namespace OpenRA.Mods.RA { this.p = p; enabled = true; - playerPower = p.PlayerActor.Trait(); - builders = new BaseBuilder[] { - new BaseBuilder( this, "Building", ChooseBuildingToBuild ), - new BaseBuilder( this, "Defense", ChooseDefenseToBuild ) }; + playerPower = p.PlayerActor.Trait(); + builders = new BaseBuilder[] { + new BaseBuilder( this, "Building", q => ChooseBuildingToBuild(q, true) ), + new BaseBuilder( this, "Defense", q => ChooseBuildingToBuild(q, false) ) }; } int GetPowerProvidedBy(ActorInfo building) @@ -137,38 +137,23 @@ namespace OpenRA.Mods.RA playerPower.PowerProvided > playerPower.PowerDrained * 1.2; } - ActorInfo ChooseBuildingToBuild(ProductionQueue queue) + ActorInfo ChooseBuildingToBuild(ProductionQueue queue, bool buildPower) { var buildableThings = queue.BuildableItems(); if (!HasAdequatePower()) /* try to maintain 20% excess power */ - { + { + if (!buildPower) return null; + /* find the best thing we can build which produces power */ return buildableThings.Where(a => GetPowerProvidedBy(a) > 0) .OrderByDescending(a => GetPowerProvidedBy(a)).FirstOrDefault(); - } - - var myBuildings = p.World.Queries.OwnedBy[p].WithTrait() - .Select(a => a.Actor.Info.Name).ToArray(); - - - foreach (var frac in Info.BuildingFractions) - if (buildableThings.Any(b => b.Name == frac.Key)) - if (myBuildings.Count(a => a == frac.Key) < frac.Value * myBuildings.Length) - return Rules.Info[frac.Key]; - - return null; - } - - ActorInfo ChooseDefenseToBuild(ProductionQueue queue) - { - if (!HasAdequatePower()) - return null; - - var buildableThings = queue.BuildableItems(); - - var myBuildings = p.World.Queries.OwnedBy[p].WithTrait() - .Select(a => a.Actor.Info.Name).ToArray(); + } + + var myBuildings = p.World.Queries + .WithTrait() + .Where( a => a.Actor.Owner == p ) + .Select(a => a.Actor.Info.Name).ToArray(); foreach (var frac in Info.BuildingFractions) if (buildableThings.Any(b => b.Name == frac.Key)) @@ -287,9 +272,10 @@ namespace OpenRA.Mods.RA attackForce.RemoveAll(a => a.Destroyed); // don't select harvesters. - var newUnits = self.World.Queries.OwnedBy[p] - .Where(a => a.HasTrait() && a.Info != Rules.Info["harv"] - && !activeUnits.Contains(a)).ToArray(); + var newUnits = self.World.Queries.WithTrait() + .Where(a => a.Actor.Owner == p && a.Actor.Info != Rules.Info["harv"] + && !activeUnits.Contains(a.Actor)) + .Select(a => a.Actor).ToArray(); foreach (var a in newUnits) { @@ -323,8 +309,9 @@ namespace OpenRA.Mods.RA void SetRallyPointsForNewProductionBuildings(Actor self) { - var buildings = self.World.Queries.OwnedBy[p].WithTrait() - .Where(rp => !IsRallyPointValid(rp.Trait.rallyPoint)).ToArray(); + var buildings = self.World.Queries.WithTrait() + .Where(rp => rp.Actor.Owner == p && + !IsRallyPointValid(rp.Trait.rallyPoint)).ToArray(); if (buildings.Length > 0) BotDebug("Bot {0} needs to find rallypoints for {1} buildings.", @@ -395,9 +382,9 @@ namespace OpenRA.Mods.RA void DeployMcv(Actor self) { - /* find our mcv and deploy it */ - var mcv = self.World.Queries.OwnedBy[p] - .FirstOrDefault(a => a.Info == Rules.Info["mcv"]); + /* find our mcv and deploy it */ + var mcv = self.World.Actors + .FirstOrDefault(a => a.Owner == p && a.Info == Rules.Info["mcv"]); if (mcv != null) { diff --git a/OpenRA.Mods.RA/Harvester.cs b/OpenRA.Mods.RA/Harvester.cs index 41b52caef3..fa7a1ea891 100644 --- a/OpenRA.Mods.RA/Harvester.cs +++ b/OpenRA.Mods.RA/Harvester.cs @@ -63,18 +63,19 @@ namespace OpenRA.Mods.RA } Actor ClosestProc(Actor self, Actor ignore) - { - var refs = self.World.Queries.OwnedBy[self.Owner] - .Where(x => x != ignore && x.HasTrait()) - .ToList(); + { + var refs = self.World.Queries.WithTrait() + .Where(x => x.Actor != ignore && x.Actor.Owner == self.Owner) + .ToList(); var mi = self.Info.Traits.Get(); var path = self.World.WorldActor.Trait().FindPath( - PathSearch.FromPoints(self.World, mi, - refs.Select(r => r.Location + r.Trait().DeliverOffset), + PathSearch.FromPoints(self.World, mi, + refs.Select(r => r.Actor.Location + r.Trait.DeliverOffset), self.Location, false)); path.Reverse(); if (path.Count != 0) - return refs.FirstOrDefault(x => x.Location + x.Trait().DeliverOffset == path[0]); + return refs.Where(x => x.Actor.Location + x.Trait.DeliverOffset == path[0]) + .Select(a => a.Actor).FirstOrDefault(); else return null; } diff --git a/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs b/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs index dc21c2b583..78c3a4c6e0 100644 --- a/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs @@ -50,7 +50,8 @@ namespace OpenRA.Mods.RA.Orders public static bool PlayerIsAllowedToRepair( World world ) { - return world.Queries.OwnedBy[ world.LocalPlayer ].WithTrait().Any(); + return world.Queries.WithTrait() + .Any(a => a.Actor.Owner == world.LocalPlayer); } public void RenderAfterWorld( WorldRenderer wr, World world ) { } diff --git a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs index 1d66bff5e8..7696e6777c 100755 --- a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs @@ -28,7 +28,8 @@ namespace OpenRA.Mods.RA [Sync] bool QueueActive = false; public override void Tick( Actor self ) { - QueueActive = self.World.Queries.OwnedBy[self.Owner].WithTrait() + QueueActive = self.World.Queries.WithTrait() + .Where(x => x.Actor.Owner == self.Owner) .Where(x => x.Trait.Info.Produces.Contains(Info.Type)) .Any(); @@ -49,8 +50,9 @@ namespace OpenRA.Mods.RA protected override bool BuildUnit( string name ) { // Find a production structure to build this actor - var producers = self.World.Queries.OwnedBy[self.Owner] - .WithTrait() + var producers = self.World.Queries + .WithTrait() + .Where(x => x.Actor.Owner == self.Owner) .Where(x => x.Trait.Info.Produces.Contains(Info.Type)) .OrderByDescending(x => x.Actor.IsPrimaryBuilding() ? 1 : 0 ); // prioritize the primary. diff --git a/OpenRA.Mods.RA/Player/PlaceBuilding.cs b/OpenRA.Mods.RA/Player/PlaceBuilding.cs index 8f25a1b716..3f3a294c50 100755 --- a/OpenRA.Mods.RA/Player/PlaceBuilding.cs +++ b/OpenRA.Mods.RA/Player/PlaceBuilding.cs @@ -95,7 +95,8 @@ namespace OpenRA.Mods.RA if (bi == null) return; - var producers = self.World.Queries.OwnedBy[ self.Owner ].WithTrait() + var producers = self.World.Queries.WithTrait() + .Where( x => x.Actor.Owner == self.Owner ) .Where( x => x.Actor.Info.Traits.Get().Produces.Contains( bi.Queue ) ) .ToList(); var producer = producers.Where( x => x.Actor.IsPrimaryBuilding() ).Concat( producers ) diff --git a/OpenRA.Mods.RA/PrimaryBuilding.cs b/OpenRA.Mods.RA/PrimaryBuilding.cs index 075f08b7f4..63690234de 100755 --- a/OpenRA.Mods.RA/PrimaryBuilding.cs +++ b/OpenRA.Mods.RA/PrimaryBuilding.cs @@ -54,10 +54,12 @@ namespace OpenRA.Mods.RA return; } + // THIS IS SHIT // Cancel existing primaries foreach (var p in self.Info.Traits.Get().Produces) - foreach (var b in self.World.Queries.OwnedBy[self.Owner] + foreach (var b in self.World.Queries .WithTrait() + .Where(a => a.Actor.Owner == self.Owner) .Where(x => x.Trait.IsPrimary && (x.Actor.Info.Traits.Get().Produces.Contains(p)))) b.Trait.SetPrimaryProducer(b.Actor, false); diff --git a/OpenRA.Mods.RA/RenderRangeCircle.cs b/OpenRA.Mods.RA/RenderRangeCircle.cs index f15e3b1613..c3b3dee45b 100644 --- a/OpenRA.Mods.RA/RenderRangeCircle.cs +++ b/OpenRA.Mods.RA/RenderRangeCircle.cs @@ -8,7 +8,8 @@ */ #endregion -using System.Drawing; +using System.Drawing; +using System.Linq; using OpenRA.Graphics; using OpenRA.Traits; @@ -30,9 +31,10 @@ namespace OpenRA.Mods.RA centerLocation, ai.Traits.Get().GetMaximumRange()); - foreach (var a in w.Queries.OwnedBy[w.LocalPlayer].WithTrait()) - if (a.Actor.Info.Traits.Get().RangeCircleType == RangeCircleType) - a.Trait.RenderBeforeWorld(wr, a.Actor); + foreach (var a in w.Queries.WithTrait()) + if (a.Actor.Owner == a.Actor.World.LocalPlayer) + if (a.Actor.Info.Traits.Get().RangeCircleType == RangeCircleType) + a.Trait.RenderBeforeWorld(wr, a.Actor); } } diff --git a/OpenRA.Mods.RA/Strategic/StrategicVictoryConditions.cs b/OpenRA.Mods.RA/Strategic/StrategicVictoryConditions.cs index a59933f772..b97b616037 100644 --- a/OpenRA.Mods.RA/Strategic/StrategicVictoryConditions.cs +++ b/OpenRA.Mods.RA/Strategic/StrategicVictoryConditions.cs @@ -93,7 +93,9 @@ namespace OpenRA.Mods.RA { if (p == Self.Owner || (p.Stances[Self.Owner] == Stance.Ally && Self.Owner.Stances[p] == Stance.Ally)) { - total += Self.World.Queries.OwnedBy[p].Where(a => a.HasTrait() && a.TraitOrDefault().Critical == critical).Count(); + total += Self.World.Queries.WithTrait() + .Where(a => a.Actor.Owner == p) + .Count(a => a.Trait.Critical == critical); } } return total; diff --git a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs index 69d2c3ff6b..4bad949eda 100755 --- a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs @@ -164,10 +164,10 @@ namespace OpenRA.Mods.RA.Widgets int updateTicks = 0; public override void Tick() - { - var hasRadarNew = world.Queries.OwnedBy[world.LocalPlayer] - .WithTrait() - .Any(a => a.Trait.IsActive); + { + var hasRadarNew = world.Queries + .WithTrait() + .Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive); if (hasRadarNew != hasRadar) radarAnimating = true; diff --git a/OpenRA.Mods.RA/Widgets/RadarWidget.cs b/OpenRA.Mods.RA/Widgets/RadarWidget.cs index d708997b75..745ba08ddc 100755 --- a/OpenRA.Mods.RA/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarWidget.cs @@ -156,9 +156,9 @@ namespace OpenRA.Mods.RA.Widgets int updateTicks = 0; public override void Tick() { - var hasRadarNew = world.Queries.OwnedBy[world.LocalPlayer] + var hasRadarNew = world.Queries .WithTrait() - .Any(a => a.Trait.IsActive); + .Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive); if (hasRadarNew != hasRadar) { diff --git a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs index c9c879bb6a..8969648fcc 100644 --- a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs +++ b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs @@ -101,7 +101,8 @@ namespace OpenRA.Mods.RA.Widgets bool CycleBases() { - var bases = World.Queries.OwnedBy[World.LocalPlayer].WithTrait().ToArray(); + var bases = World.Queries.WithTrait() + .Where( a => a.Actor.Owner == World.LocalPlayer ).ToArray(); if (!bases.Any()) return true; var next = bases