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);
        }
    }
Beispiel #2
0
    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);
            }
        }
    }
Beispiel #3
0
    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);
        }
    }
Beispiel #4
0
        // CORE

        private void Awake()
        {
            _teamAssigner = GetComponent <TeamAssigner>();
        }
Beispiel #5
0
 private void Start()
 {
     assigner = GetComponent <TeamAssigner>();
 }