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(); }
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); }
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); }