Use INotifyOwnerChanged for updating internal references.

This commit is contained in:
Paul Chote
2014-10-13 19:43:11 +13:00
parent 8508fc5155
commit a08a3a3869
12 changed files with 45 additions and 33 deletions

View File

@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA
public object Create(ActorInitializer init) { return new StoresResources(init.self, this); }
}
class StoresResources : IPips, INotifyCapture, INotifyKilled, IExplodeModifier, IStoreResources, ISync
class StoresResources : IPips, INotifyOwnerChanged, INotifyCapture, INotifyKilled, IExplodeModifier, IStoreResources, ISync
{
readonly StoresResourcesInfo Info;
@@ -38,12 +38,16 @@ namespace OpenRA.Mods.RA
public int Capacity { get { return Info.Capacity; } }
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
Player = newOwner.PlayerActor.Trait<PlayerResources>();
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
{
var resources = Stored;
Player.TakeResources(resources);
Player = newOwner.PlayerActor.Trait<PlayerResources>();
Player.GiveResources(resources);
oldOwner.PlayerActor.Trait<PlayerResources>().TakeResources(resources);
newOwner.PlayerActor.Trait<PlayerResources>().GiveResources(resources);
}
public void Killed(Actor self, AttackInfo e)