Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
                }
            }
        }