Ejemplo n.º 1
0
        public void Handle()
        {
            if (_oldTargetPosition != _agentContext.Player.transform.position)
            {
                _oldTargetPosition = _agentContext.Player.transform.position;
                _movement.SetTargetPosition(_oldTargetPosition);
            }

            _movement.CanMove = true;

            if (_agentContext.DistanceToPlayer > _agentContext.AgressionDistance)
            {
                _elapsedTime += Time.deltaTime;

                if (_elapsedTime >= _agentContext.ChaseTimeOut)
                {
                    _stateMachine.Enter <PatrolState>();
                }
            }
            else if (_agentContext.DistanceToPlayer <= _enemyAttack.AttackDistance)             //Если игрок слишком близко, то остановиться для атаки
            {
                _elapsedTime      = 0f;
                _movement.CanMove = false;
                if (_playerHP.GetFreeSlots() > _agentContext.Weight)                 //Если игрока атакует не слишком много противников, то можно атаковать
                {
                    _stateMachine.Enter <EngageState>();
                }
            }
            else
            {
                _elapsedTime = 0f;
            }
        }
Ejemplo n.º 2
0
 public void Handle()
 {
     if (_agentContext.DistanceToPlayer > _attack.AttackDistance)
     {
         _stateMachine.Enter <ChaseState>();
     }
     else
     {
         _attack.VectorToPlayer = _agentContext.VectorToPlayer;
         _attack.Attack();
     }
 }
Ejemplo n.º 3
0
        public void Handle()
        {
            DetectTargets();

            if (_agentContext.EnemyDetected)
            {
                _stateMachine.Enter <ChaseState>();
            }

            if (_patrolSpots.Length > 0)
            {
                _randomSpot = Random.Range(0, _patrolSpots.Length);
                if (Vector2.Distance(_agentContext.transform.position, _patrolSpots[_randomSpot].position) <= 0.6f)
                {
                    _movement.CanMove = false;
                    if (_curWaitTime <= 0f)
                    {
                        _curWaitTime = _waitTime;
                        _randomSpot  = Random.Range(0, _patrolSpots.Length);
                        _movement.SetTargetPosition(_patrolSpots[_randomSpot].position);
                        _movement.CanMove = true;
                    }
                    else
                    {
                        _curWaitTime -= Time.deltaTime;
                    }
                }
                else
                {
                    _movement.SetTargetPosition(_patrolSpots[_randomSpot].position);
                    _movement.CanMove = true;
                }
            }
            else
            {
                _movement.CanMove = false;
            }
        }