diff --git a/OpenRA.Mods.RA/Activities/Transform.cs b/OpenRA.Mods.RA/Activities/Transform.cs index 5742ef7b67..47012b5454 100644 --- a/OpenRA.Mods.RA/Activities/Transform.cs +++ b/OpenRA.Mods.RA/Activities/Transform.cs @@ -22,6 +22,7 @@ namespace OpenRA.Mods.RA.Activities public string[] Sounds = { }; public int ForceHealthPercentage = 0; public bool SkipMakeAnims = false; + public string Race = null; public Transform(Actor self, string toActor) { @@ -57,6 +58,9 @@ namespace OpenRA.Mods.RA.Activities if (SkipMakeAnims) init.Add(new SkipMakeAnimsInit()); + if (Race != null) + init.Add(new RaceInit(Race)); + var health = self.TraitOrDefault(); if (health != null) { diff --git a/OpenRA.Mods.RA/LeavesHusk.cs b/OpenRA.Mods.RA/LeavesHusk.cs index b69777969d..5cd4a728b2 100644 --- a/OpenRA.Mods.RA/LeavesHusk.cs +++ b/OpenRA.Mods.RA/LeavesHusk.cs @@ -20,14 +20,20 @@ namespace OpenRA.Mods.RA [ActorReference] public readonly string HuskActor = null; - public object Create(ActorInitializer init) { return new LeavesHusk(this); } + public object Create(ActorInitializer init) { return new LeavesHusk(init, this); } } public class LeavesHusk : INotifyKilled { - LeavesHuskInfo info; + readonly LeavesHuskInfo info; + readonly string race; - public LeavesHusk(LeavesHuskInfo info) { this.info = info; } + public LeavesHusk(ActorInitializer init, LeavesHuskInfo info) + { + this.info = info; + + race = init.Contains() ? init.Get() : init.self.Owner.Country.Race; + } public void Killed(Actor self, AttackInfo e) { @@ -42,6 +48,7 @@ namespace OpenRA.Mods.RA new LocationInit(self.Location), new CenterPositionInit(self.CenterPosition), new OwnerInit(self.Owner), + new RaceInit(race), new SkipMakeAnimsInit() }; diff --git a/OpenRA.Mods.RA/Transforms.cs b/OpenRA.Mods.RA/Transforms.cs index 0f22d81881..0b6b6d730b 100644 --- a/OpenRA.Mods.RA/Transforms.cs +++ b/OpenRA.Mods.RA/Transforms.cs @@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA public readonly string[] TransformSounds = { }; public readonly string[] NoTransformSounds = { }; - public virtual object Create(ActorInitializer init) { return new Transforms(init.self, this); } + public virtual object Create(ActorInitializer init) { return new Transforms(init, this); } } class Transforms : IIssueOrder, IResolveOrder, IOrderVoice @@ -33,12 +33,14 @@ namespace OpenRA.Mods.RA readonly Actor self; readonly TransformsInfo info; readonly BuildingInfo bi; + readonly string race; - public Transforms(Actor self, TransformsInfo info) + public Transforms(ActorInitializer init, TransformsInfo info) { - this.self = self; + self = init.self; this.info = info; bi = self.World.Map.Rules.Actors[info.IntoActor].Traits.GetOrDefault(); + race = init.Contains() ? init.Get() : self.Owner.Country.Race; } public string VoicePhraseForOrder(Actor self, Order order) @@ -90,7 +92,7 @@ namespace OpenRA.Mods.RA if (rb != null && self.Info.Traits.Get().HasMakeAnimation) self.QueueActivity(new MakeAnimation(self, true, () => rb.PlayCustomAnim(self, "make"))); - self.QueueActivity(new Transform(self, info.IntoActor) { Offset = (CVec)info.Offset, Facing = info.Facing, Sounds = info.TransformSounds }); + self.QueueActivity(new Transform(self, info.IntoActor) { Offset = (CVec)info.Offset, Facing = info.Facing, Sounds = info.TransformSounds, Race = race }); } public void ResolveOrder(Actor self, Order order)