public MessageFormatter(IMessage message, SpriteFont font, WindowTexture selectedAnswerWindowTexture, float maximumLineWidth)
        {
            message.ThrowIfNull("message");
            font.ThrowIfNull("font");
            selectedAnswerWindowTexture.ThrowIfNull("selectedAnswerWindowTexture");

            _font = font;
            _selectedAnswerWindowTexture = selectedAnswerWindowTexture;
            _maximumLineWidth = maximumLineWidth;
            _spaceWord = new MessageTextWord(" ", font.MeasureString(" "), false);

            ProcessMessageParts(message);
        }
        public MessageFormatter(IMessage message, SpriteFont font, WindowTexture selectedAnswerWindowTexture, float maximumLineWidth)
        {
            message.ThrowIfNull("message");
            font.ThrowIfNull("font");
            selectedAnswerWindowTexture.ThrowIfNull("selectedAnswerWindowTexture");

            _font = font;
            _selectedAnswerWindowTexture = selectedAnswerWindowTexture;
            _maximumLineWidth            = maximumLineWidth;
            _spaceWord = new MessageTextWord(" ", font.MeasureString(" "), false);

            ProcessMessageParts(message);
        }
        private void RenderWords(
            RendererParameters parameters,
            SpriteFont font,
            Matrix transformMatrix,
            int lineIndex,
            IList <MessageTextWord> words,
            Color shadowColor,
            ref Vector2 position,
            ref Color textColor)
        {
            parameters.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.None, new ScissoringRasterizerState(), null, transformMatrix);

            MessageTextAlignment alignment = _formatter.GetAlignmentByLine(lineIndex);
            Vector2 lineSize = _formatter.GetLineSizeByLine(lineIndex);

            if (alignment == MessageTextAlignment.Center)
            {
                position.X += (Window.AbsoluteClientRectangle.Width - lineSize.X) / 2;
            }

            for (int wordIndex = 0; wordIndex < words.Count; wordIndex++)
            {
                MessageTextWord     word = words[wordIndex];
                Engine.Common.Color color;

                if (_formatter.TryGetColorByWordCoordinate(new Coordinate(wordIndex, lineIndex), out color))
                {
                    textColor = color.ToXnaColor() * Alpha;
                }
                if (word.PrependSpace)
                {
                    position.X += _formatter.SpaceWord.Size.X;
                }

                parameters.SpriteBatch.DrawStringWithShadow(font, word.Text, position.Round(), textColor, shadowColor, Vector2.One);
                position.X += word.Size.X;
            }

            position.X  = Window.AbsoluteClientRectangle.X;
            position.Y += lineSize.Y;

            parameters.SpriteBatch.End();
        }