Exemple #1
0
    public void Cast()
    {
        int targetLayerMask = targets;
        int wallLayerMask   = Entity.wallLayerMask;

        tickCount = ticksAlive;

        if (CalculatePierce() <= 0)
        {
            RaycastHit2D hit = Physics2D.Raycast(startPos, direction, Mathf.Infinity, targetLayerMask | wallLayerMask);
            if (hit && !ignoredColliders.Contains(hit.collider) && canHit)
            {
                Enemy e = hit.transform.GetComponent <Enemy>();
                if (e != null)
                {
                    e.TakeDamage(CalculateDamage(), direction);
                }
                PlayerSegmentHealth p = hit.transform.GetComponent <PlayerSegmentHealth>();
                if (p != null)
                {
                    p.TakeDamage(CalculateDamage());
                }

                // create effect
                lineRenderer.SetPosition(0, startPos);
                lineRenderer.SetPosition(1, hit.point);
            }
        }
        else
        {
            RaycastHit2D wallHit = Physics2D.Raycast(startPos, direction, Mathf.Infinity, wallLayerMask);

            ContactFilter2D targetFilter = new ContactFilter2D();
            targetFilter.layerMask = targetLayerMask;
            RaycastHit2D[] hits = new RaycastHit2D[CalculatePierce()];

            int numHit = Physics2D.Raycast(startPos, direction, targetFilter, hits, wallHit.distance);

            for (int i = 0; i < numHit; i++)
            {
                if (hits[i] && !ignoredColliders.Contains(hits[i].collider) && canHit)
                {
                    Enemy e = hits[i].transform.GetComponent <Enemy>();
                    if (e != null)
                    {
                        e.TakeDamage(CalculateDamage(), direction);
                    }
                    // create effect
                    PlayerSegmentHealth p = hits[i].transform.GetComponent <PlayerSegmentHealth>();
                    if (p != null)
                    {
                        p.TakeDamage(CalculateDamage());
                    }
                }
            }

            lineRenderer.SetPosition(0, startPos);
            lineRenderer.SetPosition(1, wallHit.point);
        }
    }
Exemple #2
0
    private void Attack(GameObject seg)
    {
        PlayerSegmentHealth h = seg.GetComponent <PlayerSegmentHealth>();

        if (h != null)
        {
            h.TakeDamage(damage);
        }
    }
Exemple #3
0
    private void Attack(GameObject seg)
    {
        AudioManager.Play("slime_attack");// + Random.Range(1, 3));

        PlayerSegmentHealth h = seg.GetComponent <PlayerSegmentHealth>();

        if (h != null)
        {
            h.TakeDamage(damage);
        }
    }
Exemple #4
0
    protected override void OnTriggerEnter2D(Collider2D other)
    {
        if (ignoredColliders.Contains(other))
        {
            return;
        }
        // check if it is not in targets
        if ((targets & (1 << other.gameObject.layer)) == 0)
        {
            return;
        }

        if (other.tag == "Enemy" && !hitEnemyThisTile)
        {
            Enemy e = other.gameObject.GetComponent <Enemy>();
            e.TakeDamage(CalculateDamage(), direction);
            basePierce -= 1;
            if (explode > 0)
            {
                GameObject egg = Instantiate(eggsplosionPrefab, transform.position, Quaternion.identity, transform.parent);
                egg.GetComponent <Eggsplosion>().Init(explode);
            }
            if (CalculatePierce() < 0)
            {
                ProjectileManager.RemoveProjectile(gameObject);
            }

            hitEnemyThisTile = true;
        }

        if (other.tag == "Player" && !hitEnemyThisTile)
        {
            PlayerSegmentHealth p = other.gameObject.GetComponent <PlayerSegmentHealth>();
            p.TakeDamage(CalculateDamage());
            basePierce -= 1;
            if (CalculatePierce() < 0)
            {
                ProjectileManager.RemoveProjectile(gameObject);
            }

            hitEnemyThisTile = true;
        }

        if (other.tag == "Wall")
        {
            /*if (explode > 0)
             * {
             *  GameObject egg = Instantiate(eggsplosionPrefab, transform.position, Quaternion.identity, transform.parent);
             *  egg.GetComponent<Eggsplosion>().Init(explode);
             * }*/
            ProjectileManager.RemoveProjectile(gameObject);
        }
    }
Exemple #5
0
    protected virtual void OnTriggerEnter2D(Collider2D other)
    {
        if (ignoredColliders.Contains(other))
        {
            return;
        }
        // check if it is not in targets
        if ((targets & (1 << other.gameObject.layer)) == 0)
        {
            return;
        }

        if (other.tag == "Enemy" && !hitEnemyThisTile)
        {
            Enemy e = other.gameObject.GetComponent <Enemy>();
            e.TakeDamage(CalculateDamage(), direction);
            basePierce -= 1;
            if (CalculatePierce() < 0)
            {
                ProjectileManager.RemoveProjectile(gameObject);
            }

            hitEnemyThisTile = true;
        }

        if (other.tag == "Player" && !hitEnemyThisTile)
        {
            PlayerSegmentHealth p = other.gameObject.GetComponent <PlayerSegmentHealth>();
            p.TakeDamage(baseDamage); // CalculateDamage());
            basePierce -= 1;
            if (basePierce < 0)       //CalculatePierce() < 0)
            {
                ProjectileManager.RemoveProjectile(gameObject);
            }

            hitEnemyThisTile = true;
        }

        if (other.tag == "Wall")
        {
            ProjectileManager.RemoveProjectile(gameObject);
        }
    }
Exemple #6
0
    private IEnumerator ExplodeHelper(LayerMask target, int damage)
    {
        AudioManager.Play("misc_explosion");

        CameraShake.Shake(.75f, 1.25f);
        explosionFX.SetActive(true);

        //spriteRenderer.enabled = false;
        //hitbox.enabled = false;



        //ContactFilter2D targetFilter = new ContactFilter2D();
        //targetFilter.layerMask = fullHeightEntitiesMask;
        //RaycastHit2D[] hits = new RaycastHit2D[99];
        //int numHit = Physics2D.Raycast(startPos, direction, targetFilter, hits, wallHit.distance);

        Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, 2f, target);

        for (int i = 0; i < hits.Length; i++)
        {
            //Debug.Log("Explosion hit " + hits[i].name + " at " + hits[i].transform.position);

            Enemy e = hits[i].transform.GetComponent <Enemy>();
            if (e != null)
            {
                e.TakeDamage(damage, (e.transform.position - transform.position).normalized);
            }
            // create effect
            PlayerSegmentHealth p = hits[i].transform.GetComponent <PlayerSegmentHealth>();
            if (p != null)
            {
                p.TakeDamage(damage);
            }
        }

        yield return(new WaitForSeconds(2));

        //Die();
    }