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(); }