Example #1
0
    public SOBase GetConfig(string url)
    {
        if (_configs.ContainsKey(url) == false)
        {
            //TextAsset asset =  ResourcesManager.Instance.LoadAsset("Config/"+url) as TextAsset;

            TextAsset asset = Resources.Load <TextAsset>("Config/" + url);

            using (var sr = new StringReader(asset.text))
            {
                var names      = ReadLine(sr);
                var configData = ScriptableObject.CreateInstance <ConfigData>();
                configData.fieldNames = names;
                int column = names.Length;
                var types  = ReadLine(sr);
                configData.fieldTypes = new int[column];
                configData.typeIndexs = new int[column];
                configData.InitData(types[0]);
                int intlen    = 0;
                int stringlen = 0;
                int boollen   = 0;
                int floatlen  = 0;
                for (int i = 0; i < column; i++)
                {
                    string type = types[i].ToLower();
                    SetIndex(type, configData.typeIndexs, i, ref intlen, ref stringlen, ref boollen, ref floatlen);

                    switch (type)
                    {
                    case "int":
                        configData.fieldTypes[i] = ConfigDataType.INT;
                        break;

                    case "string":
                        configData.fieldTypes[i] = ConfigDataType.STRING;
                        break;

                    case "bool":
                        configData.fieldTypes[i] = ConfigDataType.BOOL;
                        break;

                    case "float":
                        configData.fieldTypes[i] = ConfigDataType.FLOAT;
                        break;

                    case "enum":
                        configData.fieldTypes[i] = ConfigDataType.ENUM;
                        break;

                    case "array":
                        configData.fieldTypes[i] = ConfigDataType.ARRAY;
                        break;

                    case "custom":
                        configData.fieldTypes[i] = ConfigDataType.CUSTOM;
                        break;
                    }
                }
                configData.InitLine(intlen, stringlen, boollen, floatlen);

                ReadLine(sr);

                string[] arr       = null;
                int      lineCount = 3;
                while ((arr = ReadLine(sr)) != null)
                {
                    lineCount++;
                    var lineObj = new ConfigSheetLine();
                    lineObj.InitLine(intlen, stringlen, boollen, floatlen);
                    for (int i = 0; i < column; i++)
                    {
                        try
                        {
                            lineObj.SetData(arr[i], configData.fieldTypes[i], configData.typeIndexs[i]);
                        }
                        catch (FormatException e)
                        {
                            throw new FormatException(url + " 数据格式转换错误:第" + lineCount + "行,第" + (i + 1) + "列\r\n" + e.StackTrace);
                        }
                    }

                    bool b = configData.Add(lineObj);
                    if (b == false)
                    {
                        throw new Exception("重复的ID项:第" + lineCount + "行" + ";" + url);
                    }
                }

                _configs[url] = configData;
            }
        }
        return(_configs[url]);
    }