void EndTurn()
    {
        mEndingTurn = true;

        // save current state of the blocks into our match data
        mMatchData.ClearBlockDescs();
        foreach (GameObject o in GetAllGameBlocks())
        {
            char mark = o.tag == "MarkX" ? MatchData.MarkX : MatchData.MarkO;
            mMatchData.AddBlockDesc(mark, o.transform.position, o.transform.rotation);
        }

        // recalculate who owns each mark
        RecalculateMarks();
        UpdateLargeMarks();

        // do we have a winner?
        if (mMatchData.HasWinner)
        {
            FinishMatch();
        }
        else
        {
            TakeTurn();
        }
    }