コード例 #1
0
    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);
        }
    }