diff --git a/OpenRa.Game/Traits/RenderInfantry.cs b/OpenRa.Game/Traits/RenderInfantry.cs index 6e7da392d2..7a643f3cff 100644 --- a/OpenRa.Game/Traits/RenderInfantry.cs +++ b/OpenRa.Game/Traits/RenderInfantry.cs @@ -26,8 +26,7 @@ namespace OpenRa.Game.Traits if (float2.WithinEpsilon(self.CenterLocation, Util.CenterOfCell(mobile.toCell), 2)) return false; var dir = Util.QuantizeFacing(self.traits.Get().Facing, 8); - var takeCover = self.traits.GetOrDefault(); - var prefix = (takeCover != null && takeCover.IsProne) ? "crawl-" : "run-"; + var prefix = IsProne(self) ? "crawl-" : "run-"; if (anim.CurrentSequence.Name.StartsWith(prefix)) anim.ReplaceAnim(prefix + dir); @@ -38,14 +37,18 @@ namespace OpenRa.Game.Traits } bool inAttack = false; + bool IsProne(Actor self) + { + var takeCover = self.traits.GetOrDefault(); + return takeCover != null && takeCover.IsProne; + } public void Attacking(Actor self) { var dir = Util.QuantizeFacing(self.traits.Get().Facing, 8); inAttack = true; - var takeCover = self.traits.GetOrDefault(); - var prefix = (takeCover != null && takeCover.IsProne) ? "prone-shoot-" : "shoot-"; + var prefix = IsProne(self) ? "prone-shoot-" : "shoot-"; anim.PlayThen(prefix + dir, () => inAttack = false); } @@ -58,8 +61,13 @@ namespace OpenRa.Game.Traits /* todo: idle anims, etc */ - anim.PlayFacing("stand", - () => self.traits.Get().Facing); + var dir = Util.QuantizeFacing(self.traits.Get().Facing, 8); + + if (IsProne(self)) + anim.PlayFetchIndex("crawl-" + dir, () => 0); /* what a hack. */ + else + anim.PlayFacing("stand", + () => self.traits.Get().Facing); } public override IEnumerable> Render(Actor self)