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; } }
public void Handle() { if (_agentContext.DistanceToPlayer > _attack.AttackDistance) { _stateMachine.Enter <ChaseState>(); } else { _attack.VectorToPlayer = _agentContext.VectorToPlayer; _attack.Attack(); } }
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; } }