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