private void Shoot() { if (IsPlayerTooFarToShoot()) { _state = PatrolEnemyWithGunStates.Patrolling; _aiDestinationSetter.enabled = true; _aiPath.enabled = true; _seeker.enabled = true; SetAiDestination(_currentTarget); return; } if (Time.time < _nextShotTime) { return; } const float failAxisProbability = 0.5f; const float errorMargin = 1f; var failXRandom = Random.value; var failYRandom = Random.value; Vector2 shotTarget = _player.transform.position; if (failXRandom < failAxisProbability) { var xError = Random.Range(-errorMargin, errorMargin); shotTarget.x = shotTarget.x + xError; Debug.Log($"Failed x by {xError}"); } if (failYRandom < failAxisProbability) { var yError = Random.Range(-errorMargin, errorMargin); shotTarget.y = shotTarget.y + yError; Debug.Log($"y x by {yError}"); } var shot = SharedGunShotPool.Instance.GetNextShot(); shot.SetActive(true); shot.GetComponent <SpriteRenderer>().color = _shotColor; Vector2 position = transform.position; Shooting.Shoot(position, (shotTarget - position), shot, _enemy.HitPoints); SharedGunShotPool.Instance.ReturnShot(shot); _gunTriangle.SetActive(true); Debug.Log($"Angle before = {transform.rotation.eulerAngles}"); transform.right = _player.transform.position - transform.position; Debug.Log($"Angle after = {transform.rotation.eulerAngles}"); StartCoroutine(DisableGunTriangle()); const float minSecondsBetweenShots = .1f; const float maxSecondsBetweenShots = 1f; _nextShotTime = Time.time + Random.Range(minSecondsBetweenShots, maxSecondsBetweenShots); }
private void Patrol() { if (IsPlayerClose()) { var direction = (transform.position - _previousPosition).normalized; var vectorToPlayer = _player.transform.position - _previousPosition; var angleToPlayer = Vector3.Angle(direction, vectorToPlayer); Debug.Log($"Angle to player = {angleToPlayer}"); if (angleToPlayer < 60 || IsPlayerTooClose()) { _state = PatrolEnemyWithGunStates.Shooting; _aiDestinationSetter.enabled = false; _aiPath.enabled = false; _seeker.enabled = false; _aiDestinationSetter.target = null; } } }