Beispiel #1
0
    private bool CheckModifiValueCallBack(object t)
    {
        if (t is TableConfigFieldInfo)
        {
            TableConfigFieldInfo info = (TableConfigFieldInfo)t;

            if (string.IsNullOrEmpty(info.fieldName))
            {
                return(false);
            }

            if (CheckIsNameRepeat(info))
            {
                return(false);
            }

            string df = DataConfigUtils.ObjectValue2TableString(info.defultValue);
            if (string.IsNullOrEmpty(df))
            {
                return(false);
            }
        }

        return(true);
    }
    private void DrawFields()
    {
        if (string.IsNullOrEmpty(chooseFileName))
        {
            return;
        }
        if (!TableConfigBase.tableConfigOtherInfo.ContainsKey(chooseFileName))
        {
            return;
        }

        TableConfigOtherInfo infos = TableConfigBase.tableConfigOtherInfo[chooseFileName];

        infos.configDescription = EditorDrawGUIUtil.DrawBaseValue("配置文件描述", infos.configDescription).ToString();
        GUILayout.BeginHorizontal("box");
        GUILayout.Box("字段:");
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("+", GUILayout.Width(50)))
        {
            TableConfigFieldInfo f = new TableConfigFieldInfo();
            f.fieldName = "NewField" + infos.fieldInfoDic.Count;
            while (infos.fieldInfoDic.ContainsKey(f.fieldName))
            {
                f.fieldName += "_0";
            }
            infos.fieldInfoDic.Add(f.fieldName, f);
        }
        GUILayout.EndHorizontal();
        DrawFieldData(infos);
    }
    private void DrawFieldData(TableConfigOtherInfo info)
    {
        pos1 = GUILayout.BeginScrollView(pos1, "CurveEditorBackground");
        List <TableConfigFieldInfo> list = new List <TableConfigFieldInfo>(info.fieldInfoDic.Values);

        for (int i = 0; i < list.Count; i++)
        {
            TableConfigFieldInfo temp = list[i];
            temp = (TableConfigFieldInfo)EditorDrawGUIUtil.DrawBaseValue("◆", temp);
            Type tempType = TableConfigTool.ConfigFieldValueType2Type(temp.fieldValueType);
            if (temp.defultValue == null || tempType.FullName != temp.defultValue.GetType().FullName)
            {
                temp.defultValue = ReflectionUtils.CreateDefultInstance(tempType);
            }
            GUILayout.Space(3);
            if (GUILayout.Button("Delete"))
            {
                if (EditorUtility.DisplayDialog("警告", "是否删除字段", "OK", "Cancel"))
                {
                    // info.fieldInfoDic.Remove(temp.fieldName);
                    list.Remove(temp);
                }
            }

            GUILayout.Space(6);
        }
        GUILayout.EndScrollView();
        info.fieldInfoDic.Clear();
        for (int i = 0; i < list.Count; i++)
        {
            TableConfigFieldInfo temp = list[i];
            info.fieldInfoDic.Add(temp.fieldName, temp);
        }
    }
    private void CheckEditConfigData()
    {
        TableConfigOtherInfo infos = TableConfigBase.tableConfigOtherInfo[chooseFileName];
        List <ConfigRowData> datas = currentEditConfigData.configRowDataList[index];
        List <string>        fs    = new List <string>(infos.fieldInfoDic.Keys);

        foreach (var item in fs)
        {
            if (!currentEditConfigData.IsHaveRow(item))
            {
                currentEditConfigData.AddRow(item, infos.fieldInfoDic[item].defultValue);
                return;
            }
        }

        for (int i = 0; i < datas.Count; i++)
        {
            ConfigRowData d = datas[i];
            if (!infos.fieldInfoDic.ContainsKey(d.fieldName))
            {
                currentEditConfigData.RemoveFieldValue(d.fieldName);
                break;
            }
            TableConfigFieldInfo field = infos.fieldInfoDic[d.fieldName];
            Type tempType = TableConfigTool.ConfigFieldValueType2Type(field.fieldValueType);
            if (d.value == null || tempType.FullName != d.value.GetType().FullName)
            {
                d.value = field.defultValue;
                break;
            }
        }
    }
