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를 통해 리스폰이 된 후 새로 매치 되는 블럭이 있는지 검사하고,
없다면 다음 입력을 기다리게 된다.