private void DrawTextSprite(SpriteBatch sb, TextSprite sprite, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects) { sprite.SetColor(color); sprite.Transform(position, scale, origin, Vector2.Zero, sprite.NaturalSize, rotation, effects, ref sb.currentMatrix); sb.GraphicsDevice.DrawSprite(sprite); }
private TextSprite CreateSprite(object key, string renderedStringBuilder, int frameNumber, bool cached, GraphicsDevice device) { // First try to find an existing sprite to reuse for(int i = 0; i < sprites.Count; i++) { // If it was last used before the immediately previous frame, assume it is free to use: if(sprites[i].cached == cached && sprites[i].foundOnFrame < frameNumber-1) { TextSpriteInstance instance = sprites[i]; instance.key = key; instance.renderedStringBuilder = renderedStringBuilder; instance.foundOnFrame = frameNumber; sprites[i] = instance; return instance.value; } } // If no sprite to reuse was found... TextSprite sprite = new TextSprite(this, cached); sprites.Add(new TextSpriteInstance() { key = key, value = sprite, renderedStringBuilder = renderedStringBuilder, foundOnFrame = frameNumber, cached = cached }); device.AddSprite(sprite); return sprite; }