Exemplo n.º 1
0
            static void ParseChar(ReadOnlySpan <string> values, ref BitmapChar character)
            {
                foreach (var valuePair in values)
                {
                    var splitValues = valuePair.Split("=", StringSplitOptions.TrimEntries);
                    var key         = splitValues[0];
                    var value       = splitValues[1];
                    switch (key)
                    {
                    case "id": character.Id = int.Parse(value); break;

                    case "x": character.X = int.Parse(value); break;

                    case "y": character.Y = int.Parse(value); break;

                    case "width": character.Width = int.Parse(value); break;

                    case "height": character.Height = int.Parse(value); break;

                    case "xoffset": character.XOffset = int.Parse(value); break;

                    case "yoffset": character.YOffset = int.Parse(value); break;

                    case "xadvance": character.XAdvance = int.Parse(value); break;

                    case "page": character.Page = int.Parse(value); break;

                    case "chnl": character.Channel = int.Parse(value); break;
                    }
                }
            }
Exemplo n.º 2
0
        public static BitmapFont ReadFromFile(string path)
        {
            var info   = new Info();
            var common = new CommonSettings();
            var page   = new Page();

            BitmapChar[] chars        = null;
            Kerning[]    kernings     = null;
            var          charIndex    = 0;
            var          kerningIndex = 0;

            using var file = File.OpenText(path);

            string line;

            while ((line = file.ReadLine()) != null)
            {
                var values = line.SplitQuotedStrings(' ');
                if (values.Length == 0)
                {
                    continue;
                }

                var valueSpan = new ReadOnlySpan <string>(values, 1, values.Length - 1);
                switch (values[0])
                {
                case "info":
                    ParseInfo(valueSpan, ref info);
                    break;

                case "common":
                    ParseCommon(valueSpan, ref common);
                    break;

                case "page":
                    ParsePage(valueSpan, ref page);
                    break;

                case "chars":
                    chars = new BitmapChar[int.Parse(valueSpan[0].Split("=")[1])];
                    break;

                case "kernings":
                    kernings = new Kerning[int.Parse(valueSpan[0].Split("=")[1])];
                    break;

                case "char":
                    if (chars == null)
                    {
                        throw new InvalidOperationException("Chars has not been initialized, corrupt file");
                    }
                    ParseChar(valueSpan, ref chars[charIndex++]);
                    break;

                case "kerning":
                    if (kernings == null)
                    {
                        throw new InvalidOperationException("Kernings has not been initialized, corrupt file");
                    }
                    ParseKerning(valueSpan, ref kernings[kerningIndex++]);
                    break;
                }
            }

            // Only supports a single bitmap
            return(new BitmapFont
            {
                Info = info,
                Common = common,
                Chars = chars,
                Page = page,
                Kernings = kernings,
                Bitmap = File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(path), page.File))
            });