diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 2c89600621..1d05253fa4 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -333,7 +333,6 @@ - @@ -499,6 +498,7 @@ + diff --git a/OpenRA.Mods.Common/Traits/GrantConditionOnPrerequisite.cs b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnPrerequisite.cs similarity index 88% rename from OpenRA.Mods.Common/Traits/GrantConditionOnPrerequisite.cs rename to OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnPrerequisite.cs index 6cff1f85c9..6f1394b25e 100644 --- a/OpenRA.Mods.Common/Traits/GrantConditionOnPrerequisite.cs +++ b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnPrerequisite.cs @@ -29,15 +29,14 @@ namespace OpenRA.Mods.Common.Traits public object Create(ActorInitializer init) { return new GrantConditionOnPrerequisite(init.Self, this); } } - public class GrantConditionOnPrerequisite : INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld + public class GrantConditionOnPrerequisite : INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld, INotifyOwnerChanged { readonly GrantConditionOnPrerequisiteInfo info; - readonly GrantConditionOnPrerequisiteManager globalManager; - - ConditionManager conditionManager; - int conditionToken = ConditionManager.InvalidConditionToken; bool wasAvailable; + ConditionManager conditionManager; + GrantConditionOnPrerequisiteManager globalManager; + int conditionToken = ConditionManager.InvalidConditionToken; public GrantConditionOnPrerequisite(Actor self, GrantConditionOnPrerequisiteInfo info) { @@ -62,6 +61,11 @@ namespace OpenRA.Mods.Common.Traits globalManager.Unregister(self, this, info.Prerequisites); } + void INotifyOwnerChanged.OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) + { + globalManager = newOwner.PlayerActor.Trait(); + } + public void PrerequisitesUpdated(Actor self, bool available) { if (available == wasAvailable || conditionManager == null)