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

@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA
public object Create(ActorInitializer init) { return new Cargo(init, this); }
}
public class Cargo : IPips, IIssueOrder, IResolveOrder, IOrderVoice, INotifyCreated, INotifyKilled, INotifyCapture, INotifyAddedToWorld, ITick, INotifySold, IDisableMove
public class Cargo : IPips, IIssueOrder, IResolveOrder, IOrderVoice, INotifyCreated, INotifyKilled, INotifyOwnerChanged, INotifyAddedToWorld, ITick, INotifySold, IDisableMove
{
public readonly CargoInfo Info;
readonly Actor self;
@@ -263,7 +263,7 @@ namespace OpenRA.Mods.RA
});
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
if (cargo == null)
return;

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA.Infiltration
public object Create(ActorInitializer init) { return new InfiltrateForPowerOutage(init.self, this); }
}
class InfiltrateForPowerOutage : INotifyCapture, INotifyInfiltrated
class InfiltrateForPowerOutage : INotifyOwnerChanged, INotifyInfiltrated
{
readonly InfiltrateForPowerOutageInfo info;
PowerManager playerPower;
@@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA.Infiltration
playerPower.TriggerPowerOutage(info.Duration);
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
playerPower = self.Owner.PlayerActor.Trait<PowerManager>();
}

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA
public virtual object Create(ActorInitializer init) { return new OreRefinery(init.self, this); }
}
public class OreRefinery : ITick, IAcceptOre, INotifyKilled, INotifySold, INotifyCapture, IExplodeModifier, ISync
public class OreRefinery : ITick, IAcceptOre, INotifyKilled, INotifySold, INotifyCapture, INotifyOwnerChanged, IExplodeModifier, ISync
{
readonly Actor self;
readonly OreRefineryInfo Info;
@@ -117,18 +117,25 @@ namespace OpenRA.Mods.RA
harv.QueueActivity(new CallFunc(() => harv.Trait<Harvester>().ContinueHarvesting(harv)));
}
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
// Unlink any harvesters
foreach (var harv in GetLinkedHarvesters())
harv.Trait.UnlinkProc(harv.Actor, self);
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
{
// Steal any docked harv too
if (dockedHarv != null)
{
dockedHarv.ChangeOwner(newOwner);
// Unlink any non-docked harvs
foreach (var harv in GetLinkedHarvesters())
if (harv.Actor.Owner == oldOwner)
harv.Trait.UnlinkProc(harv.Actor, self);
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
// Relink to this refinery
dockedHarv.Trait<Harvester>().LinkProc(dockedHarv, self);
}
}
public void Selling(Actor self) { CancelDock(self); }

View File

@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA.Power
public object Create(ActorInitializer init) { return new AffectedByPowerOutage(init.self); }
}
public class AffectedByPowerOutage : INotifyCapture, ISelectionBar, IPowerModifier, IDisable
public class AffectedByPowerOutage : INotifyOwnerChanged, ISelectionBar, IPowerModifier, IDisable
{
PowerManager playerPower;
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Power
get { return playerPower.PowerOutageRemainingTicks > 0; }
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
playerPower = newOwner.PlayerActor.Trait<PowerManager>();
}

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Power
public object Create(ActorInitializer init) { return new Power(init.self, this); }
}
public class Power : INotifyCapture
public class Power : INotifyOwnerChanged
{
readonly PowerInfo info;
readonly Lazy<IPowerModifier[]> powerModifiers;
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Power
powerModifiers = Exts.Lazy(() => self.TraitsImplementing<IPowerModifier>().ToArray());
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
PlayerPower = newOwner.PlayerActor.Trait<PowerManager>();
}

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA.Power
public object Create(ActorInitializer init) { return new RequiresPower(init.self); }
}
class RequiresPower : IDisable, INotifyCapture
class RequiresPower : IDisable, INotifyOwnerChanged
{
PowerManager playerPower;
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Power
get { return playerPower.PowerProvided < playerPower.PowerDrained; }
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
playerPower = newOwner.PlayerActor.Trait<PowerManager>();
}

View File

@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Render
}
}
class RenderBuildingSilo : RenderBuilding, INotifyBuildComplete, INotifyCapture
class RenderBuildingSilo : RenderBuilding, INotifyBuildComplete, INotifyOwnerChanged
{
PlayerResources playerResources;
@@ -49,9 +49,10 @@ namespace OpenRA.Mods.RA.Render
: 0);
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
public override void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
playerResources = newOwner.PlayerActor.Trait<PlayerResources>();
base.OnOwnerChanged(self, oldOwner, newOwner);
}
}
}

View File

@@ -126,7 +126,7 @@ namespace OpenRA.Mods.RA.Render
anim.OwnerChanged();
}
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) { UpdatePalette(); }
public virtual void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) { UpdatePalette(); }
public void OnEffectiveOwnerChanged(Actor self, Player oldEffectiveOwner, Player newEffectiveOwner) { UpdatePalette(); }
public virtual IEnumerable<IRenderable> Render(Actor self, WorldRenderer wr)

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Render
public object Create(ActorInitializer init) { return new WithResources(init.self, this); }
}
class WithResources : INotifyBuildComplete, INotifySold, INotifyCapture, INotifyDamageStateChanged
class WithResources : INotifyBuildComplete, INotifySold, INotifyOwnerChanged, INotifyDamageStateChanged
{
WithResourcesInfo info;
Animation anim;
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA.Render
anim.ReplaceAnim(rs.NormalizeSequence(self, info.Sequence));
}
public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
playerResources = newOwner.PlayerActor.Trait<PlayerResources>();
}

View File

@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA
[Desc("Reserve landing places for aircraft.")]
class ReservableInfo : TraitInfo<Reservable> { }
public class Reservable : ITick, INotifyKilled, INotifyCapture, INotifySold
public class Reservable : ITick, INotifyKilled, INotifyOwnerChanged, INotifySold
{
Actor reservedFor;
Aircraft reservedForAircraft;
@@ -60,15 +60,15 @@ namespace OpenRA.Mods.RA
reservedForAircraft.UnReserve();
}
public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
if (reservedForAircraft != null)
reservedForAircraft.UnReserve();
}
public void Selling (Actor self) { Sold(self); }
public void Selling(Actor self) { Sold(self); }
public void Sold (Actor self)
public void Sold(Actor self)
{
if (reservedForAircraft != null)
reservedForAircraft.UnReserve();

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)

View File

@@ -88,7 +88,7 @@ namespace OpenRA.Mods.RA
public override object Create(ActorInitializer init) { return new GpsPower(init.self, this); }
}
class GpsPower : SupportPower, INotifyKilled, INotifyStanceChanged, INotifySold, INotifyCapture
class GpsPower : SupportPower, INotifyKilled, INotifyStanceChanged, INotifySold, INotifyOwnerChanged
{
GpsWatcher owner;
@@ -133,10 +133,10 @@ namespace OpenRA.Mods.RA
owner.RefreshGps(self);
}
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
{
RemoveGps(self);
owner = captor.Owner.PlayerActor.Trait<GpsWatcher>();
owner = newOwner.PlayerActor.Trait<GpsWatcher>();
owner.GpsAdd(self);
}
}