public MinoModel(IMino mino, Color color) { Color = color; _blocksCoordinates = new ObservableCollection <Vector2Int>(); _mino = mino; InitializeRotateVariables(); }
public IMino SelectRandomMino() { IMino mino = _selectedMinos.Dequeue(); IMino newMino = SelectRandomItem(_minosData.Minos); AddToMinoQueue(newMino); return(mino); }
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); } }
private void AddToMinoQueue(IMino mino) { _selectedMinos.Enqueue(mino); MinoAdded?.Invoke(new List <IMino>(_selectedMinos)); }