public void StartNextTurn()
    {
        if (isSingleplayer)
        {
            team = !team;
        }

        currentMana = GeneralManager.MAX_MANA;

        GeneralManager.GamePiece p1 = GeneralManager.gameBoard.GetPieceAtPosition(new Vector2Int(GeneralManager.MANA_BOOST_X1, GeneralManager.MANA_BOOST_Y1));
        GeneralManager.GamePiece p2 = GeneralManager.gameBoard.GetPieceAtPosition(new Vector2Int(GeneralManager.MANA_BOOST_X2, GeneralManager.MANA_BOOST_Y2));

        if (p1 != null && p1.team == team)
        {
            currentMana += 2;
        }

        if (p2 != null && p2.team == team)
        {
            currentMana += 2;
        }

        GeneralManager.NextTurn(team);
        UpdateBoardVisuals();
    }
    public void InvokeAction(byte actionID, Vector2Int actionToPos, int newID = -1)
    {
        int manaCost = 0;

        if (actionID == 0)
        {
            manaCost = GeneralManager.MANA_COST_0;
        }
        else if (actionID == 1)
        {
            GeneralManager.GamePiece myPiece = GeneralManager.gameBoard.GetPieceAtPosition(curSelected);

            if (myPiece.piece == GeneralManager.GamePieceEnum.Pawn)
            {
                manaCost = GeneralManager.MANA_COST_1_0;
            }
            else
            {
                manaCost = GeneralManager.MANA_COST_1_1;
            }
        }
        else if (actionID == 2)
        {
            if (newID == 1)
            {
                manaCost = GeneralManager.MANA_COST_2_1;
            }
            else if (newID == 2)
            {
                manaCost = GeneralManager.MANA_COST_2_2;
            }
            else if (newID == 3)
            {
                manaCost = GeneralManager.MANA_COST_2_3;
            }
            else if (newID == 4)
            {
                manaCost = GeneralManager.MANA_COST_2_4;
            }
        }
        else if (actionID == 3)
        {
            manaCost = GeneralManager.MANA_COST_3;
        }
        else if (actionID == 4)
        {
            manaCost = GeneralManager.MANA_COST_4;
        }
        else if (actionID == 5)
        {
            manaCost = GeneralManager.MANA_COST_5;
        }

        if (manaCost <= currentMana)
        {
            ClientAction newAction = new ClientAction();
            newAction.actionIndex   = actionID;
            newAction.actionFromPos = curSelected;
            newAction.actionToPos   = actionToPos;
            newAction.newID         = (byte)newID;

            // Temp
            GeneralManager.ExecuteAction(team, newAction);
            currentMana -= manaCost;
            UpdateBoardVisuals();
        }
    }
    public void EnableMenu(Vector2Int tileCoord, int mana)
    {
        menuEnabled = true;

        GeneralManager.GamePiece piece = GeneralManager.gameBoard.GetPieceAtPosition(tileCoord);

        if (piece == null || piece.team == ClientManager.team)
        {
            if (piece == null)
            {
                // Nothing on this tile
                if ((ClientManager.team && tileCoord.y == 0) || (!ClientManager.team && tileCoord.y == 7))
                {
                    spawnPawn.SetActive(true);
                }

                spawnPawn.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_0);
            }
            else
            {
                if (piece.piece == GeneralManager.GamePieceEnum.Pawn)
                {
                    upgradePawn1.SetActive(true);
                    upgradePawn2.SetActive(true);
                    upgradePawn3.SetActive(true);
                    upgradePawn4.SetActive(true);

                    upgradePawn1.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_2_1);
                    upgradePawn2.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_2_2);
                    upgradePawn3.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_2_3);
                    upgradePawn4.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_2_4);
                }
                else
                {
                    if (piece.piece != GeneralManager.GamePieceEnum.King)
                    {
                        upgradeAtt.SetActive(true);
                        upgradeDef.SetActive(true);

                        upgradeAtt.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_5);
                        upgradeDef.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_4);
                    }
                    else
                    {
                        healKing.SetActive(true);

                        healKing.GetComponent <Button>().interactable = (mana >= GeneralManager.MANA_COST_3);
                    }
                }

                // Possible movements
                int cost = (piece.piece == GeneralManager.GamePieceEnum.Pawn) ? GeneralManager.MANA_COST_1_0 : GeneralManager.MANA_COST_1_1;

                if (!piece.frozen && mana >= cost)
                {
                    // Movement indicator
                    currentPossibleMovements = GeneralManager.gameBoard.GetAvailableMovePositions(ClientManager.team, piece);

                    for (int y = 0; y < GeneralManager.GAME_BOARD_SIZE; y++)
                    {
                        for (int x = 0; x < GeneralManager.GAME_BOARD_SIZE; x++)
                        {
                            if (currentPossibleMovements[x, y])
                            {
                                GameObject indicator = GetPooledMoveIndicator();

                                if (indicator != null)
                                {
                                    indicator.transform.position = GeneralManager.GetTileCenterPos(new Vector2Int(x, y));
                                    indicator.SetActive(true);
                                }
                                else
                                {
                                    indicator = Instantiate(canMoveIndicatorPrefab, GeneralManager.GetTileCenterPos(new Vector2Int(x, y)), Quaternion.Euler(new Vector3(-90f, 0f, 0f)));
                                    canMoveIndicators.Add(indicator);
                                }

                                GeneralManager.GamePiece pAtPos = GeneralManager.gameBoard.GetPieceAtPosition(new Vector2Int(x, y));
                                if (pAtPos != null && pAtPos.team != ClientManager.team)
                                {
                                    indicator.GetComponent <MoveIndicator>().renderer.material = attackIndicatorMat;
                                }
                            }
                        }
                    }
                }
            }
        }
    }