Unity/3Match

[Unity] 6) Block Respawn

GiveZero 2023. 2. 20. 21:24

블럭을 제거하고 새로 만들것이 아닌, 빈칸을 위로 올려 내리는 방식으로 진행

    IEnumerator RespawnBlock()
    {
        //Debug.Log("RespawnBlock!!");
        bool DidRespawn = false;
        for(int i = 0; i < WIDTH; i++)
        {
            int basicCount = 0;
            for (int j = HEIGHT - 1; j > -1; j--)
            {
                if (board._blocks[i + j * HEIGHT].info.blockType == BlockType.EMPTY)
                {
                    board._blocks[i + j * HEIGHT].Respawn(HEIGHT + 1 - basicCount);
                    DidRespawn = true;
                }
                else if (board._blocks[i + j * HEIGHT].info.blockType == BlockType.BASIC || board._blocks[i + j * HEIGHT].info.blockType == BlockType.PIECE)
                    basicCount++;
            }
        }

        
        yield return new WaitForSeconds(1f);

        canSelect = true;
        if (DidRespawn)
        {
            canSelect = false;

            if (InitBoardMatch(BFSMode.Match))
            {
                while (isCoroutineAcitve)
                    yield return null;
                targetBlock = null;
                selectedBlock = null;
                StartCoroutine(BlockDownAndRespawn());
            }
        }
    }

일반 블럭은 basicCount로 더해가며, 빈칸이 얼마나 위로 올라갈 거리만큼을 구해주기 위해 사용\

 

가장 아래 빈칸은 HEIGHT 바로 위에 리스폰 되어야 하기 때문

 

이후, InitBoardMatch를 통해 리스폰이 된 후 새로 매치 되는 블럭이 있는지 검사하고,

 

없다면 다음 입력을 기다리게 된다.