Ejemplo n.º 1
0
        private IEnumerator Shoot()
        {
            yield return(_shoot.Engage(_target));

            if (!_target || !_target.Alive)
            {
                GameManager.Instance.Produce(_structure.Production);
                ResourceCounter.Instance.Send(transform.position, _structure.Production.Keys);
            }
            _target = null;
        }
Ejemplo n.º 2
0
        private IEnumerator Fight()
        {
            while (true)
            {
                yield return(new WaitForSeconds(0.5f));

                var structures = FindObjectsOfType <Structure>()
                                 .Where(s => _structureLayers.Contains(s.gameObject.layer))
                                 .ToArray();
                if (structures.Length == 0)
                {
                    continue;
                }

                var target = structures[Random.Range(0, structures.Length)];

                if (target.Blueprint)
                {
                    continue;
                }

                _agent.stoppingDistance = _shoot.Range - _agent.radius;
                if (!_agent.SetDestination(target.transform.position))
                {
                    continue;
                }

                var gaveUp    = false;
                var startTime = Time.time;
                yield return(new WaitUntil(() => {
                    var keepGoing = Time.time - startTime < _giveUpTime;
                    var inRange = Vector3.Distance(target.transform.position, transform.position) < _shoot.Range;

                    if (keepGoing)
                    {
                        return inRange;
                    }

                    gaveUp = true;
                    return true;
                }));

                if (gaveUp)
                {
                    continue;
                }

                yield return(_shoot.Engage(target));
            }
        }