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.
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)
return;
@@ -286,7 +293,7 @@ namespace OpenRA
// momentarily remove from world so the ownership queries don't get confused
if (wasInWorld)
w.Remove(this);
World.Remove(this);
Owner = newOwner;
Generation++;
@@ -295,8 +302,7 @@ namespace OpenRA
t.OnOwnerChanged(this, oldOwner, newOwner);
if (wasInWorld)
w.Add(this);
});
World.Add(this);
}
public DamageState GetDamageState()

View File

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