/// <summary>
        /// Given some text we want to draw (which may not already be set into a PreparedPagedText object),
        /// draw it to the screen at the given logical position.
        /// </summary>
        public static void DrawPreparedText(BaseGameModel model, Position logicalPosition, String fullText, Graphics g, Font font,
                                            Boolean drawBorder, Pen penBorder, Int32 edgeBuffer, ref PreparedPagedText prepText)
        {
            Position displayPos = model.Camera.MapLogicalToDisplay(logicalPosition, true);

            if (drawBorder)
            {
                Drawing2D.DrawRectBorder(g, penBorder, displayPos);
            }
            if (prepText == null)
            {
                prepText = DrawText.PrepareTextForDisplayInBox(fullText, g,
                                                               font, (Int32)displayPos.Width, (Int32)displayPos.Height, (Int32)(edgeBuffer * model.Camera.CurrentScale));
            }

            List <String> preparedOutputText = prepText.GetCurrentPageText();
            Int32         currentLineY       = 0;

            for (Int32 currentLine = 0; currentLine < preparedOutputText.Count; currentLine++)
            {
                String   textToDraw     = preparedOutputText[currentLine];
                Position displayTextPos = model.Camera.TopLeftAlignTextWithinRect(logicalPosition, textToDraw, font, g, ignoreCameraPosition: true);
                g.DrawString(textToDraw, font, Brushes.White, (Single)displayTextPos.UpperLeftX, (Single)displayTextPos.UpperLeftY + currentLineY);
                currentLineY += prepText.LineHeight;
            }
        }