Use INotifyOwnerChanged for updating internal references.
This commit is contained in:
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA
|
|||||||
public object Create(ActorInitializer init) { return new Cargo(init, this); }
|
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;
|
public readonly CargoInfo Info;
|
||||||
readonly Actor self;
|
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)
|
if (cargo == null)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA.Infiltration
|
|||||||
public object Create(ActorInitializer init) { return new InfiltrateForPowerOutage(init.self, this); }
|
public object Create(ActorInitializer init) { return new InfiltrateForPowerOutage(init.self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class InfiltrateForPowerOutage : INotifyCapture, INotifyInfiltrated
|
class InfiltrateForPowerOutage : INotifyOwnerChanged, INotifyInfiltrated
|
||||||
{
|
{
|
||||||
readonly InfiltrateForPowerOutageInfo info;
|
readonly InfiltrateForPowerOutageInfo info;
|
||||||
PowerManager playerPower;
|
PowerManager playerPower;
|
||||||
@@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA.Infiltration
|
|||||||
playerPower.TriggerPowerOutage(info.Duration);
|
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>();
|
playerPower = self.Owner.PlayerActor.Trait<PowerManager>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA
|
|||||||
public virtual object Create(ActorInitializer init) { return new OreRefinery(init.self, this); }
|
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 Actor self;
|
||||||
readonly OreRefineryInfo Info;
|
readonly OreRefineryInfo Info;
|
||||||
@@ -117,18 +117,25 @@ namespace OpenRA.Mods.RA
|
|||||||
harv.QueueActivity(new CallFunc(() => harv.Trait<Harvester>().ContinueHarvesting(harv)));
|
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)
|
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
|
||||||
{
|
{
|
||||||
// Steal any docked harv too
|
// Steal any docked harv too
|
||||||
if (dockedHarv != null)
|
if (dockedHarv != null)
|
||||||
|
{
|
||||||
dockedHarv.ChangeOwner(newOwner);
|
dockedHarv.ChangeOwner(newOwner);
|
||||||
|
|
||||||
// Unlink any non-docked harvs
|
// Relink to this refinery
|
||||||
foreach (var harv in GetLinkedHarvesters())
|
dockedHarv.Trait<Harvester>().LinkProc(dockedHarv, self);
|
||||||
if (harv.Actor.Owner == oldOwner)
|
}
|
||||||
harv.Trait.UnlinkProc(harv.Actor, self);
|
|
||||||
|
|
||||||
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Selling(Actor self) { CancelDock(self); }
|
public void Selling(Actor self) { CancelDock(self); }
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA.Power
|
|||||||
public object Create(ActorInitializer init) { return new AffectedByPowerOutage(init.self); }
|
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;
|
PowerManager playerPower;
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Power
|
|||||||
get { return playerPower.PowerOutageRemainingTicks > 0; }
|
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>();
|
playerPower = newOwner.PlayerActor.Trait<PowerManager>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Power
|
|||||||
public object Create(ActorInitializer init) { return new Power(init.self, this); }
|
public object Create(ActorInitializer init) { return new Power(init.self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Power : INotifyCapture
|
public class Power : INotifyOwnerChanged
|
||||||
{
|
{
|
||||||
readonly PowerInfo info;
|
readonly PowerInfo info;
|
||||||
readonly Lazy<IPowerModifier[]> powerModifiers;
|
readonly Lazy<IPowerModifier[]> powerModifiers;
|
||||||
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Power
|
|||||||
powerModifiers = Exts.Lazy(() => self.TraitsImplementing<IPowerModifier>().ToArray());
|
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>();
|
PlayerPower = newOwner.PlayerActor.Trait<PowerManager>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA.Power
|
|||||||
public object Create(ActorInitializer init) { return new RequiresPower(init.self); }
|
public object Create(ActorInitializer init) { return new RequiresPower(init.self); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class RequiresPower : IDisable, INotifyCapture
|
class RequiresPower : IDisable, INotifyOwnerChanged
|
||||||
{
|
{
|
||||||
PowerManager playerPower;
|
PowerManager playerPower;
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Power
|
|||||||
get { return playerPower.PowerProvided < playerPower.PowerDrained; }
|
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>();
|
playerPower = newOwner.PlayerActor.Trait<PowerManager>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RenderBuildingSilo : RenderBuilding, INotifyBuildComplete, INotifyCapture
|
class RenderBuildingSilo : RenderBuilding, INotifyBuildComplete, INotifyOwnerChanged
|
||||||
{
|
{
|
||||||
PlayerResources playerResources;
|
PlayerResources playerResources;
|
||||||
|
|
||||||
@@ -49,9 +49,10 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
: 0);
|
: 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>();
|
playerResources = newOwner.PlayerActor.Trait<PlayerResources>();
|
||||||
|
base.OnOwnerChanged(self, oldOwner, newOwner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
anim.OwnerChanged();
|
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 void OnEffectiveOwnerChanged(Actor self, Player oldEffectiveOwner, Player newEffectiveOwner) { UpdatePalette(); }
|
||||||
|
|
||||||
public virtual IEnumerable<IRenderable> Render(Actor self, WorldRenderer wr)
|
public virtual IEnumerable<IRenderable> Render(Actor self, WorldRenderer wr)
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
public object Create(ActorInitializer init) { return new WithResources(init.self, this); }
|
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;
|
WithResourcesInfo info;
|
||||||
Animation anim;
|
Animation anim;
|
||||||
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
anim.ReplaceAnim(rs.NormalizeSequence(self, info.Sequence));
|
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>();
|
playerResources = newOwner.PlayerActor.Trait<PlayerResources>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA
|
|||||||
[Desc("Reserve landing places for aircraft.")]
|
[Desc("Reserve landing places for aircraft.")]
|
||||||
class ReservableInfo : TraitInfo<Reservable> { }
|
class ReservableInfo : TraitInfo<Reservable> { }
|
||||||
|
|
||||||
public class Reservable : ITick, INotifyKilled, INotifyCapture, INotifySold
|
public class Reservable : ITick, INotifyKilled, INotifyOwnerChanged, INotifySold
|
||||||
{
|
{
|
||||||
Actor reservedFor;
|
Actor reservedFor;
|
||||||
Aircraft reservedForAircraft;
|
Aircraft reservedForAircraft;
|
||||||
@@ -60,7 +60,7 @@ namespace OpenRA.Mods.RA
|
|||||||
reservedForAircraft.UnReserve();
|
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)
|
if (reservedForAircraft != null)
|
||||||
reservedForAircraft.UnReserve();
|
reservedForAircraft.UnReserve();
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA
|
|||||||
public object Create(ActorInitializer init) { return new StoresResources(init.self, this); }
|
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;
|
readonly StoresResourcesInfo Info;
|
||||||
|
|
||||||
@@ -38,12 +38,16 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
public int Capacity { get { return Info.Capacity; } }
|
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)
|
public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
|
||||||
{
|
{
|
||||||
var resources = Stored;
|
var resources = Stored;
|
||||||
Player.TakeResources(resources);
|
oldOwner.PlayerActor.Trait<PlayerResources>().TakeResources(resources);
|
||||||
Player = newOwner.PlayerActor.Trait<PlayerResources>();
|
newOwner.PlayerActor.Trait<PlayerResources>().GiveResources(resources);
|
||||||
Player.GiveResources(resources);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Killed(Actor self, AttackInfo e)
|
public void Killed(Actor self, AttackInfo e)
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ namespace OpenRA.Mods.RA
|
|||||||
public override object Create(ActorInitializer init) { return new GpsPower(init.self, this); }
|
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;
|
GpsWatcher owner;
|
||||||
|
|
||||||
@@ -133,10 +133,10 @@ namespace OpenRA.Mods.RA
|
|||||||
owner.RefreshGps(self);
|
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);
|
RemoveGps(self);
|
||||||
owner = captor.Owner.PlayerActor.Trait<GpsWatcher>();
|
owner = newOwner.PlayerActor.Trait<GpsWatcher>();
|
||||||
owner.GpsAdd(self);
|
owner.GpsAdd(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user