Ejemplo n.º 1
0
Archivo: Game.cs Proyecto: void22/2048
        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();
        }