private static string GetData(params string[] name)
        {
            ConfigLevel <string, string> tmp = mConfig;

            bool found = true;

            for (int i = 0; i < name.Length - 1; ++i)
            {
                if (name[i] == "")
                {
                    break;
                }

                if (tmp.ContainsLevel(name[i]))
                {
                    tmp = tmp.GetLevel(name[i]);
                }
                else
                {
                    found = false;
                    break;
                }
            }

            if (found)
            {
                return(tmp.Get(name[name.Length - 1]));
            }
            else
            {
                return("");
            }
        }
        public static string[] GetSubLevels(params string[] name)
        {
            ConfigLevel <string, string> tmp = mConfig;

            bool found = true;

            for (int i = 0; i < name.Length; ++i)
            {
                if (name[i] == "")
                {
                    break;
                }

                if (tmp.ContainsLevel(name[i]))
                {
                    tmp = tmp.GetLevel(name[i]);
                }
                else
                {
                    found = false;
                    break;
                }
            }

            if (found)
            {
                return(tmp.GetSubLevelKeys());
            }
            else
            {
                return(new string[0]);
            }
        }
        public static Color GetColor(params string[] name)
        {
            Color def = Color.White;

            ConfigLevel <string, string> tmp = mConfig;

            bool found = true;

            for (int i = 0; i < name.Length - 1; ++i)
            {
                if (name[i] == "")
                {
                    break;
                }

                if (tmp.ContainsLevel(name[i]))
                {
                    tmp = tmp.GetLevel(name[i]);
                }
                else
                {
                    found = false;
                    break;
                }
            }

            if (found)
            {
                if (tmp.ContainsKey(name[name.Length - 1]))
                {
                    Color    output;
                    string[] parts = tmp.Get(name[name.Length - 1]).Split(space);

                    if (parts.Length == 3)
                    {
                        if (Util.TryParseColor(parts[0], parts[1], parts[2], "255", out output))
                        {
                            return(output);
                        }
                        else if (parts.Length >= 4)
                        {
                            if (Util.TryParseColor(parts[0], parts[1], parts[2], parts[3], out output))
                            {
                                return(output);
                            }
                        }
                    }
                }
            }

            return(def);
        }
        public static Vector4 GetVector4(params string[] name)
        {
            Vector4 def = Vector4.Zero;

            ConfigLevel <string, string> tmp = mConfig;

            bool found = true;

            for (int i = 0; i < name.Length - 1; ++i)
            {
                if (name[i] == "")
                {
                    break;
                }

                if (tmp.ContainsLevel(name[i]))
                {
                    tmp = tmp.GetLevel(name[i]);
                }
                else
                {
                    found = false;
                    break;
                }
            }

            if (found)
            {
                if (tmp.ContainsKey(name[name.Length - 1]))
                {
                    Vector4  output;
                    string[] parts = tmp.Get(name[name.Length - 1]).Split(space);

                    if (parts.Length >= 4)
                    {
                        if (Util.TryParseVector4(parts[0], parts[1], parts[2], parts[3], out output))
                        {
                            return(output);
                        }
                    }
                }
            }

            return(def);
        }
        public static float GetFloat(params string[] name)
        {
            float def = 0.0f;

            ConfigLevel <string, string> tmp = mConfig;

            bool found = true;

            for (int i = 0; i < name.Length - 1; ++i)
            {
                if (name[i] == "")
                {
                    break;
                }

                if (tmp.ContainsLevel(name[i]))
                {
                    tmp = tmp.GetLevel(name[i]);
                }
                else
                {
                    found = false;
                    break;
                }
            }

            if (found)
            {
                if (tmp.ContainsKey(name[name.Length - 1]))
                {
                    float  output;
                    string str = tmp.Get(name[name.Length - 1]);

                    if (Util.TryParseFloat(str, out output))
                    {
                        return(output);
                    }
                }
            }

            return(def);
        }
        public static void ParseLine(string line)
        {
            string[] parts = Util.Split(line, space, 2);

            if (parts.Length < 2)
            {
                return;
            }

            string[] levels = parts[0].Split(slash);

            ConfigLevel <string, string> tmp = mConfig;

            for (int i = 0; i < levels.Length - 1; ++i)
            {
                if (levels[i] == "")
                {
                    break;
                }

                if (!tmp.ContainsLevel(levels[i]))
                {
                    tmp.AddLevel(levels[i]);
                }

                tmp = tmp.GetLevel(levels[i]);
            }

            if (parts[0].Contains(':'))
            {
                tmp.AddToList(levels[levels.Length - 1].Substring(0, levels[levels.Length - 1].Length - 1), parts[1]);
            }
            else
            {
                tmp.Add(levels[levels.Length - 1], parts[1]);
            }
        }
 public Config()
 {
     mConfig = new ConfigLevel <string, string>();
     LoadContent();
 }