Exemple #1
0
        public MinoModel(IMino mino, Color color)
        {
            Color = color;
            _blocksCoordinates = new ObservableCollection <Vector2Int>();
            _mino = mino;

            InitializeRotateVariables();
        }
Exemple #2
0
        public IMino SelectRandomMino()
        {
            IMino mino    = _selectedMinos.Dequeue();
            IMino newMino = SelectRandomItem(_minosData.Minos);

            AddToMinoQueue(newMino);
            return(mino);
        }
Exemple #3
0
 private void InitializeSelectedMinos()
 {
     for (int c = 0; c < _minosData.AmountMinosToShow; c++)
     {
         IMino mino = SelectRandomItem(_minosData.Minos);
         _selectedMinos.Enqueue(mino);
     }
     MinoAdded?.Invoke(new List <IMino>(_selectedMinos));
 }
        private void Start()
        {
            Pause.StartTime();
            _scoreModel.ScoreChange += _scoreView.DisplayScore;
            _fieldModel.CellChanged += ChangeStaticSprite;
            _minoSelector.MinoAdded += OnMinoAddedInSelector;
            IMino newMino = _minoSelector.SelectRandomMino();

            SpawnMino(newMino);
        }
        private void SpawnMino(IMino mino)
        {
            MinoModel previousMinoModel = _minoModel;
            Color     color             = _minoSelector.SelectRandomColor();

            _minoModel = new MinoModel(mino, color);
            _minoModel.BlocksCoordinates.CollectionChanged += MoveSprite;
            _minoModel.InitializeBlockCoordinates(_spawnCell);
            if (previousMinoModel != null)
            {
                previousMinoModel.BlocksCoordinates.CollectionChanged -= MoveSprite;
            }
        }
        private bool IsGameOver(IMino mino)
        {
            foreach (Vector2Int localCoordinate in mino.BlocksLocalCoordinates[MinoSide.Bottom])
            {
                Vector2Int coordinate  = localCoordinate + _spawnCell;
                bool       isCellEmpty = _fieldModel.IsCellEmpty((uint)coordinate.x, (uint)coordinate.y);
                if (!isCellEmpty)
                {
                    return(true);
                }
            }

            return(false);
        }
 public void SpawnMinos(IList <IMino> minos)
 {
     ClearView();
     for (int minoNum = 0; minoNum < _minosData.AmountMinosToShow; minoNum++)
     {
         IMino mino = minos[minoNum];
         foreach (Vector2Int coordinate in mino.BlocksLocalCoordinates[MinoSide.Bottom])
         {
             Vector2Int     blockCoordinate = coordinate + mino.AligmentValue;
             SpriteRenderer block           = GetBlock();
             block.transform.localPosition = CalculateCellPosition(blockCoordinate.x, blockCoordinate.y, _startPositions[minoNum]);
             _showedBlocks.Enqueue(block);
         }
     }
 }
        private void UpdateGameState()
        {
            _gridView.ClearMoveBlocks();
            _fieldModel.AddMino(_minoModel.BlocksCoordinates, _minoModel.Color);
            List <int> deleteLineIndexes = _fieldModel.FindFilledHorizontalLines();

            if (deleteLineIndexes.Count > 0)
            {
                _scoreModel.AddScore(deleteLineIndexes.Count);
                _fieldModel.MoveLinesDown(deleteLineIndexes);
            }

            IMino newMino = _minoSelector.SelectRandomMino();

            if (IsGameOver(newMino))
            {
                StartGameOver();
            }
            else
            {
                SpawnMino(newMino);
            }
        }
Exemple #9
0
 private void AddToMinoQueue(IMino mino)
 {
     _selectedMinos.Enqueue(mino);
     MinoAdded?.Invoke(new List <IMino>(_selectedMinos));
 }