IEnumerator PieceSpawn() { StopCoroutine(routineGravity); activeShape = spawnerControler.Spawn().GetComponent <ShapeControler>(); StartCoroutine(routineGravity); yield return(new WaitUntil(IsShapeEnded)); activeShape = null; StopCoroutine(routineGravity); pieceCounter++; if (pieceCounter == numberOfDrawingPieces && gameState == GameState.DRAWING) { pieceCounter = 0; FinishDrawing(); StopCoroutine(routineSpawn); } else if (pieceCounter == numberOfBuildingPieces && gameState == GameState.BUILDING) { pieceCounter = 0; FinishBuilding(); StopCoroutine(routineSpawn); } else { routineSpawn = PieceSpawn(); StartCoroutine(routineSpawn); } }