Fix some more cases of stale Player references after capture.
This commit is contained in:
@@ -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<PowerManager>();
|
||||
TechTree = newOwner.PlayerActor.Trait<TechTree>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PowerManager>();
|
||||
@@ -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<PowerManager>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PowerManager>();
|
||||
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
|
||||
Queue.Clear();
|
||||
// Produceable contains the tech from the original owner - this is desired so we don't clear it.
|
||||
}
|
||||
|
||||
IEnumerable<ActorInfo> AllBuildables(string category)
|
||||
{
|
||||
return Rules.Info.Values
|
||||
|
||||
Reference in New Issue
Block a user