Пример #1
0
        // Update is called once per frame
        void FixedUpdate()
        {
            if (!currentState.Equals(AIStateType.Feeding) && !feeding && coroutinePatrolEnded)
            {
                hungry -= hungry_time;
                if (hungry < 0)
                {
                    hungry = 0;
                }
                if (hungry < 0.1f && !currentState.Equals(AIStateType.Alerted) && !currentState.Equals(AIStateType.Attack))
                {
                    currentState = AIStates.Feeding;
                }
            }
            else if (feeding && coroutinePatrolEnded)
            {
                hungry += hungry_time * 50;
                Debug.Log("Hungry Level = " + hungry);
                if (hungry >= 90f && !currentState.Equals(AIStateType.Alerted) && !currentState.Equals(AIStateType.Attack))
                {
                    Debug.Log("ENTRO IF FEEDING UPDATE");
                    setAnimatorParameters("Feeding_bool", false);
                    hungry       = 100;
                    currentState = AIStates.Patrol;
                    seeking_food = false;
                    feeding      = false;

                    StartCoroutine(wait());
                }
            }

            checkStateBehaviour();
        }
        // Update is called once per frame
        public void FixedUpdate()
        {
            if (currentState == AIStates.Dead)
            {
                return;
            }

            //Si no está en alerta o attaque accede aquí así restamos si tiene hambre
            if (!currentState.Equals(AIStates.Alerted) && !currentState.Equals(AIStates.Attack) && !currentState.Equals(AIStates.Peace))
            {
                //coroutinePatrolEnded indica si las coroutines han terminado así no mezclamos animaciones ni estados durante las animaciones
                if (!currentState.Equals(AIStates.Feeding) && !feeding && coroutinePatrolEnded)
                {
                    hungry -= hungry_time;
                    if (hungry < 0)
                    {
                        hungry = 0;
                    }
                    if (hungry < min_hungry)
                    {
                        currentState = AIStates.Feeding;
                    }
                }
                //si está comiendo restauramos el hambre a 100 y volvemos al estado Patrol
                else if (feeding && coroutinePatrolEnded)
                {
                    hungry += hungry_time * 50;
                    if (hungry >= 90f && !currentState.Equals(AIStates.Alerted) && !currentState.Equals(AIStates.Attack))
                    {
                        Debug.Log("ENTRO IF FEEDING UPDATE");
                        setAnimatorParameters("Feeding_bool", false);
                        hungry       = 100;
                        currentState = AIStates.Patrol;
                        seeking_food = false;
                        feeding      = false;

                        StartCoroutine(wait());
                    }
                }
            }

            //chequeamos los estados aunque en realidad solo dos estados aquí los demás estados se activan por eventos
            // de los colliders VISION Y ATTACK_COLLIDER
            checkStateBehaviour();
        }