Beispiel #1
0
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.isTrigger)
        {
            return;
        }
        Collider2D   col;
        int          layerMask = ~(1 << LayerMask.NameToLayer("Projectile"));
        RaycastHit2D hit;

        if (collision.collider.gameObject.CompareTag("Player"))
        {
            hit = Physics2D.Raycast(transform.position, (collision.collider.transform.position - transform.position).normalized, transform.lossyScale.magnitude / 2 + 0.1f, layerMask);
            col = playerCollider;
        }
        else
        {
            hit = Physics2D.Raycast(transform.position, velocity.normalized, transform.lossyScale.magnitude / 2 + 0.1f, layerMask);
            col = hit.collider;
        }

        if (hit && !hit.collider.isTrigger && hit.collider.IsTouching(thisCollider))//has hit
        {
            col.gameObject.SendMessage("FirstWaveHit", SendMessageOptions.DontRequireReceiver);

            if (col.gameObject.CompareTag("BounceableWall") && reflectionWall == Vector3.zero)
            {
                MultiTag wallTag = col.gameObject.GetComponent <MultiTag>();
                if (wallTag)//////////////////////////////////////////////////////////////////Need To Change to check for wallreflectalongX
                {
                    reflectionWall = col.transform.right;
                }
                else
                {
                    reflectionWall = hit.normal;
                }

                TailSection wallBounce = new TailSection();
                wallBounce.Pos           = hit.point;
                wallBounce.distFromStart = Vector3.Distance(wallBounce.Pos, transform.position);
                wallBounce.wavePart      = Instantiate <GameObject>(wavePartPrefab);
                wallBounce.wavePart.GetComponent <WavePart>().myWave = this;
                wallBounce.wavePart.GetComponent <WavePart>().player = playerController;
                wallBounce.wavePart.tag   = "Projectile";
                wallBounce.wavePart.layer = LayerMask.NameToLayer("Projectile");
                myTail.Add(wallBounce);
            }
            else if (col.gameObject.CompareTag("Player"))
            {
                CollideWithPlayer(col);
            }

            else if (!col.CompareTag("Projectile") && !col.CompareTag("BounceableWall"))
            {
                //DestroySelf();
                despawningAgainstWall = true;
                //Destroy(gameObject);
            }
        }
    }
Beispiel #2
0
    public void InitializeTail()
    {
        TailSection tailEnd = new TailSection
        {
            Pos           = transform.position,
            direction     = transform.right,
            distFromStart = 0
        };

        tailEnd.wavePart = Instantiate <GameObject>(wavePartPrefab);
        tailEnd.wavePart.GetComponent <WavePart>().myWave = this;
        tailEnd.wavePart.tag   = "Projectile";
        tailEnd.wavePart.layer = LayerMask.NameToLayer("Projectile");
        tailEnd.wavePart.GetComponent <WavePart>().player = playerController;

        if (ignoringCollision)
        {
            playerController.itemsICantCollideWith.Add(tailEnd.wavePart.GetComponent <Collider2D>());
            Physics2D.IgnoreCollision(playerCollider, tailEnd.wavePart.GetComponent <Collider2D>(), true);
        }
        myTail.Add(tailEnd);
    }