Beispiel #5
0
    /// <summary>
    /// 绘制字段信息
    /// </summary>
    /// <param name="temp"></param>
    private void DrawTableConfigFieldInfo(TableConfigFieldInfo temp)
    {
        Type type = DataConfigUtils.ConfigFieldValueType2Type(temp.fieldValueType, temp.enumType);

        if (temp.defultValue == null || type.FullName != temp.defultValue.GetType().FullName)
        {
            temp.defultValue = ReflectionUtils.CreateDefultInstance(type);
        }

        //是否使用多语言字段


        GUILayout.BeginVertical("box");

        GUILayout.EndVertical();
        temp = (TableConfigFieldInfo)EditorDrawGUIUtil.DrawClassData("字段信息", temp, new List <string>()
        {
            "defultValue", "enumType"
        }, null, () =>
        {
            if (temp.fieldAssetType == DataFieldAssetType.LocalizedLanguage ||
                temp.fieldAssetType == DataFieldAssetType.Prefab ||
                temp.fieldAssetType == DataFieldAssetType.TableKey ||
                temp.fieldAssetType == DataFieldAssetType.Texture)
            {
                if (type != typeof(string))
                {
                    temp.fieldAssetType = DataFieldAssetType.Data;
                }
            }
            string text = "默认值";
            if (temp.fieldAssetType == DataFieldAssetType.LocalizedLanguage)
            {
                temp.defultValue = DrawLocalizedLanguageField(text, temp.defultValue);
            }
            else if (temp.fieldAssetType == DataFieldAssetType.Prefab)
            {
                temp.defultValue = DrawPrefabGUI(text, temp.defultValue);
            }
            else if (temp.fieldAssetType == DataFieldAssetType.Texture)
            {
                temp.defultValue = DrawTextureGUI(text, temp.defultValue);
            }
            else if (temp.fieldAssetType == DataFieldAssetType.TableKey)
            {
                temp.defultValue = DrawTableGUI(text, temp.defultValue);
            }
            else
            {
                temp.defultValue = EditorDrawGUIUtil.DrawBaseValue(text, temp.defultValue);
            }
            if (temp.fieldValueType == FieldType.Enum)
            {
                List <string> enumList = new List <string>(EditorTool.GetAllEnumType());
                temp.enumType          = EditorDrawGUIUtil.DrawPopup("枚举类型", temp.enumType, enumList);
            }
        });
    }
Beispiel #6
0
    /// <summary>
    /// 修改格子数据完成回调
    /// </summary>
    /// <param name="t"></param>
    private void ModificationCompleteCallBack(object t)
    {
        if (t is TableConfigFieldInfo)
        {
            TableConfigFieldInfo temp = (TableConfigFieldInfo)t;

            string field = m_currentData.TableKeys[modifiIndex.y];
            if (field != temp.fieldName)
            {
                RenameField(m_currentData, field, temp.fieldName);
                field = temp.fieldName;
            }
            // SingleData data = m_currentData[m_currentData.TableIDs[modifiIndex.y]];
            m_currentData.m_defaultValue[field] = DataConfigUtils.ObjectValue2TableString(temp.defultValue);

            if (m_currentData.m_noteValue.ContainsKey(field))
            {
                m_currentData.m_noteValue[field] = temp.description;
            }
            else
            {
                if (!string.IsNullOrEmpty(temp.description))
                {
                    m_currentData.m_noteValue.Add(field, temp.description);
                }
            }

            if (m_currentData.m_tableTypes[field] != temp.fieldValueType)
            {
                m_currentData.m_tableTypes[field] = temp.fieldValueType;
                ResetDataField(m_currentData, field, temp.fieldValueType, temp.enumType, temp.defultValue);
            }
            if (temp.fieldValueType == FieldType.Enum)
            {
                if (m_currentData.m_tableEnumTypes.ContainsKey(field))
                {
                    m_currentData.m_tableEnumTypes[field] = temp.enumType;
                }

                else
                {
                    m_currentData.m_tableEnumTypes.Add(field, temp.enumType);
                }
            }
            m_currentData.m_fieldAssetTypes[field] = temp.fieldAssetType;
        }
        else
        {
            string     field = m_currentData.TableKeys[modifiIndex.y];
            SingleData data  = m_currentData[m_currentData.TableIDs[modifiIndex.x - 1]];
            data[field] = DataConfigUtils.ObjectValue2TableString(t);
        }
    }
Beispiel #7
0
    /// <summary>
    /// 添加字段
    /// </summary>
    /// <param name="info"></param>
    private static void AddField(DataTable table, TableConfigFieldInfo info)
    {
        table.TableKeys.Add(info.fieldName);
        table.m_noteValue.Add(info.fieldName, info.description);
        table.m_tableTypes.Add(info.fieldName, info.fieldValueType);
        table.m_fieldAssetTypes.Add(info.fieldName, info.fieldAssetType);
        if (info.fieldValueType == FieldType.Enum)
        {
            table.m_tableEnumTypes.Add(info.fieldName, info.enumType);
        }
        table.m_defaultValue.Add(info.fieldName, DataConfigUtils.ObjectValue2TableString(info.defultValue));

        foreach (var item in table.Values)
        {
            item.Add(info.fieldName, DataConfigUtils.ObjectValue2TableString(info.defultValue));
        }
    }
