private void GameOver() { uiCamera.enabled = true; uiCamera.GetComponentInChildren <TextMeshProUGUI>().text = "GAME OVER\n[Dark Souls: you died music]"; gameState = GameState.EndGame; activePiece = null; }
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); }
private void GetPiece() { if (activePiece != null) { prevPieces.Add(activePiece); } activePiece = tetrominosDataBase.GetRandomPiece(); activePiece.transform.position = spawnPosition; piecePosition = new Vector3Int(3, matrixDimensions.y + 1, 3); }
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); }