diff --git a/OpenRA.Mods.RA/Buildings/CanPowerDown.cs b/OpenRA.Mods.RA/Buildings/CanPowerDown.cs index 667db5d761..f1faaec23f 100755 --- a/OpenRA.Mods.RA/Buildings/CanPowerDown.cs +++ b/OpenRA.Mods.RA/Buildings/CanPowerDown.cs @@ -17,13 +17,13 @@ namespace OpenRA.Mods.RA.Buildings public object Create(ActorInitializer init) { return new CanPowerDown(init); } } - public class CanPowerDown : IResolveOrder, IDisable, ISync + public class CanPowerDown : IResolveOrder, IDisable, INotifyCapture, ISync { [Sync] bool disabled = false; int normalPower = 0; - readonly PowerManager PowerManager; - readonly TechTree TechTree; + PowerManager PowerManager; + TechTree TechTree; public CanPowerDown(ActorInitializer init) { @@ -47,5 +47,11 @@ namespace OpenRA.Mods.RA.Buildings TechTree.Update(); } } + + public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner) + { + PowerManager = newOwner.PlayerActor.Trait(); + TechTree = newOwner.PlayerActor.Trait(); + } } } diff --git a/OpenRA.Mods.RA/Buildings/RequiresPower.cs b/OpenRA.Mods.RA/Buildings/RequiresPower.cs index f4f0ed246d..6b6634cda6 100755 --- a/OpenRA.Mods.RA/Buildings/RequiresPower.cs +++ b/OpenRA.Mods.RA/Buildings/RequiresPower.cs @@ -17,9 +17,9 @@ namespace OpenRA.Mods.RA.Buildings public object Create(ActorInitializer init) { return new RequiresPower(init.self); } } - class RequiresPower : IDisable + class RequiresPower : IDisable, INotifyCapture { - readonly PowerManager power; + PowerManager power; public RequiresPower( Actor self ) { power = self.Owner.PlayerActor.Trait(); @@ -29,5 +29,10 @@ namespace OpenRA.Mods.RA.Buildings { get { return power.PowerProvided < power.PowerDrained; } } + + public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner) + { + power = newOwner.PlayerActor.Trait(); + } } } diff --git a/OpenRA.Mods.RA/Player/ProductionQueue.cs b/OpenRA.Mods.RA/Player/ProductionQueue.cs index af1f51644b..1093a21f44 100755 --- a/OpenRA.Mods.RA/Player/ProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ProductionQueue.cs @@ -31,12 +31,12 @@ namespace OpenRA.Mods.RA public virtual object Create(ActorInitializer init) { return new ProductionQueue(init.self, init.self.Owner.PlayerActor, this); } } - public class ProductionQueue : IResolveOrder, ITick, ITechTreeElement + public class ProductionQueue : IResolveOrder, ITick, ITechTreeElement, INotifyCapture { public readonly Actor self; public ProductionQueueInfo Info; - readonly PowerManager PlayerPower; - readonly PlayerResources PlayerResources; + PowerManager PlayerPower; + PlayerResources PlayerResources; // TODO: sync these // A list of things we are currently building @@ -65,6 +65,14 @@ namespace OpenRA.Mods.RA } } + public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner) + { + PlayerPower = newOwner.PlayerActor.Trait(); + PlayerResources = newOwner.PlayerActor.Trait(); + Queue.Clear(); + // Produceable contains the tech from the original owner - this is desired so we don't clear it. + } + IEnumerable AllBuildables(string category) { return Rules.Info.Values