diff --git a/OpenRA.Game/Selection.cs b/OpenRA.Game/Selection.cs index 5f1bbae0d1..31afd7772a 100644 --- a/OpenRA.Game/Selection.cs +++ b/OpenRA.Game/Selection.cs @@ -18,7 +18,17 @@ namespace OpenRA public class Selection { List actors = new List(); - + public void Add(World w, Actor a) + { + actors.Add(a); + foreach (var ns in w.WorldActor.traits.WithInterface()) + ns.SelectionChanged(); + } + + public bool Contains(Actor a) + { + return actors.AsEnumerable().Contains(a); + } public void Combine(World world, IEnumerable newSelection, bool isCombine, bool isClick) { var oldSelection = actors.AsEnumerable(); diff --git a/OpenRA.Mods.RA/Activities/TransformIntoActor.cs b/OpenRA.Mods.RA/Activities/TransformIntoActor.cs index d51ff6b8a3..4931e1d337 100644 --- a/OpenRA.Mods.RA/Activities/TransformIntoActor.cs +++ b/OpenRA.Mods.RA/Activities/TransformIntoActor.cs @@ -9,6 +9,8 @@ #endregion using System; +using System.Linq; +using System.Collections.Generic; using OpenRA.Traits; namespace OpenRA.Mods.RA.Activities @@ -36,14 +38,19 @@ namespace OpenRA.Mods.RA.Activities { if (isCanceled) return NextActivity; - self.World.AddFrameEndTask(_ => + self.World.AddFrameEndTask(w => { + var selected = Game.controller.selection.Contains(self); + self.World.Remove(self); foreach (var s in sounds) Sound.PlayToPlayer(self.Owner, s, self.CenterLocation); var a = self.World.CreateActor(actor, self.Location + offset, self.Owner); a.Health = GetHealthToTransfer(self, a, transferPercentage); + + if (selected) + Game.controller.selection.Add(w, a); }); return this; } diff --git a/OpenRA.Mods.RA/Activities/UndeployMcv.cs b/OpenRA.Mods.RA/Activities/UndeployMcv.cs index 7625559ccb..956ed784fb 100755 --- a/OpenRA.Mods.RA/Activities/UndeployMcv.cs +++ b/OpenRA.Mods.RA/Activities/UndeployMcv.cs @@ -18,13 +18,17 @@ namespace OpenRA.Mods.RA.Activities public IActivity NextActivity { get; set; } bool started; - void DoUndeploy(World w,Actor self) + void DoUndeploy(World w, Actor self) { + var selected = Game.controller.selection.Contains(self); w.Remove(self); var mcv = w.CreateActor("mcv", self.Location + new int2(1, 1), self.Owner); mcv.Health = TransformIntoActor.GetHealthToTransfer(self, mcv, true); mcv.traits.Get().Facing = 96; + + if (selected) + Game.controller.selection.Add(w, mcv); } public IActivity Tick(Actor self)