예제 #1
0
        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);
            }
        }
예제 #4
0
        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);
            }
        }