public void MoveBrush(Swipe swipe)
        {
            Vector2Int newCoords = grid.GetCellXZBySwipe(currentBrush.currentCoords.x, currentBrush.currentCoords.y, swipe);

            if (newCoords != new Vector2Int(-1, -1))
            {
                SoundManager.Instance.PlayFx(FxType.BrushMove);
                Vector3 finalPos = grid.GetCellWorldPositionBySwipe(currentBrush.currentCoords.x, currentBrush.currentCoords.y, swipe);

                if (!ConnectionAlreadyDone(currentBrush.currentCoords, newCoords, true))
                {
                    inProgressPattern.Add(new ConnectedLine(currentBrush.currentCoords, newCoords));
                    cells[currentBrush.currentCoords.x, currentBrush.currentCoords.y].CellCenterPaint.gameObject.SetActive(true);
                    cells[currentBrush.currentCoords.x, currentBrush.currentCoords.y].CellCenterPaint.material.color = colors[GameManager.currentLevel % colors.Length];
                    LinePaintScript linePaint = Instantiate(linePaintPrefab, new Vector3(0, 0.2f, 0), Quaternion.identity);
                    linePaint.SetRendererPosition(currentBrush.transform.position + new Vector3(0, 0.2f, 0),
                                                  finalPos + new Vector3(0, 0.2f, 0), colors[GameManager.currentLevel % colors.Length]);
                    linePaint.SetConnectedCoords(currentBrush.currentCoords, newCoords);
                    connectedLinePaints.Add(linePaint);
                }
                else
                {
                    RemoveConnectLinePaint(currentBrush.currentCoords, newCoords);
                }

                if (leveldataArray[GameManager.currentLevel].completePattern.Count <= inProgressPattern.Count)
                {
                    //Check for win
                    if (IsLevelComplete())
                    {
                        SoundManager.Instance.PlayFx(FxType.Victory);
                        GameManager.gameStatus = GameStatus.Complete;
                        GameManager.currentLevel++;
                        if (GameManager.currentLevel > leveldataArray.Length - 1)
                        {
                            GameManager.currentLevel = 0;
                        }
                        PlayerPrefs.SetInt("CurrentLevel", GameManager.currentLevel);
                        GameManager.totalDiamonds += 15;
                        PlayerPrefs.SetInt("TotalDiamonds", GameManager.totalDiamonds);

                        uIManager.LevelCompleted();
                    }
                }

                currentBrush.transform.position = finalPos;
                currentBrush.currentCoords      = newCoords;
            }
        }
        private void CompleteBoard()
        {
            Vector3 offset        = new Vector3((leveldataArray[GameManager.currentLevel].width - _cellSize) / 2, 5f, (leveldataArray[GameManager.currentLevel].height - _cellSize) / 2);
            Vector3 gridOriginPos = solutionCamera.transform.position - offset;

            solutionCamera.ZoomOrthographicSizeCamera(leveldataArray[GameManager.currentLevel].width, leveldataArray[GameManager.currentLevel].height);

            for (int i = 0; i < leveldataArray[GameManager.currentLevel].completePattern.Count; i++)
            {
                Vector3         startPos  = gridOriginPos + grid.GetCellWorldPosition(leveldataArray[GameManager.currentLevel].completePattern[i].startCoord);
                Vector3         endPos    = gridOriginPos + grid.GetCellWorldPosition(leveldataArray[GameManager.currentLevel].completePattern[i].endCoord);
                LinePaintScript linePaint = Instantiate(linePaintPrefab, new Vector3(0, 0.2f, 0), Quaternion.identity);
                linePaint.SetRendererPosition(startPos + new Vector3(0, 0.2f, 0),
                                              endPos + new Vector3(0, 0.2f, 0), colors[GameManager.currentLevel % colors.Length]);
            }
        }
        private void RemoveConnectLinePaint(Vector2Int startCoord, Vector2Int endCoord)
        {
            for (int i = 0; i < connectedLinePaints.Count; i++)
            {
                if (connectedLinePaints[i].StartCoord == startCoord && connectedLinePaints[i].EndCoord == endCoord ||
                    connectedLinePaints[i].EndCoord == startCoord && connectedLinePaints[i].StartCoord == endCoord)
                {
                    LinePaintScript line = connectedLinePaints[i];
                    connectedLinePaints.RemoveAt(i);
                    Destroy(line.gameObject);

                    cells[endCoord.x, endCoord.y].CellCenterPaint.gameObject.SetActive(false);
                    return;
                }
            }
        }