Exemplo n.º 1
0
        private Vector2Int GetTetraminoStartPosition(Tetramino newTetramino)
        {
            // Tetramino spawns at top center of grid, in two hidden spawn rows, at center,
            // shifted to left if size.x of tetramino's bounding box is uneven
            int startPositionX = grid.Size.x / 2 - (newTetramino.Size.x / 2 + newTetramino.Size.x % 2);
            // Tetraminos processing starts from top left corner of their bounding box
            Vector2Int startPosition = new Vector2Int(startPositionX, grid.Size.y - 1);

            return(startPosition);
        }
Exemplo n.º 2
0
            public List <Vector2Int> GetMinosGridPositions()
            {
                var result = new List <Vector2Int>();

                foreach (var relativeMinoCoordinate in Tetramino.GetMinosCoordinates())
                {
                    int gridX = Position.x + Mathf.RoundToInt(relativeMinoCoordinate.x);
                    int gridY = Position.y - Mathf.RoundToInt(relativeMinoCoordinate.y);
                    result.Add(new Vector2Int(gridX, gridY));
                }
                return(result);
            }
Exemplo n.º 3
0
        public void Spawn(Tetramino newTetramino)
        {
            if (currentTetramino != null)
            {
                throw new InvalidOperationException("Attempt to spawn new tetramino while previous one still in active state.");
            }
            Vector2Int startPosition    = GetTetraminoStartPosition(newTetramino);
            var        newTetraminoInfo = new TetraminoGridData(newTetramino, startPosition);

            if (ValidateTetramino(newTetraminoInfo, MinoInValidPosition))
            {
                ApplyNewTetramino(newTetraminoInfo);
            }
            else
            {
                OnSpawnFailed?.Invoke();
            }
        }
Exemplo n.º 4
0
 public TetraminoGridData(Tetramino tetramino, Vector2Int position)
 {
     Tetramino = tetramino;
     Position  = position;
     Minos     = new List <Mino>();
 }