Пример #1
0
    void OnStateEnter(CurrentState m_NewState)
    {
        switch (m_NewState)
        {
        case CurrentState.Spawn:
            m_Animator.CrossFade("Boy_Walk", 0.5f);
            break;

        case CurrentState.InQueue:

            break;

        case CurrentState.MovingInQueue:
            if (m_CurrentWaitPoint > 0)
            {
                m_CurrentWaitPoint--;
            }
            break;

        case CurrentState.Idle:

            m_IdleTimer = Random.Range(m_StandIdleTimer.x, m_StandIdleTimer.y);
            break;

        case CurrentState.MovingTowardChair:
            m_Animator.CrossFade("Boy_Walk", 0.5f);
            m_Chair = m_ChairManager.FindChair(this.gameObject);
            if (m_Chair == null)
            {
                SwitchState(CurrentState.MovingTowardExit);
            }
            else
            {
                m_NavMeshAgent.SetDestination(m_Chair.transform.position);
            }
            break;

        case CurrentState.MovingTowardObject:
            m_Timer = 0f;
            m_Animator.CrossFade("Boy_Walk", 0.5f);
            m_Throwable = m_ChairManager.FindThrowable(this.gameObject);
            m_NavMeshAgent.SetDestination(m_Throwable.transform.position);
            break;

        case CurrentState.ThrowSomething:
            m_Timer = 0f;
            m_Throwable.GetComponent <Rigidbody>().AddForceAtPosition((transform.forward * m_ImpulseForce.x) + Vector3.up * m_ImpulseForce.y, transform.position, ForceMode.Impulse);
            break;

        case CurrentState.Sitting:
            m_Animator.CrossFade("Boy_Idle_Sit", 0.5f);
            canBePickedUp = false;
            m_Timer       = 0f;
            m_IdleTimer   = Random.Range(m_SitIdleTimer.x, m_SitIdleTimer.y);
            m_Chair.EnterChair();
            m_NavMeshAgent.enabled = false;
            transform.position     = m_Chair.transform.position + Vector3.up * 0.25f;
            transform.forward      = m_Chair.transform.forward;
            break;

        case CurrentState.Eating:
            m_Animator.CrossFade("Boy_Eat", 0.5f);
            vfx_Eating.Play(true);
            m_Timer = 0f;
            break;

        case CurrentState.Spitting:
            m_Timer = 0f;
            m_Animator.CrossFade("Boy_Vomi", 0.5f);
            vfx_Spitting.Play(true);
            break;

        case CurrentState.SittingIdle:
            canBePickedUp = true;
            m_Animator.CrossFade("Boy_Idle_Sit", 0.5f);
            m_Timer     = 0f;
            m_IdleTimer = Random.Range(m_SitIdleTimer.x, m_SitIdleTimer.y);
            break;

        case CurrentState.MovingTowardExit:
            m_Animator.CrossFade("Boy_Walk", 0.5f);
            m_NavMeshAgent.SetDestination(m_ExitPosition);
            break;

        case CurrentState.Disapear:
            if (m_HaveEat)
            {
                m_MayhemMeter.ChangeMeter(m_LeaveBonusMalus.x);
            }
            else
            {
                m_MayhemMeter.ChangeMeter(-m_LeaveBonusMalus.y);
            }
            Destroy(gameObject);
            break;

        case CurrentState.PickUp:
            m_NavMeshAgent.enabled = false;
            m_Animator.CrossFade("Boy_Caught", 0.5f);
            break;

        case CurrentState.Release:

            break;

        case CurrentState.Berserker:
            m_Animator.CrossFade("Boy_Heavy_Walk", 0.5f);
            vfx_Angry.Play(true);
            m_Renderer.transform.position = transform.position;
            m_NavMeshAgent.enabled        = true;
            break;
        }
    }