Ejemplo n.º 1
0
 private void GameOver()
 {
     uiCamera.enabled = true;
     uiCamera.GetComponentInChildren <TextMeshProUGUI>().text = "GAME OVER\n[Dark Souls: you died music]";
     gameState   = GameState.EndGame;
     activePiece = null;
 }
Ejemplo n.º 2
0
        public bool IsOverlapping(TetrominoPieceView tetrominoPieceView, Vector3Int droppedPosition)
        {
            List <Vector3Int> localPoses         = tetrominoPieceView.CubesLocalPositions;
            Vector3Int        pivotLocalPosition = tetrominoPieceView.PivotLocalPosition;

            for (int i = 0; i < localPoses.Count; i++)
            {
                Vector3Int posInMatrix = new Vector3Int(droppedPosition.x + localPoses[i].x - pivotLocalPosition.x,
                                                        droppedPosition.y + localPoses[i].y - pivotLocalPosition.y,
                                                        droppedPosition.z + localPoses[i].z - pivotLocalPosition.z);

                //check if cube is in grace zone
                if (posInMatrix.y >= height)
                {
                    continue;
                }

                if (matrixState[posInMatrix.x, posInMatrix.y, posInMatrix.z] != null)
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 3
0
        private void GetPiece()
        {
            if (activePiece != null)
            {
                prevPieces.Add(activePiece);
            }

            activePiece = tetrominosDataBase.GetRandomPiece();
            activePiece.transform.position = spawnPosition;
            piecePosition = new Vector3Int(3, matrixDimensions.y + 1, 3);
        }
Ejemplo n.º 4
0
        public bool StackTetromino(TetrominoPieceView tetrominoPieceView, Vector3Int droppedPosition,
                                   out List <GameObject> cubesToShiftDown)
        {
            int possibleNewTop = 0;

            Vector3Int        tetrominoPosition = droppedPosition - tetrominoPieceView.PivotLocalPosition;
            HashSet <int>     layersStacked     = new HashSet <int>();
            List <int>        layersFilled      = new List <int>();
            List <Vector3Int> localPoses        = tetrominoPieceView.CubesLocalPositions;

            for (int i = 0; i < localPoses.Count; i++)
            {
                if (tetrominoPosition.y + localPoses[i].y >= height)
                {
                    overstackedCubes.Add(tetrominoPieceView.Cubes[i]);
                    possibleNewTop = height;
                    continue;
                }

                matrixState[tetrominoPosition.x + localPoses[i].x, tetrominoPosition.y + localPoses[i].y,
                            tetrominoPosition.z + localPoses[i].z] = tetrominoPieceView.Cubes[i];

                possibleNewTop = Mathf.Max(possibleNewTop, droppedPosition.y + localPoses[i].y);
                layersStacked.Add(tetrominoPosition.y + localPoses[i].y);
            }

            //check if layer cleared
            foreach (int height in layersStacked)
            {
                if (IsLayerFilled(height))
                {
                    layersFilled.Add(height);
                }
            }

            cubesToShiftDown = null;
            if (layersFilled.Count > 0)
            {
                cubesToShiftDown = RemoveLayers(layersFilled[0], layersFilled.Count);
            }


            topLayer = Mathf.Max(topLayer, possibleNewTop - layersFilled.Count);
            return(topLayer < height);
        }