void CreateSchema(string name, List <FieldInfo> fields) { string error; Dictionary <string, object> schemaData = new Dictionary <string, object>(); GDEItemManager.AddSchema(name, schemaData, out error, true); foreach (FieldInfo field in fields) { if (field.skip) { continue; } else if (field.type != BasicFieldType.Undefined) { GDEItemManager.AddBasicFieldToSchema(field.type, name, schemaData, field.name, out error, field.isList, field.is2DList, GDEItemManager.GetDefaultValueForType(field.type)); } else { GDEItemManager.AddCustomFieldToSchema(field.customType, name, schemaData, field.name, field.isList, field.is2DList, out error); } if (error != string.Empty) { Debug.LogError(string.Format(GDEConstants.ErrorInSheet, name, error, field.cellID)); } } }
private bool AddBasicField(BasicFieldType type, string schemaKey, Dictionary <string, object> schemaData, string newFieldName, bool isList) { bool result = true; object defaultValue = GDEItemManager.GetDefaultValueForType(type); string error; if (GDEItemManager.AddBasicFieldToSchema(type, schemaKey, schemaData, newFieldName, out error, isList, defaultValue)) { SetNeedToSave(true); } else { EditorUtility.DisplayDialog(GDEConstants.ErrorCreatingField, error, GDEConstants.OkLbl); result = false; } return(result); }
void DrawListField(string schemaKey, string itemKey, string fieldKey, Dictionary <string, object> itemData) { try { string foldoutKey = string.Format(GDMConstants.MetaDataFormat, itemKey, fieldKey); bool newFoldoutState; bool currentFoldoutState = listFieldFoldoutState.Contains(foldoutKey); object defaultResizeValue = null; string fieldType; itemData.TryGetString(string.Format(GDMConstants.MetaDataFormat, GDMConstants.TypePrefix, fieldKey), out fieldType); BasicFieldType fieldTypeEnum = BasicFieldType.Undefined; if (Enum.IsDefined(typeof(BasicFieldType), fieldType)) { fieldTypeEnum = (BasicFieldType)Enum.Parse(typeof(BasicFieldType), fieldType); if (!fieldTypeEnum.Equals(BasicFieldType.Vector2) && !fieldTypeEnum.Equals(BasicFieldType.Vector3) && !fieldTypeEnum.Equals(BasicFieldType.Vector4) && !fieldTypeEnum.Equals(BasicFieldType.Color)) { fieldType = fieldType.ToLower(); } defaultResizeValue = GDEItemManager.GetDefaultValueForType(fieldTypeEnum); } GUIContent content = new GUIContent(string.Format("List<{0}>", fieldType)); float width = Math.Max(EditorStyles.foldout.CalcSize(content).x, GDEConstants.MinLabelWidth); newFoldoutState = EditorGUI.Foldout(new Rect(currentLinePosition, TopOfLine(), width, StandardHeight()), currentFoldoutState, string.Format("List<{0}>", fieldType)); currentLinePosition += (width + 2); content.text = fieldKey.HighlightSubstring(filterText, highlightColor); width = Math.Max(labelStyle.CalcSize(content).x, GDEConstants.MinLabelWidth); GUI.Label(new Rect(currentLinePosition, TopOfLine(), width, StandardHeight()), fieldKey.HighlightSubstring(filterText, highlightColor), labelStyle); currentLinePosition += (width + 2); if (newFoldoutState != currentFoldoutState) { if (newFoldoutState) { listFieldFoldoutState.Add(foldoutKey); } else { listFieldFoldoutState.Remove(foldoutKey); } } object temp = null; List <object> list = null; if (itemData.TryGetValue(fieldKey, out temp)) { list = temp as List <object>; } content.text = GDEConstants.SizeLbl; width = GUI.skin.label.CalcSize(content).x; GUI.Label(new Rect(currentLinePosition, TopOfLine(), width, StandardHeight()), content); currentLinePosition += (width + 2); int newListCount; string listCountKey = string.Format(GDMConstants.MetaDataFormat, itemKey, fieldKey); if (newListCountDict.ContainsKey(listCountKey)) { newListCount = newListCountDict[listCountKey]; } else { newListCount = list.Count; newListCountDict.Add(listCountKey, newListCount); } width = 40; newListCount = EditorGUI.IntField(new Rect(currentLinePosition, TopOfLine(), width, StandardHeight()), newListCount); currentLinePosition += (width + 4); content.text = GDEConstants.ResizeBtn; width = GUI.skin.button.CalcSize(content).x; newListCountDict[listCountKey] = newListCount; if (newListCount != list.Count && GUI.Button(new Rect(currentLinePosition, TopOfLine(), width, StandardHeight()), content)) { ResizeList(list, newListCount, defaultResizeValue); newListCountDict[listCountKey] = newListCount; currentLinePosition += (width + 2); } NewLine(); if (newFoldoutState) { for (int i = 0; i < list.Count; i++) { currentLinePosition += GDEConstants.Indent * 2; switch (fieldTypeEnum) { case BasicFieldType.Bool: { DrawListBool(i, Convert.ToBoolean(list[i]), list); NewLine(); break; } case BasicFieldType.Int: { DrawListInt(i, Convert.ToInt32(list[i]), list); NewLine(); break; } case BasicFieldType.Float: { DrawListFloat(i, Convert.ToSingle(list[i]), list); NewLine(); break; } case BasicFieldType.String: { DrawListString(i, list[i] as string, list); NewLine(); break; } case BasicFieldType.Vector2: { DrawListVector2(i, list[i] as Dictionary <string, object>, list); NewLine(GDEConstants.VectorFieldBuffer + 1); break; } case BasicFieldType.Vector3: { DrawListVector3(i, list[i] as Dictionary <string, object>, list); NewLine(GDEConstants.VectorFieldBuffer + 1); break; } case BasicFieldType.Vector4: { DrawListVector4(i, list[i] as Dictionary <string, object>, list); NewLine(GDEConstants.VectorFieldBuffer + 1); break; } case BasicFieldType.Color: { DrawListColor(i, list[i] as Dictionary <string, object>, list); NewLine(); break; } default: { List <string> itemKeys = GetPossibleCustomValues(schemaKey, fieldType); DrawListCustom(i, list[i] as string, list, true, itemKeys); NewLine(); break; } } } } } catch (Exception ex) { Debug.LogError(ex); } }
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); } }