diff --git a/OpenRA.Mods.RA/Player/ProductionQueue.cs b/OpenRA.Mods.RA/Player/ProductionQueue.cs index dc0130c9c6..e4982838d7 100644 --- a/OpenRA.Mods.RA/Player/ProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ProductionQueue.cs @@ -60,7 +60,7 @@ namespace OpenRA.Mods.RA public virtual object Create(ActorInitializer init) { return new ProductionQueue(init, init.self.Owner.PlayerActor, this); } } - public class ProductionQueue : IResolveOrder, ITick, ITechTreeElement, INotifyCapture, INotifyKilled, INotifySold, ISync, INotifyTransform + public class ProductionQueue : IResolveOrder, ITick, ITechTreeElement, INotifyOwnerChanged, INotifyKilled, INotifySold, ISync, INotifyTransform { public readonly ProductionQueueInfo Info; readonly Actor self; @@ -105,15 +105,16 @@ namespace OpenRA.Mods.RA queue.Clear(); } - public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner) + public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) { playerPower = newOwner.PlayerActor.Trait(); playerResources = newOwner.PlayerActor.Trait(); ClearQueue(); // Regenerate the produceables and tech tree state + oldOwner.PlayerActor.Trait().Remove(this); CacheProduceables(newOwner.PlayerActor); - self.Owner.PlayerActor.Trait().Update(); + newOwner.PlayerActor.Trait().Update(); } public void Killed(Actor killed, AttackInfo e) { if (killed == self) ClearQueue(); } diff --git a/OpenRA.Mods.RA/Player/TechTree.cs b/OpenRA.Mods.RA/Player/TechTree.cs index c9707fb5cc..6563fc8271 100755 --- a/OpenRA.Mods.RA/Player/TechTree.cs +++ b/OpenRA.Mods.RA/Player/TechTree.cs @@ -56,6 +56,11 @@ namespace OpenRA.Mods.RA watchers.RemoveAll(x => x.Key == key); } + public void Remove(ITechTreeElement tte) + { + watchers.RemoveAll(x => x.RegisteredBy == tte); + } + static Cache> GatherOwnedPrerequisites(Player player) { var ret = new Cache>(x => new List()); @@ -94,6 +99,7 @@ namespace OpenRA.Mods.RA class Watcher { public readonly string Key; + public ITechTreeElement RegisteredBy { get { return watcher; } } // Strings may be either actor type, or "alternate name" key readonly string[] prerequisites;