예제 #1
0
        /// <summary>Parses the FNT file.</summary>
        private void ParseFNTFile()
        {
            StreamReader stream = new StreamReader(m_fntFile);
            string line;
            char[] separators = new char[] { ' ', '=' };
            while ((line = stream.ReadLine()) != null)
            {
                string[] tokens = line.Split(separators);
                if (tokens[0] == "info")
                {
                    // Get rendered size
                    for (int i = 1; i < tokens.Length; i++)
                    {
                        if (tokens[i] == "size")
                        {
                            m_charSet.RenderedSize = int.Parse(tokens[i + 1]);
                        }
                        if (tokens[i] == "face")
                        {
                            m_name = tokens[i + 1].Substring(1,tokens[i+1].Length-2);
                        }
                    }
                }
                else if (tokens[0] == "common")
                {
                    // Fill out BitmapCharacterSet fields
                    for (int i = 1; i < tokens.Length; i++)
                    {
                        if (tokens[i] == "lineHeight")
                        {
                            m_charSet.LineHeight = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "base")
                        {
                            m_charSet.Base = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "scaleW")
                        {
                            m_charSet.Width = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "scaleH")
                        {
                            m_charSet.Height = int.Parse(tokens[i + 1]);
                        }
                    }
                }
                else if (tokens[0] == "page")
                {
                    for (int i = 1; i < tokens.Length; i++)
                    {
                        if (tokens[i] == "file")
                        {
                            m_textureFile = DefaultValues.FontPath+tokens[i + 1].Substring(1, tokens[i + 1].Length - 2);
                        }
                    }
                }
                else if (tokens[0] == "char")
                {
                    // New BitmapCharacter
                    BitmapCharacter character = new BitmapCharacter();
                    char index ;
                    for (int i = 1; i < tokens.Length; i++)
                    {
                        if (tokens[i] == "id")
                        {
                            index = (char)int.Parse(tokens[i + 1]);
                            m_charSet.Characters[index] = character;
                        }
                        else if (tokens[i] == "x")
                        {
                            character.X = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "y")
                        {
                            character.Y = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "width")
                        {
                            character.Width = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "height")
                        {
                            character.Height = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "xoffset")
                        {
                            character.XOffset = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "yoffset")
                        {
                            character.YOffset = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "xadvance")
                        {
                            character.XAdvance = int.Parse(tokens[i + 1]);
                        }
                    }
                }
                else if (tokens[0] == "kerning")
                {
                    // Build kerning list
                    char index;
                    Kerning k = new Kerning();
                    for (int i = 1; i < tokens.Length; i++)
                    {
                        if (tokens[i] == "first")
                        {
                            index = (char)int.Parse(tokens[i + 1]);
                            ((BitmapCharacter)m_charSet.Characters[index]).KerningList.Add(k);
                        }
                        else if (tokens[i] == "second")
                        {
                            k.Second = int.Parse(tokens[i + 1]);
                        }
                        else if (tokens[i] == "amount")
                        {
                            k.Amount = int.Parse(tokens[i + 1]);
                        }
                    }

                }
            }
            stream.Close();
        }
예제 #2
0
 /// <summary>Search predicate used to find nodes in m_kerningList</summary>
 /// <param name="node">Current node.</param>
 /// <returns>true if the node's name matches the desired node name, false otherwise.</returns>
 private bool FindKerningNode(Kerning node)
 {
     return (node.Second == m_nextChar);
 }