public SpriteFontMSDF(string name, byte[] data, int size, float scale, SheetBuilder builder) { Mfont = new FontMSDF(); Mfont.LoadFontTexturesAsPng(name); if (builder.Type != SheetType.BGRA) { throw new ArgumentException("The sheet builder must create BGRA sheets.", "builder"); } deviceScale = scale; this.size = size; this.builder = builder; Console.WriteLine("Font {0} : {1}", name, size); font = Game.Renderer.CreateFont(data); // FreeTypeFont библиотека создает IFont структуру, где есть байтовое представление символа. font.SetSize(size, deviceScale); glyphs = new Cache <Pair <char, Color>, GlyphInfo>(CreateGlyph, Pair <char, Color> .EqualityComparer); // PERF: Cache these delegates for Measure calls. Func <char, float> characterWidth = character => glyphs[Pair.New(character, Color.White)].Advance; // это одна функция с аргументом character, а телом из glyphs[Pair.New(character, Color.White)].Advance lineWidth = line => line.Sum(characterWidth) / deviceScale; // тоже функция как и characterWidth //if (size <= 24) // пытается, подобрать size? чтобы в строку влезло 24 символа. PrecacheColor(Color.White, name); TopOffset = size - font.Height; }
public void SetScale(float scale) { deviceScale = scale; font.SetSize(size, scale); glyphs.Clear(); TopOffset = size - font.Height; }