// Update is called once per frame
    void Update()
    {
        CheckersBoard.CheckersManager manager = FindObjectOfType <CheckersBoard.CheckersManager>();
        if (Input.GetKeyDown(KeyCode.A))
        {
            assistMode = !assistMode;
            if (manager.turn == "Black")
            {
                timeLeft = (assistMode ? 1.0f : 0.0f);
            }
        }

        if (timeLeft > 0.0f)
        {
            timeLeft -= Time.deltaTime;
            if (timeLeft < 0.0f)
            {
                if (assistMode && manager.turn == "Black")
                {
                    Debug.Log("calling manager.playerMakeMove() for double-AI");
                    manager.playerMakeMove();
                }
                else if (manager.turn == "Red")
                {
                    Debug.Log("calling manager.aiMakeMove()");
                    manager.aiMakeMove();
                }
                if (assistMode)
                {
                    timeLeft = 1.0f;
                }
            }
        }
    }
    // Snap checker piece to nearest square
    void SnaptoSquare()
    {
        float   halfGrid           = grid_scale / 2f;
        Vector3 posRelativeToBoard = transform.position - gameBoard.transform.position;

        // If position relative to board is outside board, constrain to board
        if (posRelativeToBoard.x >= (grid_scale * 8f - halfGrid))
        {
            posRelativeToBoard.x = (grid_scale * 8f - halfGrid);
        }

        if (posRelativeToBoard.x <= (grid_scale * 0f + halfGrid))
        {
            posRelativeToBoard.x = (grid_scale * 0f + halfGrid);
        }

        if (posRelativeToBoard.z >= (grid_scale * 8f - halfGrid))
        {
            posRelativeToBoard.z = (grid_scale * 8f - halfGrid);
        }

        if (posRelativeToBoard.z <= (grid_scale * 0f + halfGrid))
        {
            posRelativeToBoard.z = (grid_scale * 0f + halfGrid);
        }

        Vector3 snappedPosition;

        int new_row    = 7 - Mathf.RoundToInt((posRelativeToBoard.z - halfGrid) / grid_scale);
        int new_column = Mathf.RoundToInt((posRelativeToBoard.x - halfGrid) / grid_scale);

        CheckersBoard.CheckersManager manager = FindObjectOfType <CheckersBoard.CheckersManager>();
        if (row != -1)
        {
            Debug.Log("checking: old_row = " + row + ", old_column = " + column + ", new_row = " + new_row + ", new_column = " + new_column);
            manager.SetMove(row, column, new_row, new_column);
            if (new_row < 0 || new_column < 0 || new_row > 7 || new_column > 7 || !manager.CheckMove())
            {
                Debug.Log("checkmove failed, snapping back");
                transform.position = gameBoard.transform.position + new Vector3(column * grid_scale + halfGrid,
                                                                                boardPosY + checkerHeight * 0.7f,
                                                                                (7 - row) * grid_scale + halfGrid);
                transform.rotation = Quaternion.identity;
                // ignore new_row, new_column
                return;
            }
            else
            {
                Debug.Log("checkmove succeeded");
            }
        }

        if (row != -1)
        {
            Debug.Log("calling MakeMove()");
            manager.MakeMove();
        }

        if (row == -1)
        {
            Debug.Log("initialization: row = " + new_row + " column = " + new_column);
        }
        else
        {
            Debug.Log("calling manager.aiMakeMove() after 0.7 seconds");
            timeLeft = 0.7f;
        }

        row    = new_row;
        column = new_column;

        snappedPosition = new Vector3(Mathf.Round((posRelativeToBoard.x - halfGrid) / grid_scale) * grid_scale + halfGrid,
                                      boardPosY + checkerHeight * .7f,
                                      Mathf.Round((posRelativeToBoard.z - halfGrid) / grid_scale) * grid_scale + halfGrid);
        snappedPosition += gameBoard.transform.position;

        transform.position = snappedPosition;

        transform.rotation = Quaternion.identity;
    }