Fixed issue with unit ready when capturing

This commit is contained in:
Andrii Yukhymchak
2018-01-01 11:08:38 +00:00
committed by Paul Chote
parent dec11f4fa0
commit 11db40a2b3
2 changed files with 24 additions and 18 deletions

View File

@@ -276,7 +276,14 @@ namespace OpenRA
// TODO: move elsewhere. // TODO: move elsewhere.
public void ChangeOwner(Player newOwner) public void ChangeOwner(Player newOwner)
{ {
World.AddFrameEndTask(w => World.AddFrameEndTask(_ => ChangeOwnerSync(newOwner));
}
/// <summary>
/// Change the actors owner without queuing a FrameEndTask.
/// This must only be called from inside an existing FrameEndTask.
/// </summary>
public void ChangeOwnerSync(Player newOwner)
{ {
if (Disposed) if (Disposed)
return; return;
@@ -286,7 +293,7 @@ namespace OpenRA
// momentarily remove from world so the ownership queries don't get confused // momentarily remove from world so the ownership queries don't get confused
if (wasInWorld) if (wasInWorld)
w.Remove(this); World.Remove(this);
Owner = newOwner; Owner = newOwner;
Generation++; Generation++;
@@ -295,8 +302,7 @@ namespace OpenRA
t.OnOwnerChanged(this, oldOwner, newOwner); t.OnOwnerChanged(this, oldOwner, newOwner);
if (wasInWorld) if (wasInWorld)
w.Add(this); World.Add(this);
});
} }
public DamageState GetDamageState() public DamageState GetDamageState()

View File

@@ -67,8 +67,6 @@ namespace OpenRA.Mods.Common.Activities
var oldOwner = target.Actor.Owner; var oldOwner = target.Actor.Owner;
target.Actor.ChangeOwner(self.Owner);
foreach (var t in target.Actor.TraitsImplementing<INotifyCapture>()) foreach (var t in target.Actor.TraitsImplementing<INotifyCapture>())
t.OnCapture(target.Actor, self, oldOwner, self.Owner); t.OnCapture(target.Actor, self, oldOwner, self.Owner);
@@ -83,6 +81,8 @@ namespace OpenRA.Mods.Common.Activities
if (capturesInfo != null && capturesInfo.ConsumeActor) if (capturesInfo != null && capturesInfo.ConsumeActor)
self.Dispose(); self.Dispose();
target.Actor.ChangeOwnerSync(self.Owner);
}); });
} }
} }