private void OnTriggerEnter2D(Collider2D collider) { TeamAssigner teamAssigner = collider.GetComponent <TeamAssigner>(); ProjectileController projectile = collider.GetComponent <ProjectileController>(); if (projectile != null) { if (projectile.firingTeam != firingTeam) { Destroy(projectile.gameObject); Destroy(gameObject); return; } } if (collider.isTrigger || teamAssigner != null && firingTeam == teamAssigner.team) { return; } else { HealthTracker healthTracker = collider.GetComponent <HealthTracker>(); if (healthTracker != null) { healthTracker.TakeDamage(weaponInfo.damage); } Destroy(gameObject); } }
private void OnCollisionStay2D(Collision2D collision) { TeamAssigner otherTeamAssigner = collision.collider.GetComponent <TeamAssigner>(); if (otherTeamAssigner != null && otherTeamAssigner.team != assigner.team) { HealthTracker healthTracker = collision.collider.GetComponent <HealthTracker>(); if (healthTracker != null) { healthTracker.TakeDamage(damage); } } }
public override void DoBehavior(CharacterAttackController controller) { List <Collider2D> possibleTargets = new List <Collider2D>(); Vector2 selfPosition = controller.transform.position; Team selfTeam = controller.GetComponent <TeamAssigner>().team; foreach (Collider2D collider in Physics2D.OverlapCircleAll(selfPosition, attackRadius)) { TeamAssigner assigner = collider.GetComponent <TeamAssigner>(); if (assigner != null && selfTeam != assigner.team) { possibleTargets.Add(collider); } } float closestDistance = Mathf.Infinity; Collider2D closestTarget = null; foreach (Collider2D possibleTarget in possibleTargets) { // Check if we have line of sight Vector2 targetPosition = possibleTarget.transform.position; Vector2 direction = targetPosition - selfPosition; float distance = direction.magnitude; bool lineOfSight = true; foreach (RaycastHit2D hit in Physics2D.RaycastAll(controller.transform.position, direction, distance)) { if (hit.collider.gameObject.GetComponent <VisionOccluder>() != null) { lineOfSight = false; } } if (lineOfSight && distance <= closestDistance) { closestTarget = possibleTarget; closestDistance = distance; } } if (closestTarget != null) { controller.Attack(closestTarget.transform.position); } }
// CORE private void Awake() { _teamAssigner = GetComponent <TeamAssigner>(); }
private void Start() { assigner = GetComponent <TeamAssigner>(); }