// Função chamada quando esse elemento colidir com outro. O outro elemento, junto com informações da colisão, são encontrados no parâmetro 'colisor'
    void OnCollisionEnter2D(Collision2D colisor)
    {
        bool    colisãoInvalida = false;
        Vector2 normal          = Vector2.zero;

        foreach (ContactPoint2D c in colisor.contacts)
        {
            normal += c.normal;
        }
        normal /= colisor.contacts.Length;
        normal.Normalize();
        Plataforma       plataforma       = colisor.transform.GetComponent <Plataforma>();
        GeradorDeArestas geradorDeArestas = colisor.transform.GetComponent <GeradorDeArestas>();

        if (plataforma != null)         // Se existir o componente Plataforma no game object com o qual a bolinha colidiu...
        {
            if (normal != Vector2.up)
            {
                colisãoInvalida = true;
            }
            else
            {
                particulaFolhas.transform.position = plataforma.transform.position;
                particulaFolhas.Play();
            }
        }
        else if (geradorDeArestas != null)
        {
            if (normal == Vector2.up)
            {
                colisãoInvalida = true;
            }
        }
        else         // Caso cairmos no else, estamos colidindo com um bloco, pois é o que sobra
        {
            colisãoInvalida = false;
            Bounds         bordasColisor        = colisor.transform.GetComponent <SpriteRenderer>().bounds;
            Vector3        posiçãoDeCriação     = new Vector3(colisor.transform.position.x + bordasColisor.extents.x, colisor.transform.position.y - bordasColisor.extents.y, colisor.transform.position.z);
            GameObject     particulas           = (GameObject)Instantiate(particulaBlocos, posiçãoDeCriação, Quaternion.identity);
            ParticleSystem componenteParticulas = particulas.GetComponent <ParticleSystem>();
            Destroy(particulas, componenteParticulas.duration + componenteParticulas.startLifetime);
            Destroy(colisor.gameObject);
            GerenciadorDoGame.numeroDeBlocosDestruidos++;
        }
        if (!colisãoInvalida)
        {
            Direção = Vector2.Reflect(Direção, normal);
            Direção.Normalize();
        }
        else
        {
            GerenciadorDoGame.instancia.FinalizarJogo();
        }
    }
Beispiel #2
0
    // Função chamada quando esse elemento colidir com outro.
    // O outro elemento, junto com a info da colisão, são encontrados no 'collider'
    void OnCollisionEnter2D(Collision2D collision)
    {
        bool             invalidCollision = false;
        Vector2          normal           = collision.contacts[0].normal;
        Plataforma       plataform        = collision.transform.GetComponent <Plataforma>();
        GeradorDeArestas edgeGenerator    = collision.transform.GetComponent <GeradorDeArestas>();

        if (plataform != null) // Se existir o componente Plataforma no game object com o qual a bolinha colidiu
        {
            if (normal != Vector2.up)
            {
                invalidCollision = true;
            }
            else
            {
                leafsParticle.transform.position = collision.transform.position;
                leafsParticle.Play();
            }
        }
        else if (edgeGenerator != null)
        {
            if (normal == Vector2.up)
            {
                invalidCollision = true;
            }
        }
        else //Caso entre no else, estamos colidindo com um bloco
        {
            invalidCollision = false;
            Bounds  collisionBorders = collision.transform.GetComponent <SpriteRenderer>().bounds;
            Vector3 creationPosition = new Vector3(collision.transform.position.x + collisionBorders.extents.x,
                                                   collision.transform.position.y - collisionBorders.extents.y,
                                                   collision.transform.position.z);
            GameObject     particles         = (GameObject)Instantiate(blocksParticle, creationPosition, Quaternion.identity); //instancia particula na posição do colisor
            ParticleSystem particleComponent = particles.GetComponent <ParticleSystem>();

            Destroy(particles, particleComponent.duration + particleComponent.startLifetime);
            Destroy(collision.gameObject); //contém referência do objeto que a bolinha colidiu

            GerenciadorDoGame.numberOfBlocksDestroyed += 1;
        }

        if (invalidCollision)
        {
            GerenciadorDoGame.istance.endGame();
        }
        else
        {
            direction = Vector2.Reflect(direction, normal);
            direction.Normalize();
        }
    }
