From e12709543785bab8ebbe2e90fcd9a194eabb5a59 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 27 Dec 2010 20:03:19 +1300 Subject: [PATCH] remove some dumb state-tracking from OreRefinery --- OpenRA.Mods.RA/Harvester.cs | 16 +------------- OpenRA.Mods.RA/OreRefinery.cs | 35 +++++++++++------------------- OpenRA.Mods.RA/TraitsInterfaces.cs | 2 -- 3 files changed, 14 insertions(+), 39 deletions(-) diff --git a/OpenRA.Mods.RA/Harvester.cs b/OpenRA.Mods.RA/Harvester.cs index ac8cb1ec77..e6d2ac8967 100644 --- a/OpenRA.Mods.RA/Harvester.cs +++ b/OpenRA.Mods.RA/Harvester.cs @@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA public object Create(ActorInitializer init) { return new Harvester(init.self, this); } } - public class Harvester : IIssueOrder, IResolveOrder, INotifyDamage, IPips, + public class Harvester : IIssueOrder, IResolveOrder, IPips, IRenderModifier, IExplodeModifier, IOrderVoice, ISpeedModifier { @@ -53,8 +53,6 @@ namespace OpenRA.Mods.RA public void ChooseNewProc(Actor self, Actor ignore) { LinkedProc = ClosestProc(self, ignore); - if (LinkedProc != null) - LinkedProc.TraitsImplementing().FirstOrDefault().LinkHarvester(LinkedProc,self); } Actor ClosestProc(Actor self, Actor ignore) @@ -131,12 +129,7 @@ namespace OpenRA.Mods.RA else if (order.OrderString == "Deliver") { if (order.TargetActor != LinkedProc) - { - if (LinkedProc != null && LinkedProc.IsInWorld) - LinkedProc.TraitsImplementing().FirstOrDefault().UnlinkHarvester(LinkedProc,self); LinkedProc = order.TargetActor; - LinkedProc.TraitsImplementing().FirstOrDefault().LinkHarvester(LinkedProc,self); - } if (IsEmpty) return; @@ -147,13 +140,6 @@ namespace OpenRA.Mods.RA self.QueueActivity(new DeliverResources()); } } - - public void Damaged(Actor self, AttackInfo e) - { - if (e.DamageState == DamageState.Dead) - if (LinkedProc != null && !LinkedProc.Destroyed) - LinkedProc.TraitsImplementing().FirstOrDefault().UnlinkHarvester(LinkedProc,self); - } public void LinkProc(Actor self, Actor proc) { diff --git a/OpenRA.Mods.RA/OreRefinery.cs b/OpenRA.Mods.RA/OreRefinery.cs index a1a0d58e40..8a57b670c2 100644 --- a/OpenRA.Mods.RA/OreRefinery.cs +++ b/OpenRA.Mods.RA/OreRefinery.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; +using System.Linq; using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Buildings; using OpenRA.Traits; @@ -36,7 +37,6 @@ namespace OpenRA.Mods.RA readonly OreRefineryInfo Info; PlayerResources PlayerResources; PowerManager PlayerPower; - List LinkedHarv; [Sync] int nextProcessTime = 0; @@ -49,20 +49,13 @@ namespace OpenRA.Mods.RA Info = info; PlayerResources = self.Owner.PlayerActor.Trait(); PlayerPower = self.Owner.PlayerActor.Trait(); - - LinkedHarv = new List (); } - public void LinkHarvester (Actor self, Actor harv) - { - LinkedHarv.Add (harv); - } - - public void UnlinkHarvester (Actor self, Actor harv) - { - if (LinkedHarv.Contains (harv)) - LinkedHarv.Remove (harv); - } + public IEnumerable> GetLinkedHarvesters() + { + return self.World.Queries.WithTrait() + .Where(a => a.Trait.LinkedProc == self); + } public void GiveOre (int amount) { @@ -99,8 +92,8 @@ namespace OpenRA.Mods.RA public void Damaged (Actor self, AttackInfo e) { if (e.DamageState == DamageState.Dead) - foreach (var harv in LinkedHarv) - harv.Trait ().UnlinkProc(harv, self); + foreach (var harv in GetLinkedHarvesters()) + harv.Trait.UnlinkProc(harv.Actor, self); } public int2 DeliverOffset {get{ return Info.DockOffset; }} @@ -112,11 +105,9 @@ namespace OpenRA.Mods.RA public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner) { // Unlink any non-docked harvs - foreach (var harv in LinkedHarv) - { - if (harv.Owner == oldOwner) - harv.Trait().UnlinkProc (harv, self); - } + foreach (var harv in GetLinkedHarvesters()) + if (harv.Actor.Owner == oldOwner) + harv.Trait.UnlinkProc(harv.Actor, self); PlayerResources = newOwner.PlayerActor.Trait(); PlayerPower = newOwner.PlayerActor.Trait(); @@ -125,8 +116,8 @@ namespace OpenRA.Mods.RA public void Selling (Actor self) {} public void Sold (Actor self) { - foreach (var harv in LinkedHarv) - harv.Trait().UnlinkProc (harv, self); + foreach (var harv in GetLinkedHarvesters()) + harv.Trait.UnlinkProc(harv.Actor, self); } public IEnumerable GetPips (Actor self) diff --git a/OpenRA.Mods.RA/TraitsInterfaces.cs b/OpenRA.Mods.RA/TraitsInterfaces.cs index b88289c5fc..5b82f047ff 100755 --- a/OpenRA.Mods.RA/TraitsInterfaces.cs +++ b/OpenRA.Mods.RA/TraitsInterfaces.cs @@ -16,8 +16,6 @@ namespace OpenRA.Mods.RA { void OnDock(Actor harv, DeliverResources dockOrder); void GiveOre(int amount); - void LinkHarvester(Actor self, Actor harv); - void UnlinkHarvester(Actor self, Actor harv); int2 DeliverOffset { get; } }