示例#1
0
 public void OnCollisionEnter(Collision collision)
 {
     if (collision.gameObject.TryGetComponent(out Health health) && isActivated)
     {
         TransformFocusedAction?.Invoke(collision.gameObject.transform, true);
     }
 }
示例#2
0
    void CheckEnemiesAround()
    {
        //Get all enemies within range
        List <Transform> enemiesToShoot = new List <Transform>(Physics.OverlapSphere(transform.position, rangeRadius)?
                                                               .Where(x => x.CompareTag("Enemy") && x.GetComponent <Health>().currentHealth > 0)?
                                                               .Select(x => x.transform));

        if (justWithinRange)
        {
            if (enemiesToShoot.Count > 0)
            {
                TransformFocusedAction?.Invoke(null, true);
            }
            else
            {
                TransformFocusedAction?.Invoke(null, false);
            }
        }
        else
        {
            List <Transform> visibleEnemies = new List <Transform>();
            //Check if an object is in-between
            foreach (Transform t in enemiesToShoot)
            {
                RaycastHit[] hit = Physics.RaycastAll(transform.position, (t.position - transform.position).normalized, (t.position - transform.position).magnitude);

                if (hit.Length <= 2)
                {
                    visibleEnemies.Add(t);
                }
            }

            Transform closestVisibleEnemy = visibleEnemies.OrderBy(x => x.GetComponent <Health>().currentHealth).FirstOrDefault();

            if (visibleEnemies.Count > 0)
            {
                TransformFocusedAction?.Invoke(closestVisibleEnemy, true);
            }
            else
            {
                TransformFocusedAction?.Invoke(closestVisibleEnemy, false);
            }
        }
    }