コード例 #1
0
    /// ------- Funções de colisão e merge do bloco ----------

    private void OnCollisionEnter2D(Collision2D collision)
    {
        // verifica se foi atingido pelo tiro
        // se for um tiro de mesmo valor realiza o merge
        // caso contrário ignora a colisão com o tiro
        if (collision.gameObject.CompareTag("Tirinho"))
        {
            // avalia se o tiro tem o componente requerido
            if (collision.gameObject.GetComponent <BulletInstance>())
            {
                int bulletValue = collision.gameObject.GetComponent <BulletInstance>().getBulletValue();
                int blockValue  = blockData.getValue();

                // Avalia se o tiro possui o mesmo valor que o bloco e se o bloco já não está em seu ultimo valor
                // Se o valor do bloco for diferente o tiro é rebatido e ignorado
                // Se o valor do bloco for igual ou maior que o máximo possivel ele ignora pois o bloco vai se destrui sozinho em pouco tempo
                // Caso contrário dos dois, realiza o merge
                if ((bulletValue == blockValue) && (blockValue < blockData.getMaxPosibleValue()))
                {
                    // seta o novo valor
                    int newValue = blockValue * 2;
                    updateBlockValue(newValue);

                    // Faz o merge na corotina esperqando a animação de mudança de cor
                    StartCoroutine(waitAnimationToMerge());

                    // BIG HUGE OBS: ----------------------------------------------------------------!
                    // o outro código estava tentando repetir as iterações do merge por aqui (coisa nada saudavel)
                    // o objetivo é tentar deixar o merge recursivo pra caralho
                    //
                    // Outra coisa que esse código estava fazendo era verificar se o bloco estava sozinho na fileira
                    // Aqui deve ficar somente o codigo que faz o bloco sumir
                    // que deve ser chamado por onde a grid estará vericando se a linha está sozinha ou não
                    //
                    // o merge também está funcionando em funcao do bloco
                    // o ideal é ele funcionar em funcao da linha do bloco com referencia ao bloco atingido


                    // destroí o tiro
                    Destroy(collision.gameObject);

                    // Respawna o player em outra posição (avaliar se é bom isso ou não) -------- !
                    //Player.gameObject.GetComponent<SpawnBall>().respawnBall(this.transform.position.x);
                }
            }
            else
            {
                Debug.LogError("Falta componente BulletInstance no tiro");
            }
        }
    }