Exemplo n.º 1
0
        internal void onSheetRead(GstuSpreadSheet sheet, bool generateInstances)
        {
            List <ColumnExporter> exporters = ReadExporters(sheet);

            string sheetName = GSTUSheetUtils.GetSheetName(sheet);

            GenerateClasses(sheetName, exporters);

            if (generateInstances)
            {
                GenerateInstances(sheet, sheetName, exporters);
            }

            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
Exemplo n.º 2
0
        private void GenerateInstances(GstuSpreadSheet sheet,
                                       string spreadsheetName,
                                       List <ColumnExporter> exporters)
        {
            List <GSTU_Cell> keys            = GSTUSheetUtils.GetSheetRowKeys(sheet);
            string           instancesFolder = folderPath + "/" + spreadsheetName + "/";

            FileUtils.GenerateFoldersForPath(instancesFolder);

            string           className         = GetAggregateClassName(spreadsheetName);
            Type             aggregateType     = AmoaebaUtils.ReflectionHelpers.GetTypeFromName("" + outputNamespace + "." + className);
            ScriptableObject aggregateInstance = ScriptableObject.CreateInstance(aggregateType);

            className = GetEntryClassName(spreadsheetName);
            Type classType = AmoaebaUtils.ReflectionHelpers.GetTypeFromName("" + outputNamespace + "." + className);
            Type arrayType = classType.MakeArrayType();

            Array instances = Array.CreateInstance(arrayType.GetElementType(), keys.Count);

            for (int i = 0; i < keys.Count; i++)
            {
                GSTU_Cell        key      = keys[i];
                ScriptableObject instance = ScriptableObject.CreateInstance(classType);
                instances.SetValue(instance, i);

                foreach (ColumnExporter exporter in exporters)
                {
                    GSTU_Cell entry       = sheet[key.value, exporter.sheetName];
                    FieldInfo columnField = classType.GetField(exporter.Name,
                                                               BindingFlags.Public
                                                               | BindingFlags.Instance);
                    columnField.SetValue(instance, exporter.ParseTypeForValue(entry.value));
                }

                AssetDatabase.CreateAsset(instance, instancesFolder + key.value + ".asset");
            }
            AssetDatabase.CreateAsset(aggregateInstance, instancesFolder + spreadsheetName + "Entries.asset");

            MethodInfo aggregateMethod = aggregateType.GetMethod(AGGREGATE_CLASS_FILL_METHOD,
                                                                 BindingFlags.NonPublic |
                                                                 BindingFlags.Instance);

            object[] arguments = { instances };
            aggregateMethod.Invoke(aggregateInstance, arguments);
        }
Exemplo n.º 3
0
        private List <ColumnExporter> ReadExporters(GstuSpreadSheet sheet)
        {
            List <GSTU_Cell>      columnNames = GSTUSheetUtils.ColumnNamesRow(sheet);
            List <GSTU_Cell>      columnTypes = GSTUSheetUtils.TypesRow(sheet);
            List <ColumnExporter> retVal      = new List <ColumnExporter>();

            int max = Mathf.Min(columnNames.Count, columnTypes.Count);

            for (int i = 0; i < max; i++)
            {
                ColumnExporter exporter;
                exporter.sheetName = columnNames[i].value;
                exporter.Type      = StringToParseType(columnTypes[i].value);
                retVal.Add(exporter);
            }

            return(retVal);
        }