Beispiel #8
0
    /// <summary>
    /// 添加一个字段
    /// </summary>
    private void Add2FieldGUI()
    {
        GeneralDataModificationWindow.OpenWindow(this, "添加字段", new TableConfigFieldInfo(), (value) =>
        {
            TableConfigFieldInfo info = (TableConfigFieldInfo)value;
            DrawTableConfigFieldInfo(info);

            if (string.IsNullOrEmpty(info.fieldName))
            {
                EditorGUILayout.HelpBox("字段名不能为空!!", MessageType.Error);
            }
            else if (m_currentData.TableKeys.Contains(info.fieldName))
            {
                EditorGUILayout.HelpBox("字段名重复!!", MessageType.Error);
            }
            string df = DataConfigUtils.ObjectValue2TableString(info.defultValue);
            if (string.IsNullOrEmpty(df))
            {
                EditorGUILayout.HelpBox("默认值不能为空!!", MessageType.Error);
            }
            return(value);
        },
                                                 (value) =>
        {
            TableConfigFieldInfo info = (TableConfigFieldInfo)value;
            if (string.IsNullOrEmpty(info.fieldName) || m_currentData.TableKeys.Contains(info.fieldName))
            {
                return(false);
            }
            string df = DataConfigUtils.ObjectValue2TableString(info.defultValue);
            if (string.IsNullOrEmpty(df))
            {
                return(false);
            }
            return(true);
        },
                                                 (value) =>
        {
            TableConfigFieldInfo info = (TableConfigFieldInfo)value;
            AddField(m_currentData, info);
            withItemList.Add(wWith);
        });
    }
    private void LoadData(string fileName)
    {
        if (string.IsNullOrEmpty(fileName))
        {
            return;
        }
        Type t = ReflectionUtils.GetTypeByTypeFullName(fileName);
        List <TableConfigBase> listdata = TableConfigManager.GetConfig(t);

        currentEditConfigData = new ConfigFileContents();
        foreach (var item in listdata)
        {
            Type                 type   = item.GetType();
            FieldInfo[]          fInfos = type.GetFields();
            List <ConfigRowData> hang   = new List <ConfigRowData>();
            foreach (var f in fInfos)
            {
                object        value = f.GetValue(item);
                ConfigRowData co    = new ConfigRowData();
                co.fieldName = f.Name;
                co.value     = value;
                hang.Add(co);
            }
            currentEditConfigData.configRowDataList.Add(hang);
        }
        TableConfigOtherInfo info = TableConfigBase.tableConfigOtherInfo[fileName];

        tableConfigOtherInfo = new TableConfigOtherInfo();
        tableConfigOtherInfo.configDescription = info.configDescription;
        tableConfigOtherInfo.fieldInfoDic      = new Dictionary <string, TableConfigFieldInfo>();
        foreach (var item in info.fieldInfoDic)
        {
            TableConfigFieldInfo f = new TableConfigFieldInfo();
            f.fieldName      = item.Value.fieldName;
            f.description    = item.Value.description;
            f.defultValue    = item.Value.defultValue;
            f.fieldValueType = item.Value.fieldValueType;
            tableConfigOtherInfo.fieldInfoDic.Add(item.Key, f);
        }
    }
Beispiel #10
0
    private bool CheckIsNameRepeat(TableConfigFieldInfo info)
    {
        string field = m_currentData.TableKeys[modifiIndex.y];

        for (int i = 0; i < m_currentData.TableKeys.Count; i++)
        {
            string f = m_currentData.TableKeys[i];
            if (i == modifiIndex.y)
            {
                continue;
            }
            else
            {
                if (f == info.fieldName)
                {
                    return(true);
                }
            }
        }

        return(false);
    }
