From 6b80cfc9d4003d91ad5e48d457adaa13cef48f56 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 17 Feb 2011 20:45:04 +1300 Subject: [PATCH] Refactoring --- OpenRA.Mods.RA/Render/RenderInfantry.cs | 71 ++++++++++--------------- 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/OpenRA.Mods.RA/Render/RenderInfantry.cs b/OpenRA.Mods.RA/Render/RenderInfantry.cs index 40c1de2123..d5df8624bf 100644 --- a/OpenRA.Mods.RA/Render/RenderInfantry.cs +++ b/OpenRA.Mods.RA/Render/RenderInfantry.cs @@ -32,14 +32,8 @@ namespace OpenRA.Mods.RA.Render Idle, Attacking, Moving, - Waiting - }; - - enum IdleState - { - None, Waiting, - Active + IdleAnimating }; public bool Panicked = false; @@ -49,7 +43,6 @@ namespace OpenRA.Mods.RA.Render RenderInfantryInfo Info; string idleSequence; int idleDelay; - IdleState idleState; protected virtual string NormalizeInfantrySequence(Actor self, string baseSequence) { @@ -62,6 +55,11 @@ namespace OpenRA.Mods.RA.Render return baseSequence; } + protected virtual bool AllowIdleAnimation(Actor self) + { + return Info.IdleAnimations.Length > 0 && !Prone && !Panicked; + } + public AnimationState State { get; private set; } Mobile mobile; public RenderInfantry(Actor self, RenderInfantryInfo info) @@ -69,7 +67,7 @@ namespace OpenRA.Mods.RA.Render { Info = info; anim.PlayFetchIndex(NormalizeInfantrySequence(self, "stand"), () => 0); - State = AnimationState.Idle; + State = AnimationState.Waiting; mobile = self.Trait(); } @@ -96,50 +94,35 @@ namespace OpenRA.Mods.RA.Render State = AnimationState.Moving; anim.PlayRepeating(NormalizeInfantrySequence(self, "run")); } - wasProne = Prone; - - if (!self.IsIdle) - { - idleState = IdleState.None; - return; - } - - if (idleState == IdleState.Active) - return; - - else if (idleDelay > 0 && --idleDelay == 0) - { - idleState = IdleState.Active; - - if (anim.HasSequence(idleSequence)) - { - anim.PlayThen(idleSequence, - () => - { - idleState = IdleState.None; - anim.PlayRepeating(NormalizeInfantrySequence(self, "stand")); - }); - } - else - idleState = IdleState.None; - } } public void TickIdle(Actor self) { - if (State != AnimationState.Idle) + if (State != AnimationState.Idle && State != AnimationState.IdleAnimating) { anim.PlayFetchIndex(NormalizeInfantrySequence(self, "stand"), () => 0); State = AnimationState.Idle; + + if (Info.IdleAnimations.Length > 0) + { + idleSequence = Info.IdleAnimations.Random(self.World.SharedRandom); + idleDelay = self.World.SharedRandom.Next(Info.MinIdleWaitTicks, Info.MaxIdleWaitTicks); + } + } + else if (AllowIdleAnimation(self) && idleDelay > 0 && --idleDelay == 0) + { + if (anim.HasSequence(idleSequence)) + { + State = AnimationState.IdleAnimating; + anim.PlayThen(idleSequence, + () => + { + anim.PlayRepeating(NormalizeInfantrySequence(self, "stand")); + State = AnimationState.Waiting; + }); + } } - - if (idleState != IdleState.None || Info.IdleAnimations.Length == 0) - return; - - idleState = IdleState.Waiting; - idleSequence = Info.IdleAnimations.Random(self.World.SharedRandom); - idleDelay = self.World.SharedRandom.Next(Info.MinIdleWaitTicks, Info.MaxIdleWaitTicks); } public void Damaged(Actor self, AttackInfo e)