private void Update() { if (m_CurrentState != AnimationState.None) { AnimationState prevState; do { prevState = m_CurrentState; switch (m_CurrentState) { case AnimationState.Setup: { if (m_MoveToTarget && m_CurrentCasterAnim) { m_CurrentCasterAnim.StartWalkAnimation(m_CurrentTarget.transform.position + m_CurrentCaster.FacingDir * -m_MoveTargetOffset, m_MoveSpeedScale); } m_StallTimer = 0.0f; m_CurrentState = AnimationState.MoveToTarget; break; } case AnimationState.MoveToTarget: { if (!m_CurrentCaster.InBlockingAnimating) { m_CurrentState = AnimationState.Animation; } break; } case AnimationState.Animation: { m_StallTimer += Time.deltaTime; if (m_StallTimer >= m_AnimWaitStall) { break; } //TODO - Anim hookup if (!m_CurrentCaster.InBlockingAnimating) { m_Action.ApplyCurrentAttack(); if (m_MoveToTarget && m_CurrentCasterAnim) { m_CurrentCasterAnim.StartWalkAnimation(m_CurrentCaster.CurrentTile.transform.position, m_MoveSpeedScale); } m_CurrentState = AnimationState.MoveBack; } break; } case AnimationState.MoveBack: { if (!m_CurrentCaster.InBlockingAnimating) { m_CurrentState = AnimationState.Finish; } break; } case AnimationState.Finish: { m_CurrentState = AnimationState.None; m_CurrentCaster = null; m_CurrentTarget = null; m_CurrentCasterAnim = null; return; } } }while (m_CurrentState != prevState); } }