protected override bool Create(object data) { bool result = true; List <object> args = data as List <object>; string schemaKey = args[0] as string; string itemName = args[1] as string; Dictionary <string, object> schemaData = null; if (GDEItemManager.AllSchemas.TryGetValue(schemaKey, out schemaData)) { Dictionary <string, object> itemData = schemaData.DeepCopy(); itemData.Add(GDMConstants.SchemaKey, schemaKey); string error; if (GDEItemManager.AddItem(itemName, itemData, out error)) { SetFoldout(true, itemName); SetNeedToSave(true); } else { result = false; EditorUtility.DisplayDialog(GDEConstants.ErrorCreatingItem, error, GDEConstants.OkLbl); } } else { result = false; EditorUtility.DisplayDialog(GDEConstants.ErrorLbl, GDEConstants.SchemaNotFound + ": " + schemaKey, GDEConstants.OkLbl); } return(result); }
void CreateItems(string schemaName, List <FieldInfo> fields, ExcelRange sheetCells) { Dictionary <string, object> schemaData = null; GDEItemManager.AllSchemas.TryGetValue(schemaName, out schemaData); // If schema failed to parse (schema data is null), we can't parse any items if (schemaData == null) { return; } string itemName; string error; Dictionary <string, object> itemData; var itemKeysColumn = (from cell in sheetCells["a:a"] where cell != null && !string.IsNullOrEmpty(cell.Text) && !cell.Text.Trim().ToLower().Equals(GDEExcelDataHelper.IgnoreToken) && !cell.Text.Trim().ToLower().Equals(GDEExcelDataHelper.FieldNameToken) && !cell.Text.Trim().ToLower().Equals(GDEExcelDataHelper.FieldTypeToken) select cell); // Add to the total item count totalItems += itemKeysColumn.Count(); foreach (var keyCell in itemKeysColumn) { itemName = keyCell.Text.Trim(); itemData = schemaData.DeepCopy(); itemData.Add(GDMConstants.SchemaKey, schemaName); for (int x = 0; x < fields.Count; x++) { try { string cellText = sheetCells[fields[x].cellCol + keyCell.End.Row].Text; List <object> matches; if (fields[x].skip) { continue; } else if (fields[x].isList) { if (fields[x].type.Equals(BasicFieldType.String) || fields[x].type.Equals(BasicFieldType.Vector2) || fields[x].type.Equals(BasicFieldType.Vector3) || fields[x].type.Equals(BasicFieldType.Vector4) || fields[x].type.Equals(BasicFieldType.Color) || GDEItemManager.IsUnityType(fields[x].type) || fields[x].isCustom) { matches = GDEParser.Parse(cellText); } else { matches = new List <object>(cellText.Split(',')); } itemData[fields[x].name] = ConvertListValueToType(fields[x].type, matches); } else if (fields[x].is2DList) { if (fields[x].type.Equals(BasicFieldType.GameObject)) { itemData[fields[x].name] = LoadUnityType2DList <GameObject>(cellText); } else if (fields[x].type.Equals(BasicFieldType.Texture2D)) { itemData[fields[x].name] = LoadUnityType2DList <Texture2D>(cellText); } else if (fields[x].type.Equals(BasicFieldType.Material)) { itemData[fields[x].name] = LoadUnityType2DList <Material>(cellText); } else if (fields[x].type.Equals(BasicFieldType.AudioClip)) { itemData[fields[x].name] = LoadUnityType2DList <AudioClip>(cellText); } else { itemData[fields[x].name] = Json.Deserialize(cellText); } } else { if (fields[x].type.Equals(BasicFieldType.Vector2) || fields[x].type.Equals(BasicFieldType.Vector3) || fields[x].type.Equals(BasicFieldType.Vector4) || fields[x].type.Equals(BasicFieldType.Color)) { matches = new List <object>(cellText.Split(',')); matches.ForEach(obj => obj = obj.ToString().Trim()); itemData[fields[x].name] = ConvertValueToType(fields[x].type, matches); } else { itemData[fields[x].name] = ConvertValueToType(fields[x].type, cellText); } } } catch (Exception ex) { Debug.LogError(ex); Debug.LogError(string.Format(GDEConstants.ErrorParsingCellFormat, schemaName, fields[x].cellCol + keyCell.End.Row)); object defaultValue = GDEItemManager.GetDefaultValueForType(fields[x].type); if (fields[x].isList || fields[x].is2DList) { itemData[fields[x].name] = new List <object>(); } else { itemData[fields[x].name] = defaultValue; } } processedItems++; if (OnUpdateProgress != null) { OnUpdateProgress(GDEConstants.ImportingGameDataLbl, progressMessage, processedItems / totalItems); } } GDEItemManager.AddItem(itemName, itemData, out error); } }