Exemplo n.º 1
0
 public void TransitionToState(AIEnemyState nextState)
 {
     if (nextState != remainState)
     {
         currentState = nextState;
     }
 }
Exemplo n.º 2
0
        private void SetState(AIEnemyState aiEnemyState)
        {
            StopAllCoroutines();
            switch (aiEnemyState)
            {
            case AIEnemyState.IDLE:
                StartCoroutine(IdleState());
                break;

            case AIEnemyState.PATROL:
                StartCoroutine(PatrolState());
                break;

            case AIEnemyState.CHASE:
                StartCoroutine(ChaseState());
                break;

            case AIEnemyState.ATTACK:
                StartCoroutine(AttackState());
                break;

            default:
                break;
            }
        }
Exemplo n.º 3
0
        private IEnumerator PatrolState()
        {
            _currentState = AIEnemyState.PATROL;
            while (_currentState == AIEnemyState.PATROL)
            {
                WalkRight();
                yield return(_pausePatrol);

                _personMover.Stop();
                yield return(_pausePatrol);

                WalkLeft();
                yield return(_pausePatrol);

                _personMover.Stop();
                yield return(_pausePatrol);
            }
        }
Exemplo n.º 4
0
        private IEnumerator AttackState()
        {
            _currentState    = AIEnemyState.ATTACK;
            _attackRateTimer = _attackRate;
            _personMover.Stop();

            while (_currentState == AIEnemyState.ATTACK)
            {
                if (DistanceToTarget() > _attackRange)
                {
                    SetState(AIEnemyState.IDLE);
                }

                _attackRateTimer += Time.deltaTime;
                if (_attackRateTimer >= _attackRate)
                {
                    _enemyAnimations.Attack();
                    _attackRateTimer = 0;
                }
                yield return(null);
            }
        }
Exemplo n.º 5
0
        private IEnumerator ChaseState()
        {
            _currentState = AIEnemyState.CHASE;
            while (_currentState == AIEnemyState.CHASE)
            {
                if (DistanceToTarget() < _chaseMaxDistance)
                {
                    RunToTarget();
                }
                else
                {
                    SetState(AIEnemyState.IDLE);
                }

                if (DistanceToTarget() <= _attackRange)
                {
                    SetState(AIEnemyState.ATTACK);
                }

                yield return(null);
            }
        }