Ejemplo n.º 1
0
    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);
                }
            }
        }
    }
Ejemplo n.º 2
0
    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);
            }
        }
    }