public void OnCollisionEnter(Collision collision) { if (collision.gameObject.TryGetComponent(out Health health) && isActivated) { TransformFocusedAction?.Invoke(collision.gameObject.transform, true); } }
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); } } }