Beispiel #11
0
    /// <summary>
    /// 绘制数据修改窗口
    /// </summary>
    /// <param name="t"></param>
    /// <returns></returns>
    private object DrawModifiValueGUI(object t)
    {
        if (t is TableConfigFieldInfo)
        {
            TableConfigFieldInfo info = (TableConfigFieldInfo)t;
            DrawTableConfigFieldInfo(info);
            string df = DataConfigUtils.ObjectValue2TableString(info.defultValue);
            if (string.IsNullOrEmpty(df))
            {
                EditorGUILayout.HelpBox("默认值不能为空!!", MessageType.Error);
            }
            if (CheckIsNameRepeat(info))
            {
                EditorGUILayout.HelpBox("字段名不能重复!!", MessageType.Error);
            }
        }
        else
        {
            string     field = m_currentData.TableKeys[modifiIndex.y];
            SingleData data  = m_currentData[m_currentData.TableIDs[modifiIndex.x - 1]];

            EditorDrawGUIUtil.CanEdit = false;
            field = EditorDrawGUIUtil.DrawBaseValue("字段名", field).ToString();
            EditorDrawGUIUtil.CanEdit = true;
            GUILayout.Space(7);

            string description = GetDescription(field);
            GUILayout.Label("字段描述:" + description);

            FieldType fieldValueType = GetFieldType(modifiIndex.y, field);
            string    enumType       = GetEnumType(fieldValueType, field);

            string             defaultValue   = GetDefaultValue(fieldValueType, enumType, field);
            DataFieldAssetType fieldAssetType = GetDataFieldAssetType(field);
            GUILayout.BeginHorizontal();

            GUILayout.Label("默认值 :" + defaultValue);
            GUILayout.FlexibleSpace();

            if (GUILayout.Button("默认值", GUILayout.Width(60)))
            {
                t = DataConfigUtils.TableString2ObjectValue(defaultValue, fieldValueType, enumType);
            }
            GUILayout.EndHorizontal();

            string text = "值";
            if (fieldAssetType == DataFieldAssetType.LocalizedLanguage)
            {
                t = DrawLocalizedLanguageField(text, t);
            }
            else if (fieldAssetType == DataFieldAssetType.Prefab)
            {
                t = DrawPrefabGUI(text, t);
            }
            else if (fieldAssetType == DataFieldAssetType.Texture)
            {
                t = DrawTextureGUI(text, t);
            }
            else if (fieldAssetType == DataFieldAssetType.TableKey)
            {
                t = DrawTableGUI(text, t);
            }
            else
            {
                t = EditorDrawGUIUtil.DrawBaseValue(text, t);
            }
        }

        return(t);
    }
