Fix a crash when RallyPoint creates RallyPointIndicator

This commit is contained in:
dnqbob
2023-06-28 21:28:31 +08:00
committed by Matthias Mailänder
parent 0c32fca6c0
commit 628cc837ef

View File

@@ -58,16 +58,16 @@ namespace OpenRA.Mods.Common.Traits
public override object Create(ActorInitializer init) { return new RallyPoint(init.Self, this); }
}
public class RallyPoint : IIssueOrder, IResolveOrder, INotifyOwnerChanged, INotifyCreated
public class RallyPoint : IIssueOrder, IResolveOrder, INotifyOwnerChanged, INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld
{
const string OrderID = "SetRallyPoint";
const uint ForceSet = 1;
public List<CPos> Path;
public RallyPointInfo Info;
public string PaletteName { get; private set; }
const uint ForceSet = 1;
RallyPointIndicator effect;
public void ResetPath(Actor self)
{
@@ -83,7 +83,7 @@ namespace OpenRA.Mods.Common.Traits
void INotifyCreated.Created(Actor self)
{
self.World.Add(new RallyPointIndicator(self, this));
effect = new RallyPointIndicator(self, this);
}
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
@@ -138,6 +138,16 @@ namespace OpenRA.Mods.Common.Traits
return order.OrderString == OrderID && order.ExtraData == ForceSet;
}
void INotifyAddedToWorld.AddedToWorld(Actor self)
{
self.World.AddFrameEndTask(w => w.Add(effect));
}
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self)
{
self.World.AddFrameEndTask(w => w.Remove(effect));
}
sealed class RallyPointOrderTargeter : IOrderTargeter
{
readonly RallyPointInfo info;