private IEnumerator AfterBallMovedToNewPosition(Queue <GameObject> stepImages, BallBehavior oldBall, Point start, Point end) { var oldScore = Score; oldBall.StopJumping(); while (stepImages.Count > 0) { var stepToRemove = stepImages.Dequeue(); Destroy(stepToRemove); if (stepImages.Count > 0) { yield return(new WaitForSeconds(0.05f)); } } GameBoardManager.Instance.field[end.X, end.Y] = GameBoardManager.Instance.field[start.X, start.Y]; GameBoardManager.Instance.field[start.X, start.Y] = null; var deletedCount = RemoveCompletedLinesAndAddScore(); if (deletedCount > 0) { yield return(new WaitForSeconds(0.10f)); } else { for (int i = 0; i < 3; i++) { CreateBallInRandomPlace(NextBalls[i]); } InitNextBalls(); RemoveCompletedLinesAndAddScore(); } GameState = GameState.Gameplay; CheckGameover(); if (GameState == GameState.Gameplay && Score > EnemyScore && oldScore <= EnemyScore) { GameState = GameState.Animation; AudioManager.Instance.PlayWinMusicIfCan(() => { GameState = GameState.Gameplay; }); } }