Beispiel #12
0
    /// <summary>
    /// 绘制每个数据格子
    /// </summary>
    /// <param name="startPos"></param>
    private void DrawGridItem(Vector2 startPos)
    {
        helpBoxStyle.fontSize = nowButtonFontSize;
        float tempHeight = 0;

        for (int i = 0; i < heightItemList.Count; i++)
        {
            float h        = heightItemList[i];
            float tempWith = 0;


            for (int j = 0; j < withItemList.Count; j++)
            {
                float w = withItemList[j];

                Vector2 size = new Vector2(w, h);
                Vector2 pos  = startPos + new Vector2(tempWith, tempHeight);

                object value   = null;
                string showStr = "";

                string    field          = m_currentData.TableKeys[j];
                FieldType fieldValueType = GetFieldType(j, field);
                string    enumType       = GetEnumType(fieldValueType, field);

                string defaultValue = GetDefaultValue(fieldValueType, enumType, field);


                if (i == 0)
                {
                    GUI.color = Color.yellow;

                    showStr = EditorDrawGUIUtil.GetFormatName(field, DataConfigUtils.ConfigFieldValueType2Type(fieldValueType, enumType), "red");
                }
                else if (i == 1)
                {
                    GUI.color = Color.cyan;

                    showStr = GetDescription(field);
                }
                else if (i == 2)
                {
                    GUI.color = Color.green;

                    showStr = defaultValue;
                }
                else
                {
                    SingleData data = m_currentData[m_currentData.TableIDs[i - 3]];

                    bool isDefault = false;
                    if (data.ContainsKey(field) && data[field] != defaultValue)
                    {
                        DataFieldAssetType fieldAssetType = GetDataFieldAssetType(field);
                        if (fieldAssetType == DataFieldAssetType.LocalizedLanguage)
                        {
                            string k = data[field];
                            if (LanguageManager.HaveKey(k))
                            {
                                showStr = LanguageManager.GetContentByKey(k);
                            }
                            else
                            {
                                showStr = k;
                            }
                        }
                        else
                        {
                            showStr = data[field];
                        }
                    }
                    else
                    {
                        showStr   = defaultValue;
                        isDefault = true;
                    }
                    if (!string.IsNullOrEmpty(searchValue))
                    {
                        showStr = ShowContainsChar(showStr, searchValue);
                    }

                    if (isDefault)
                    {
                        showStr = "<color=green>" + showStr + "</color>";
                    }
                }

                if (i == 1 || i == 2)
                {
                    GUI.Button(new Rect(pos, size), showStr, helpBoxStyle);
                }
                else
                {
                    if (selectColumnIndexs.Contains(j))
                    {
                        GUI.color = Color.magenta;
                    }
                    if (selectRowIndexs.Contains(i))
                    {
                        GUI.color = Color.cyan;
                    }
                    if (GUI.Button(new Rect(pos, size), showStr, helpBoxStyle))
                    {
                        modifiIndex = new Vector2Int(i - 2, j);
                        if (i == 0)
                        {
                            TableConfigFieldInfo f = new TableConfigFieldInfo();
                            f.fieldName      = field;
                            f.description    = m_currentData.m_noteValue.ContainsKey(field) ? m_currentData.m_noteValue[field] : "";
                            f.fieldValueType = fieldValueType;
                            f.defultValue    = DataConfigUtils.TableString2ObjectValue(defaultValue, fieldValueType, enumType);
                            f.enumType       = enumType;
                            f.fieldAssetType = GetDataFieldAssetType(field);
                            value            = f;
                        }
                        else
                        {
                            SingleData data = m_currentData[m_currentData.TableIDs[i - 3]];

                            if (data.ContainsKey(field))
                            {
                                defaultValue = data[field];
                            }
                            value = DataConfigUtils.TableString2ObjectValue(defaultValue, fieldValueType, enumType);
                        }
                        GeneralDataModificationWindow.OpenWindow(this, "修改数据", value, DrawModifiValueGUI, CheckModifiValueCallBack, ModificationCompleteCallBack);
                    }
                }

                GUI.color = Color.white;
                tempWith += w;
            }

            tempHeight += h;
        }
        helpBoxStyle.fontSize = oldButtonFontSize;
    }
    private void NewTableConfig()
    {
        GUILayout.BeginHorizontal("box");
        newFileName = EditorDrawGUIUtil.DrawBaseValue("新建配置文件:", newFileName).ToString();
        if (GUILayout.Button("确定", GUILayout.Width(50)))
        {
            if (ResourcePathManager.ContainsFileName(newFileName) || string.IsNullOrEmpty(newFileName))
            {
                EditorUtility.DisplayDialog("警告", "名字不能为空或重复", "OK");
            }
            else
            {
                chooseFileName = newFileName;
                fileNames.Add(newFileName);
            }
        }

        GUILayout.EndHorizontal();

        if (string.IsNullOrEmpty(newFileName))
        {
            return;
        }
        if (ResourcePathManager.ContainsFileName(newFileName))
        {
            EditorGUILayout.HelpBox("文件名重复!!", MessageType.Error);
            return;
        }
        if (newConfigInfo == null)
        {
            newConfigInfo = new TableConfigOtherInfo();
        }

        newConfigInfo.configDescription = EditorDrawGUIUtil.DrawBaseValue("配置文件描述:", newConfigInfo.configDescription).ToString();
        GUILayout.Space(5);
        GUILayout.BeginHorizontal("box");
        GUILayout.Box("添加字段:");
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("+", GUILayout.Width(50)))
        {
            TableConfigFieldInfo f = new TableConfigFieldInfo();
            f.fieldName = "NewField" + newConfigInfo.fieldInfoDic.Count;
            while (newConfigInfo.fieldInfoDic.ContainsKey(f.fieldName))
            {
                f.fieldName += "_0";
            }
            newConfigInfo.fieldInfoDic.Add(f.fieldName, f);
        }
        GUILayout.EndHorizontal();

        DrawFieldData(newConfigInfo);

        if (newConfigInfo.fieldInfoDic.Count > 0 && GUILayout.Button("创建"))
        {
            GlobalEvent.AddEvent(EditorGlobalEventEnum.OnResourcesAssetsChange, (t) =>
            {
                Debug.Log("OnResourcesAssetsChange");
                AssetsSortManagement.SetLayer(newFileName, configLayerName);
                AssetsSortManagement.Save();

                newFileName   = "";
                newConfigInfo = null;
            }, true);
            string content = TableConfigTool.ConfigInfo2TableText(newConfigInfo, null);
            string path    = CreateConfigClassEditor.SaveConfigFilePath + "/" + newFileName + ".txt";
            FileUtils.CreateTextFile(path, content);
            CreateConfigClassEditor.CreateConfigClassFile(content, newFileName);
            AssetDatabase.Refresh();
        }
    }