Esempio n. 1
0
        public static void CreateAsset(DataTable table)
        {
            if (!Enter(table))
            {
                return;
            }

            if (CreateCSharp(table))
            {
                Debug.LogError("Create Scripte! Please Try Again!!!");
                return;
            }
            try
            {
                string script = string.Format("Data{0}", table.TableName);

                string path = string.Format("Assets/Package/Data/{0}.asset", script);

                Assembly assembly = typeof(DataBase).Assembly;

                Type TA = assembly.GetType(string.Format("Data.Data{0}", table.TableName));

                if (File.Exists(path))
                {
                    File.Delete(path);
                }
                ScriptableObject asset = ScriptableObject.CreateInstance(script);

                asset.name = script;

                Type TI = assembly.GetType(string.Format("Data.{0}Information", table.TableName));

                object list = TI.GenerateCollection();

                for (int i = 2; i < row; i++)
                {
                    object target = Activator.CreateInstance(TI);

                    for (int j = 0; j < column; j++)
                    {
                        var field = TI.GetField(table.Rows[0][j].ToString(), BindingFlags.Instance | BindingFlags.Public);

                        object value;

                        switch (table.Rows[1][j].ToString())
                        {
                        case "int[]":
                        {
                            if (!table.Rows[i][j].ToString().TryParseArrayInt(out int[] array_int))
                            {
                            }
                            value = array_int;
                        }
                        break;

                        case "float[]":
                        {
                            if (!table.Rows[i][j].ToString().TryParseArrayFloat(out float[] array_float))
                            {
                            }
                            value = array_float;
                        }
                        break;

                        case "DateTime":
                        {
                            if (!table.Rows[i][j].ToString().TryParseDateTime(out DateTime time))
                            {
                            }
                            value = time;
                        }
                        break;

                        default:
                            value = Convert.ChangeType(table.Rows[i][j], field.FieldType);
                            break;
                        }
                        field.SetValue(target, value);
                    }
                    list.Call("Add", new object[] { target });
                }
                asset.SetMember("list", list);

                AssetDatabase.CreateAsset(asset, path);

                AssetDatabase.Refresh();
            }
            catch (Exception e)
            {
                Debuger.LogException(Author.Data, e);
            }
        }