public SpriteFont GetBestFont(float size, out float scale)
{
KeyValuePair<int, SpriteFont>? smallestBiggerFont = null, biggestSmallerFont = null;
foreach (KeyValuePair<int, SpriteFont> kvp in _baseFonts)
{
if (kvp.Key > size && (!smallestBiggerFont.HasValue || kvp.Key < smallestBiggerFont.Value.Key))
{
smallestBiggerFont = kvp;
}
else if (kvp.Key < size && (!biggestSmallerFont.HasValue || kvp.Key > biggestSmallerFont.Value.Key))
{
biggestSmallerFont = kvp;
}
else if (kvp.Key == size)
{
scale = 1.0f;
//Console.WriteLine("MetaFont returning {0} as best font for size {1} (ex)",
// kvp.Key, size);
return kvp.Value;
}
}
if (smallestBiggerFont.HasValue)
{
scale = size / smallestBiggerFont.Value.Key;
//Console.WriteLine("MetaFont returning {0} @ {1}x as best font for size {2} (sb)",
// smallestBiggerFont.Value.Key, scale, size);
return smallestBiggerFont.Value.Value;
}
else
{
scale = size / biggestSmallerFont.Value.Key;
//Console.WriteLine("MetaFont returning {0} @ {1}x as best font for size {2} (bs)",
// biggestSmallerFont.Value.Key, scale, size);
return biggestSmallerFont.Value.Value;
}
}