diff --git a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs index 4d5f85c481..61e65a0aff 100644 --- a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs +++ b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs @@ -14,34 +14,34 @@ namespace OpenRA.Mods.RA.Activities { class CaptureBuilding : IActivity { - Actor target; + Target target; - public CaptureBuilding(Actor target) { this.target = target; } + public CaptureBuilding(Actor target) { this.target = Target.FromActor(target); } public IActivity NextActivity { get; set; } public IActivity Tick(Actor self) { - if (target == null || target.IsDead()) return NextActivity; - if ((target.Location - self.Location).Length > 1) + if (!target.IsValid) return NextActivity; + if ((target.Actor.Location - self.Location).Length > 1) return NextActivity; - target.World.AddFrameEndTask(w => + self.World.AddFrameEndTask(w => { // momentarily remove from world so the ownership queries don't get confused - var oldOwner = target.Owner; - w.Remove(target); - target.Owner = self.Owner; - w.Add(target); + var oldOwner = target.Actor.Owner; + w.Remove(target.Actor); + target.Actor.Owner = self.Owner; + w.Add(target.Actor); - foreach (var t in target.TraitsImplementing()) - t.OnCapture(target, self, oldOwner, self.Owner); + foreach (var t in target.Actor.TraitsImplementing()) + t.OnCapture(target.Actor, self, oldOwner, self.Owner); self.Destroy(); }); return NextActivity; } - public void Cancel(Actor self) { target = null; NextActivity = null; } + public void Cancel(Actor self) { target = Target.None; NextActivity = null; } } } diff --git a/OpenRA.Mods.RA/Activities/Demolish.cs b/OpenRA.Mods.RA/Activities/Demolish.cs index 688799c610..eab7bfd823 100644 --- a/OpenRA.Mods.RA/Activities/Demolish.cs +++ b/OpenRA.Mods.RA/Activities/Demolish.cs @@ -15,26 +15,23 @@ namespace OpenRA.Mods.RA.Activities { class Demolish : IActivity { - Actor target; + Target target; public IActivity NextActivity { get; set; } - public Demolish( Actor target ) - { - this.target = target; - } + public Demolish( Actor target ) { this.target = Target.FromActor(target); } public IActivity Tick(Actor self) { - if (target == null || target.IsDead()) return NextActivity; - if ((target.Location - self.Location).Length > 1) + if (!target.IsValid) return NextActivity; + if ((target.Actor.Location - self.Location).Length > 1) return NextActivity; - - + + self.World.AddFrameEndTask(w => w.Add(new DelayedAction(25 * 2, - () => target.Kill(self)))); + () => { if (target.IsValid) target.Actor.Kill(self); }))); return NextActivity; } - public void Cancel(Actor self) { target = null; NextActivity = null; } + public void Cancel(Actor self) { target = Target.None; NextActivity = null; } } }