Beispiel #3
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        bool             invalidCollision = false;
        Vector2          normal           = collision.contacts[0].normal;
        Plataforma       plataform        = collision.transform.GetComponent <Plataforma>();
        GeradorDeArestas geradorDeArestas = collision.transform.GetComponent <GeradorDeArestas>();

        if (plataform != null) // se existir o componente plataforma no game object com o qual a bolinha colidiu...
        {
            if (normal != Vector2.up)
            {
                invalidCollision = true;
            }
            else
            {
                leavesParticle.transform.position = plataform.transform.position;
                leavesParticle.Play();
            }
        }

        else if (geradorDeArestas != null)
        {
            if (normal == Vector2.up)
            {
                invalidCollision = true;
            }
        }


        else // Caso caia aqui no else, estamos colidindo com um bloco, pois é o que sobra
        {
            invalidCollision = false;
            Bounds         colliderBorder    = collision.transform.GetComponent <SpriteRenderer>().bounds;
            Vector3        creationPosition  = new Vector3(collision.transform.position.x + colliderBorder.extents.x, collision.transform.position.y - colliderBorder.extents.y, collision.transform.position.z);
            GameObject     particle          = (GameObject)Instantiate(blockParticle, creationPosition, Quaternion.identity);
            ParticleSystem particleComponent = particle.GetComponent <ParticleSystem>();
            Destroy(particle, particleComponent.main.duration);
            Destroy(collision.gameObject);
            GerenciadorDoGame.destroyedNumberOfBlocks++;
        }
        if (!invalidCollision)
        {
            direction = Vector2.Reflect(direction, normal);
            direction.Normalize();
        }
        else
        {
            GerenciadorDoGame.instancia.finishGame();
        }
    }
Beispiel #4
0
    void OnCollisionEnter2D(Collision2D colisor)
    {
        bool    colisaoInvalida = false;
        Vector2 normal          = colisor.contacts[0].normal;

        Plataforma       plataforma       = colisor.transform.GetComponent <Plataforma>();
        GeradorDeArestas geradorDeArestas = colisor.transform.GetComponent <GeradorDeArestas>();

        if (plataforma != null)
        {
            if (normal != Vector2.up)
            {
                colisaoInvalida = true;
            }
        }

        else if (geradorDeArestas != null)
        {
            if (normal == Vector2.up)
            {
                colisaoInvalida = true;
            }
        }

        else //Caso cairmos no else, estamos colidindo com um bloco, pois é o que sobra
        {
            colisaoInvalida = false;
            Destroy(colisor.gameObject);
        }

        if (!colisaoInvalida)
        {
            Direcao = Vector2.Reflect(Direcao, normal);
            Direcao.Normalize();
        }
        else
        {
            GerenciadorDoGame.FinalizarJogo();
        }
    }
Beispiel #5
0
    void OnCollisionEnter2D(Collision2D colisor)
    {
        //Vector2 normal = colisor.contacts [0].normal;
        GeradorDeArestas geradorDeArestas = colisor.transform.GetComponent <GeradorDeArestas> ();

        // se acertar aresta
        if (geradorDeArestas != null)
        {
            //if(normal == Vector2.up){
            GameObject     particulas          = (GameObject)Instantiate(particulaTiro, transform.position, Quaternion.identity);
            ParticleSystem componenteParticula = particulas.GetComponent <ParticleSystem>();
            Destroy(particulas, componenteParticula.startLifetime + componenteParticula.duration);
            Destroy(this.gameObject);
        }        //else{
        // Direcao = Vector3.Reflect (Direcao, normal);
        //Direcao.Normalize ();
        //}
        //se acertar o morcego
        else
        {
            if (colisor.gameObject.tag.Equals("Finish"))
            {
                GameEngine.instancia.SomMatarMorcego();
                Camera.main.GetComponent <Texto>().MarcaPonto();
                GameObject     particulas          = (GameObject)Instantiate(particulaBat, transform.position, Quaternion.identity);
                ParticleSystem componenteParticula = particulas.GetComponent <ParticleSystem>();
                Destroy(particulas, componenteParticula.startLifetime + componenteParticula.duration);



                //GameObject objeto = (GameObject) GameObject.FindWithTag ("Text");
                //objeto.Text.text = "Pontos: "+GameEngine.pontuacao;

                Destroy(colisor.gameObject);
                Destroy(this.gameObject);
            }
        }
    }