diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 4d07e2d1e9..6bfef115f7 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -134,7 +134,9 @@ namespace OpenRA.Traits [RequireExplicitImplementation] public interface INotifyCreated { void Created(Actor self); } + [RequireExplicitImplementation] public interface INotifyAddedToWorld { void AddedToWorld(Actor self); } + [RequireExplicitImplementation] public interface INotifyRemovedFromWorld { void RemovedFromWorld(Actor self); } [RequireExplicitImplementation] diff --git a/OpenRA.Mods.Cnc/Traits/EnergyWall.cs b/OpenRA.Mods.Cnc/Traits/EnergyWall.cs index b9e86c3ad7..b8eba1be63 100644 --- a/OpenRA.Mods.Cnc/Traits/EnergyWall.cs +++ b/OpenRA.Mods.Cnc/Traits/EnergyWall.cs @@ -103,7 +103,7 @@ namespace OpenRA.Mods.Cnc.Traits return !active; } - public override void AddedToWorld(Actor self) + protected override void AddedToWorld(Actor self) { base.AddedToWorld(self); blockedPositions = info.Tiles(self.Location); diff --git a/OpenRA.Mods.Cnc/Traits/Render/WithBuildingBib.cs b/OpenRA.Mods.Cnc/Traits/Render/WithBuildingBib.cs index 616a738446..1aa80a6d57 100644 --- a/OpenRA.Mods.Cnc/Traits/Render/WithBuildingBib.cs +++ b/OpenRA.Mods.Cnc/Traits/Render/WithBuildingBib.cs @@ -88,7 +88,7 @@ namespace OpenRA.Mods.Cnc.Traits bi = self.Info.TraitInfo(); } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { var rows = info.HasMinibib ? 1 : 2; var width = bi.Dimensions.X; @@ -119,7 +119,7 @@ namespace OpenRA.Mods.Cnc.Traits } } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { foreach (var a in anims) rs.Remove(a); diff --git a/OpenRA.Mods.Common/Scripting/ScriptTriggers.cs b/OpenRA.Mods.Common/Scripting/ScriptTriggers.cs index 685f50d9a0..ac7039abcc 100644 --- a/OpenRA.Mods.Common/Scripting/ScriptTriggers.cs +++ b/OpenRA.Mods.Common/Scripting/ScriptTriggers.cs @@ -322,7 +322,7 @@ namespace OpenRA.Mods.Common.Scripting } } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { if (world.Disposing) return; @@ -341,7 +341,7 @@ namespace OpenRA.Mods.Common.Scripting } } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { if (world.Disposing) return; diff --git a/OpenRA.Mods.Common/Traits/Buildings/Building.cs b/OpenRA.Mods.Common/Traits/Buildings/Building.cs index 59515fc0c9..82170b2116 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Building.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Building.cs @@ -295,7 +295,12 @@ namespace OpenRA.Mods.Common.Traits NotifyBuildingComplete(self); } - public virtual void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) + { + AddedToWorld(self); + } + + protected virtual void AddedToWorld(Actor self) { if (Info.RemoveSmudgesOnBuild) RemoveSmudges(); diff --git a/OpenRA.Mods.Common/Traits/Buildings/Gate.cs b/OpenRA.Mods.Common/Traits/Buildings/Gate.cs index 8d88203e10..1806b4156f 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Gate.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Gate.cs @@ -114,7 +114,7 @@ namespace OpenRA.Mods.Common.Traits return !self.IsDisabled() && BuildComplete && blocking.AppearsFriendlyTo(self); } - public override void AddedToWorld(Actor self) + protected override void AddedToWorld(Actor self) { base.AddedToWorld(self); blockedPositions = Info.Tiles(self.Location); diff --git a/OpenRA.Mods.Common/Traits/Conditions/ProximityExternalCondition.cs b/OpenRA.Mods.Common/Traits/Conditions/ProximityExternalCondition.cs index 6472ee513c..e4df55ab67 100644 --- a/OpenRA.Mods.Common/Traits/Conditions/ProximityExternalCondition.cs +++ b/OpenRA.Mods.Common/Traits/Conditions/ProximityExternalCondition.cs @@ -62,13 +62,13 @@ namespace OpenRA.Mods.Common.Traits cachedVRange = WDist.Zero; } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { cachedPosition = self.CenterPosition; proximityTrigger = self.World.ActorMap.AddProximityTrigger(cachedPosition, cachedRange, cachedVRange, ActorEntered, ActorExited); } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { self.World.ActorMap.RemoveProximityTrigger(proximityTrigger); } diff --git a/OpenRA.Mods.Common/Traits/Crates/Crate.cs b/OpenRA.Mods.Common/Traits/Crates/Crate.cs index ceccaa8bd8..0619e6abb4 100644 --- a/OpenRA.Mods.Common/Traits/Crates/Crate.cs +++ b/OpenRA.Mods.Common/Traits/Crates/Crate.cs @@ -212,7 +212,7 @@ namespace OpenRA.Mods.Common.Traits return self.IsAtGroundLevel() && crushClasses.Contains(info.CrushClass); } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { self.World.AddToMaps(self, this); @@ -221,7 +221,7 @@ namespace OpenRA.Mods.Common.Traits cs.IncrementCrates(); } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { self.World.RemoveFromMaps(self, this); diff --git a/OpenRA.Mods.Common/Traits/DamagedByTerrain.cs b/OpenRA.Mods.Common/Traits/DamagedByTerrain.cs index d11dad37fa..3e3992801c 100644 --- a/OpenRA.Mods.Common/Traits/DamagedByTerrain.cs +++ b/OpenRA.Mods.Common/Traits/DamagedByTerrain.cs @@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Traits health = self.Trait(); } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { if (!Info.StartOnThreshold) return; diff --git a/OpenRA.Mods.Common/Traits/Husk.cs b/OpenRA.Mods.Common/Traits/Husk.cs index 2d70ae6554..88e76624bb 100644 --- a/OpenRA.Mods.Common/Traits/Husk.cs +++ b/OpenRA.Mods.Common/Traits/Husk.cs @@ -118,12 +118,12 @@ namespace OpenRA.Mods.Common.Traits self.World.UpdateMaps(self, this); } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { self.World.AddToMaps(self, this); } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { self.World.RemoveFromMaps(self, this); } diff --git a/OpenRA.Mods.Common/Traits/Immobile.cs b/OpenRA.Mods.Common/Traits/Immobile.cs index e5f21044c2..95c327c922 100644 --- a/OpenRA.Mods.Common/Traits/Immobile.cs +++ b/OpenRA.Mods.Common/Traits/Immobile.cs @@ -52,7 +52,7 @@ namespace OpenRA.Mods.Common.Traits public WPos CenterPosition { get { return position; } } public IEnumerable> OccupiedCells() { return occupied; } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { self.World.ActorMap.AddInfluence(self, this); self.World.ActorMap.AddPosition(self, this); @@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Traits self.World.ScreenMap.Add(self); } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { self.World.ActorMap.RemoveInfluence(self, this); self.World.ActorMap.RemovePosition(self, this); diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index 3134b5043a..bb774fc69b 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -569,12 +569,12 @@ namespace OpenRA.Mods.Common.Traits } } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { self.World.AddToMaps(self, this); } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { self.World.RemoveFromMaps(self, this); } diff --git a/OpenRA.Mods.Common/Traits/ParaDrop.cs b/OpenRA.Mods.Common/Traits/ParaDrop.cs index 54732d3b74..1ba8046ede 100644 --- a/OpenRA.Mods.Common/Traits/ParaDrop.cs +++ b/OpenRA.Mods.Common/Traits/ParaDrop.cs @@ -96,7 +96,7 @@ namespace OpenRA.Mods.Common.Traits return actorToDrop.Trait().CanEnterCell(p); } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { OnRemovedFromWorld(self); } diff --git a/OpenRA.Mods.Common/Traits/Passenger.cs b/OpenRA.Mods.Common/Traits/Passenger.cs index 5dfdf1b7ce..46dc0326a7 100644 --- a/OpenRA.Mods.Common/Traits/Passenger.cs +++ b/OpenRA.Mods.Common/Traits/Passenger.cs @@ -120,7 +120,8 @@ namespace OpenRA.Mods.Common.Traits return true; } - public void RemovedFromWorld(Actor self) { Unreserve(self); } + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { Unreserve(self); } + public void Unreserve(Actor self) { if (ReservedCargo == null) diff --git a/OpenRA.Mods.Common/Traits/Power/Power.cs b/OpenRA.Mods.Common/Traits/Power/Power.cs index aafd317f96..a5610e87ff 100644 --- a/OpenRA.Mods.Common/Traits/Power/Power.cs +++ b/OpenRA.Mods.Common/Traits/Power/Power.cs @@ -43,9 +43,11 @@ namespace OpenRA.Mods.Common.Traits protected override void TraitEnabled(Actor self) { PlayerPower.UpdateActor(self); } protected override void TraitDisabled(Actor self) { PlayerPower.UpdateActor(self); } - public void AddedToWorld(Actor self) { PlayerPower.UpdateActor(self); } - public void RemovedFromWorld(Actor self) { PlayerPower.RemoveActor(self); } - public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) + + void INotifyAddedToWorld.AddedToWorld(Actor self) { PlayerPower.UpdateActor(self); } + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { PlayerPower.RemoveActor(self); } + + void INotifyOwnerChanged.OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) { PlayerPower.RemoveActor(self); PlayerPower = newOwner.PlayerActor.Trait(); diff --git a/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs index eb17f98b95..6410d18989 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs @@ -155,7 +155,7 @@ namespace OpenRA.Mods.Common.Traits.Render aat.SetDirty(); } - public void RemovedFromWorld(Actor self) + void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) { UpdateNeighbours(self); } diff --git a/OpenRA.Mods.D2k/Traits/Buildings/LaysTerrain.cs b/OpenRA.Mods.D2k/Traits/Buildings/LaysTerrain.cs index 1c96240fd7..0ebf4a47f9 100644 --- a/OpenRA.Mods.D2k/Traits/Buildings/LaysTerrain.cs +++ b/OpenRA.Mods.D2k/Traits/Buildings/LaysTerrain.cs @@ -49,7 +49,7 @@ namespace OpenRA.Mods.D2k.Traits buildingInfo = self.Info.TraitInfo(); } - public void AddedToWorld(Actor self) + void INotifyAddedToWorld.AddedToWorld(Actor self) { var map = self.World.Map;