private void DamageRadius() { Vector2 target = GetComponent <PointFollower>().target; List <GameObject> units = ObjectContainer.GetAllUnits(); foreach (GameObject elt in units) { // elt == user for don't hurt self, CompareTag("Enemy") for any ally if (userTag == "Enemy" && elt.CompareTag("Enemy")) { continue; } RaycastHit2D hit = Physics2D.Raycast(target, (Vector2)elt.transform.position - target, Globals.GRENADE_YELLOW_RANGE); if (hit.collider != null && hit.collider.gameObject == elt) { UnitStatus status = elt.GetComponent <UnitStatus>(); int damage = ActionManager.DistanceToLevel(Vector2.Distance(elt.transform.position, target)); if (userTag == "Enemy" && elt.CompareTag("Player")) { damage = 1; } if (status) { status.DamageHealth(damage); } } } }
private void UpdateAffectedUnits() { List <GameObject> units = ObjectContainer.GetAllUnits(); // Check for all units foreach (GameObject elt in units) { float sourceToTarget = Vector2.Distance(transform.position, elt.transform.position); Gassable target = elt.GetComponent <Gassable>(); // Can only be gassed if target has Gassable component and is within range if (target && sourceToTarget <= cloudRadius) { LayerMask mask = LayerMask.GetMask("Default"); RaycastHit2D hit = Physics2D.Raycast(transform.position, target.transform.position - transform.position, cloudRadius, mask); // If raycast collides with something closer than target, target was shielded if (hit.collider && Vector2.Distance(transform.position, hit.point) < sourceToTarget) { continue; } target.SetGassed(true); } } }