public IEnumerator UpdateCoroutine(GameManager.Direction direction) { _gameManager.State = GameManager.GameState.MovingTiles; ResetMergedFlags(); switch (direction) { case GameManager.Direction.Left: for (int i = 0; i < _rows.Count; i++) { _gameManager.StartCoroutine(ShiftLeftCoroutine(_rows[i], i)); } break; case GameManager.Direction.Right: for (int i = 0; i < _rows.Count; i++) { _gameManager.StartCoroutine(ShiftRightCoroutine(_rows[i], i)); } break; case GameManager.Direction.Up: for (int i = 0; i < _columns.Count; i++) { _gameManager.StartCoroutine(ShiftLeftCoroutine(_columns[i], i)); } break; case GameManager.Direction.Down: for (int i = 0; i < _columns.Count; i++) { _gameManager.StartCoroutine(ShiftRightCoroutine(_columns[i], i)); } break; } while (!(_moveFinished[0] && _moveFinished[1] && _moveFinished[2] && _moveFinished[3])) { yield return(null); } if (_tileMoved) { UpdateEmptyList(); SetRandomTile(); UpdateTiles(); if (!IsValidMoveExist()) { GameOver(); } } _gameManager.State = GameManager.GameState.WaitingForInput; _gameManager.StopAllCoroutines(); }