diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index e2e488af7d..7d3d622c95 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -143,7 +143,6 @@ namespace OpenRA.Traits public interface INotifyCreated { void Created(Actor self); } public interface INotifyAddedToWorld { void AddedToWorld(Actor self); } public interface INotifyRemovedFromWorld { void RemovedFromWorld(Actor self); } - public interface INotifySold { void Selling(Actor self); void Sold(Actor self); } public interface INotifyDamage { void Damaged(Actor self, AttackInfo e); } public interface INotifyDamageStateChanged { void DamageStateChanged(Actor self, AttackInfo e); } public interface INotifyRepair { void Repairing(Actor self, Actor target); } diff --git a/OpenRA.Mods.Common/Traits/Buildings/Building.cs b/OpenRA.Mods.Common/Traits/Buildings/Building.cs index 0f841e4089..34c49e7bd9 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Building.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Building.cs @@ -143,7 +143,7 @@ namespace OpenRA.Mods.Common.Traits readonly Actor self; public readonly bool SkipMakeAnimation; - /* shared activity lock: undeploy, sell, capture, etc */ + // Shared activity lock: undeploy, sell, capture, etc. [Sync] public bool Locked = true; public bool Lock() @@ -181,7 +181,7 @@ namespace OpenRA.Mods.Common.Traits return OccupiedCells().Select(c => self.World.Map.CenterOfCell(c.First)); } - public void Created(Actor self) + void INotifyCreated.Created(Actor self) { if (SkipMakeAnimation || !self.Info.HasTraitInfo()) NotifyBuildingComplete(self); @@ -199,7 +199,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); @@ -220,7 +220,7 @@ namespace OpenRA.Mods.Common.Traits notify.BuildingComplete(self); } - public void Selling(Actor self) + void INotifySold.Selling(Actor self) { if (Info.RemoveSmudgesOnSell) RemoveSmudges(); @@ -228,9 +228,9 @@ namespace OpenRA.Mods.Common.Traits BuildComplete = false; } - public void Sold(Actor self) { } + void INotifySold.Sold(Actor self) { } - public void BeforeTransform(Actor self) + void INotifyTransform.BeforeTransform(Actor self) { if (Info.RemoveSmudgesOnTransform) RemoveSmudges(); @@ -239,8 +239,8 @@ namespace OpenRA.Mods.Common.Traits Game.Sound.PlayToPlayer(self.Owner, s, self.CenterPosition); } - public void OnTransform(Actor self) { } - public void AfterTransform(Actor self) { } + void INotifyTransform.OnTransform(Actor self) { } + void INotifyTransform.AfterTransform(Actor self) { } public void RemoveSmudges() { diff --git a/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs b/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs index f1d24addc8..417d939d3b 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs @@ -168,8 +168,8 @@ namespace OpenRA.Mods.Common.Traits } } - public void Selling(Actor self) { CancelDock(self); } - public void Sold(Actor self) + void INotifySold.Selling(Actor self) { CancelDock(self); } + void INotifySold.Sold(Actor self) { foreach (var harv in GetLinkedHarvesters()) harv.Trait.UnlinkProc(harv.Actor, self); diff --git a/OpenRA.Mods.Common/Traits/Buildings/Reservable.cs b/OpenRA.Mods.Common/Traits/Buildings/Reservable.cs index a5b08be5cf..c616973948 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Reservable.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Reservable.cs @@ -76,9 +76,13 @@ namespace OpenRA.Mods.Common.Traits reservedForAircraft.UnReserve(); } - public void Selling(Actor self) { Sold(self); } + void INotifySold.Selling(Actor self) + { + if (reservedForAircraft != null) + reservedForAircraft.UnReserve(); + } - public void Sold(Actor self) + void INotifySold.Sold(Actor self) { if (reservedForAircraft != null) reservedForAircraft.UnReserve(); diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index 29dc1c135c..9e8084b139 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -356,8 +356,8 @@ namespace OpenRA.Mods.Common.Traits cargo.Clear(); } - public void Selling(Actor self) { } - public void Sold(Actor self) + void INotifySold.Selling(Actor self) { } + void INotifySold.Sold(Actor self) { if (!Info.EjectOnSell || cargo == null) return; diff --git a/OpenRA.Mods.Common/Traits/EmitInfantryOnSell.cs b/OpenRA.Mods.Common/Traits/EmitInfantryOnSell.cs index 6090b6f151..97508e3f79 100644 --- a/OpenRA.Mods.Common/Traits/EmitInfantryOnSell.cs +++ b/OpenRA.Mods.Common/Traits/EmitInfantryOnSell.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits correctFaction = factionsList.Count == 0 || factionsList.Contains(self.Owner.Faction.InternalName); } - public void Selling(Actor self) { } + void INotifySold.Selling(Actor self) { } void Emit(Actor self) { @@ -85,6 +85,6 @@ namespace OpenRA.Mods.Common.Traits } } - public void Sold(Actor self) { Emit(self); } + void INotifySold.Sold(Actor self) { Emit(self); } } } diff --git a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs index 573e773f35..efe0ad98b1 100644 --- a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs @@ -139,8 +139,8 @@ namespace OpenRA.Mods.Common.Traits } public void Killed(Actor killed, AttackInfo e) { if (killed == self) { ClearQueue(); Enabled = false; } } - public void Selling(Actor self) { ClearQueue(); Enabled = false; } - public void Sold(Actor self) { } + void INotifySold.Selling(Actor self) { ClearQueue(); Enabled = false; } + void INotifySold.Sold(Actor self) { } public void BeforeTransform(Actor self) { ClearQueue(); Enabled = false; } public void OnTransform(Actor self) { } diff --git a/OpenRA.Mods.Common/Traits/Render/WithChargeOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithChargeOverlay.cs index d3c243f1c5..338b003286 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithChargeOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithChargeOverlay.cs @@ -60,8 +60,8 @@ namespace OpenRA.Mods.Common.Traits.Render overlay.ReplaceAnim(RenderSprites.NormalizeSequence(overlay, e.DamageState, info.Sequence)); } - public void Sold(Actor self) { } - public void Selling(Actor self) + void INotifySold.Sold(Actor self) { } + void INotifySold.Selling(Actor self) { charging = false; } diff --git a/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs index a1f1906709..e87cc32e85 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithDockedOverlay.cs @@ -71,8 +71,8 @@ namespace OpenRA.Mods.Common.Traits.Render buildComplete = true))); } - public void Sold(Actor self) { } - public void Selling(Actor self) + void INotifySold.Sold(Actor self) { } + void INotifySold.Selling(Actor self) { buildComplete = false; } diff --git a/OpenRA.Mods.Common/Traits/Render/WithIdleAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithIdleAnimation.cs index 904f080083..c1f8c6b195 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithIdleAnimation.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithIdleAnimation.cs @@ -59,11 +59,11 @@ namespace OpenRA.Mods.Common.Traits.Render buildComplete = true; } - public void Selling(Actor self) + void INotifySold.Selling(Actor self) { buildComplete = false; } - public void Sold(Actor self) { } + void INotifySold.Sold(Actor self) { } } } diff --git a/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs index f0abb02bde..e617dba6a6 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs @@ -105,8 +105,8 @@ namespace OpenRA.Mods.Common.Traits.Render buildComplete = true; } - public void Sold(Actor self) { } - public void Selling(Actor self) + void INotifySold.Sold(Actor self) { } + void INotifySold.Selling(Actor self) { buildComplete = false; } diff --git a/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs index 057caa2981..5b36a19626 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs @@ -80,7 +80,7 @@ namespace OpenRA.Mods.Common.Traits.Render desiredFrame = door.CurrentSequence.Length - 1; } - public void Selling(Actor self) { buildComplete = false; } - public void Sold(Actor self) { } + void INotifySold.Selling(Actor self) { buildComplete = false; } + void INotifySold.Sold(Actor self) { } } } diff --git a/OpenRA.Mods.Common/Traits/Render/WithProductionOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithProductionOverlay.cs index d967030419..ca07c64840 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithProductionOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithProductionOverlay.cs @@ -97,8 +97,8 @@ namespace OpenRA.Mods.Common.Traits.Render self.World.AddFrameEndTask(w => SelectQueue(self)); } - public void Sold(Actor self) { } - public void Selling(Actor self) + void INotifySold.Sold(Actor self) { } + void INotifySold.Selling(Actor self) { buildComplete = false; } diff --git a/OpenRA.Mods.Common/Traits/Render/WithRearmAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithRearmAnimation.cs index b478f3b52a..23c6bc7995 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithRearmAnimation.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithRearmAnimation.cs @@ -47,11 +47,11 @@ namespace OpenRA.Mods.Common.Traits.Render buildComplete = true; } - public void Selling(Actor self) + void INotifySold.Selling(Actor self) { buildComplete = false; } - public void Sold(Actor self) { } + void INotifySold.Sold(Actor self) { } } } \ No newline at end of file diff --git a/OpenRA.Mods.Common/Traits/Render/WithRepairAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithRepairAnimation.cs index 18cda57b94..5a8321835d 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithRepairAnimation.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithRepairAnimation.cs @@ -47,11 +47,11 @@ namespace OpenRA.Mods.Common.Traits.Render buildComplete = true; } - public void Selling(Actor self) + void INotifySold.Selling(Actor self) { buildComplete = false; } - public void Sold(Actor self) { } + void INotifySold.Sold(Actor self) { } } } \ No newline at end of file diff --git a/OpenRA.Mods.Common/Traits/Render/WithRepairOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithRepairOverlay.cs index 70b564d38b..2468bef6f2 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithRepairOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithRepairOverlay.cs @@ -65,8 +65,8 @@ namespace OpenRA.Mods.Common.Traits.Render buildComplete = true))); } - public void Sold(Actor self) { } - public void Selling(Actor self) + void INotifySold.Sold(Actor self) { } + void INotifySold.Selling(Actor self) { buildComplete = false; } diff --git a/OpenRA.Mods.Common/Traits/Render/WithResources.cs b/OpenRA.Mods.Common/Traits/Render/WithResources.cs index 2aabddb2aa..f8815bb59e 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithResources.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithResources.cs @@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Traits.Render playerResources = newOwner.PlayerActor.Trait(); } - public void Selling(Actor self) { rs.Remove(anim); } - public void Sold(Actor self) { } + void INotifySold.Selling(Actor self) { rs.Remove(anim); } + void INotifySold.Sold(Actor self) { } } } diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index b86c6c8cf6..bc06006e5e 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -36,6 +36,13 @@ namespace OpenRA.Mods.Common.Traits IEnumerable Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition); } + [RequireExplicitImplementation] + public interface INotifySold + { + void Selling(Actor self); + void Sold(Actor self); + } + [RequireExplicitImplementation] public interface INotifyAttack { diff --git a/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs index 3b1942c8e5..4d4763af0f 100644 --- a/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs +++ b/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs @@ -75,8 +75,8 @@ namespace OpenRA.Mods.D2k.Traits.Render buildComplete = true))); } - public void Sold(Actor self) { } - public void Selling(Actor self) + void INotifySold.Sold(Actor self) { } + void INotifySold.Selling(Actor self) { buildComplete = false; } diff --git a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs index 5e1a3792a2..a00b8a0414 100644 --- a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs +++ b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs @@ -86,8 +86,8 @@ namespace OpenRA.Mods.RA.Traits public void Killed(Actor self, AttackInfo e) { RemoveGps(self); } - public void Selling(Actor self) { } - public void Sold(Actor self) { RemoveGps(self); } + void INotifySold.Selling(Actor self) { } + void INotifySold.Sold(Actor self) { RemoveGps(self); } void RemoveGps(Actor self) {