private void RollBackLastTileOverBoard() { BoardPieceScript lastBoardPiecesWithTilesAbove = boardPiecesWithTilesAbove[boardPiecesWithTilesAbove.Count - 1]; lastBoardPiecesWithTilesAbove.ClearAboveTile(); boardPiecesWithTilesAbove.Remove(lastBoardPiecesWithTilesAbove); tilePreview.CurrentTileIndex -= 1; UpdateLastTilePlacedOverBox(); }
private void PlaceTileOverBoard(BoardPieceScript boardPiece) { try { TileColor colorName = GameManagerScript.Instance.GetTileColor(tilePreview.GetCurrentTileColor()); TileScript tile = Instantiate(tilePrefab, transform).GetComponent <TileScript>(); tile.InitTile(colorName, false, GameManagerScript.Instance.GetTilePoint(boardPiecesWithTilesAbove.Count)); boardPiece.PlaceTileOver(tile, tileSpawnOffset); boardPiecesWithTilesAbove.Add(boardPiece); UpdateLastTilePlacedOverBox(); tilePreview.CurrentTileIndex += 1; } catch { return; } }
private bool CheckTilePlacedOverAble(BoardPieceScript boardPiece) { bool isNextToLastTilePlacedOver = true; if (boardPiecesWithTilesAbove.Count > 0) { BoardPieceScript lastPlacedOverBoardPiece = boardPiecesWithTilesAbove[boardPiecesWithTilesAbove.Count - 1]; isNextToLastTilePlacedOver = (boardPiece.X > 0 && boardPieces[boardPiece.X - 1, boardPiece.Y] == lastPlacedOverBoardPiece) || (boardPiece.X < boardWidth - 1 && boardPieces[boardPiece.X + 1, boardPiece.Y] == lastPlacedOverBoardPiece) || (boardPiece.Y > 0 && boardPieces[boardPiece.X, boardPiece.Y - 1] == lastPlacedOverBoardPiece) || (boardPiece.Y < boardHeight - 1 && boardPieces[boardPiece.X, boardPiece.Y + 1] == lastPlacedOverBoardPiece); } return(isNextToLastTilePlacedOver); }
private void HandleInput() { if (Input.touchCount > 0) { switch (Input.GetTouch(0).phase) { case TouchPhase.Began: case TouchPhase.Moved: Vector3 worldPoint = Camera.main.ScreenToWorldPoint(Input.touches[0].position); if (lastTilePlacedOverBox.OverlapPoint(worldPoint)) { RollBackLastTileOverBoard(); } else { BoardPieceScript boardPiece = GetCurrentBoardPiece(worldPoint); if (boardPiece != null && CheckTilePlacedOverAble(boardPiece)) { PlaceTileOverBoard(boardPiece); } } break; case TouchPhase.Ended: if (boardPiecesWithTilesAbove.Count >= minClearCount || tilePreview.TilesLeft == 0) { PlaceTilesOnBoard(); } else { ResetTilesOverBoard(); } break; } } if (Input.GetMouseButton(0)) { Vector3 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (lastTilePlacedOverBox.OverlapPoint(worldPoint)) { RollBackLastTileOverBoard(); } else { BoardPieceScript boardPiece = GetCurrentBoardPiece(worldPoint); if (boardPiece != null && CheckTilePlacedOverAble(boardPiece)) { PlaceTileOverBoard(boardPiece); } } } else if (Input.GetMouseButtonUp(0)) { if (boardPiecesWithTilesAbove.Count >= minClearCount || tilePreview.TilesLeft == 0) { PlaceTilesOnBoard(); } else { ResetTilesOverBoard(); } } else if (Input.GetMouseButton(2)) { ResetTilesOverBoard(); } }