From ff7f4155ae99f589691b929f959caf5f284cfe12 Mon Sep 17 00:00:00 2001 From: client_Wu Xijin <364452445@qq.com> Date: 星期三, 13 二月 2019 15:43:48 +0800 Subject: [PATCH] 3335 配置表读取重构。 --- Assets/Editor/Tool/ConfigClassGenerate.cs | 246 +++++++++++++++++++++++++++++++++++------------- 1 files changed, 178 insertions(+), 68 deletions(-) diff --git a/Assets/Editor/Tool/ConfigClassGenerate.cs b/Assets/Editor/Tool/ConfigClassGenerate.cs index 8147b68..82242e0 100644 --- a/Assets/Editor/Tool/ConfigClassGenerate.cs +++ b/Assets/Editor/Tool/ConfigClassGenerate.cs @@ -3,24 +3,49 @@ using UnityEditor.ProjectWindowCallback; using UnityEngine; using UnityEditor; -using System; using System.IO; using System.Text; using System.Text.RegularExpressions; +using System; +using UnityEngine.Events; -public class CreateConfigData +public class CreateConfigClassFile { - public static event Action fileCreateEvent; + const string retract1 = "\t"; + const string retract2 = "\t\t"; + const string retract3 = "\t\t\t"; + const string retract4 = "\t\t\t\t"; + const string retract5 = "\t\t\t\t\t"; - public static string primaryKey = string.Empty; + public static event UnityAction FileCreateEvent; + public static string filedContent = string.Empty; public static string readContent = string.Empty; + + + [UnityEditor.MenuItem("Assets/鐢熸垚閰嶇疆瑙f瀽绫诲瀷")] + public static void GenerateConfigClass() + { + + if (Selection.objects != null) + { + foreach (var o in Selection.objects) + { + var path = AssetDatabase.GetAssetPath(o.GetInstanceID()); + if (path.EndsWith(".txt") || path.EndsWith(".TXT")) + { + CreateConfigClass(new FileInfo(path)); + } + } + + AssetDatabase.Refresh(); + } + } public static void CreateConfigClass(FileInfo fileInfo) { var lines = File.ReadAllLines(fileInfo.FullName); - if (lines.Length > 2) { var typeLine = lines[0]; @@ -30,7 +55,6 @@ var min = Mathf.Min(types.Length, fields.Length); var fieldFulls = new List<string>(); var readFulls = new List<string>(); - primaryKey = fields[0]; int index = 0; for (int j = 0; j < min; j++) @@ -51,51 +75,71 @@ } } - filedContent = string.Join("\r\n\t\t", fieldFulls.ToArray()); - readContent = string.Join("\r\n\t\t\t\r\n\t\t\t\t", readFulls.ToArray()); + filedContent = string.Join("\r\n\t", fieldFulls.ToArray()); + readContent = string.Join("\r\n\r\n\t\t\t", readFulls.ToArray()); CreatNewConfigClass(fileInfo.Name.Substring(0, fileInfo.Name.IndexOf('.'))); } } - public static string GetField(string _type, string _field) + public static string GetField(string type, string field) { - _field = _field.Replace(" ", ""); - if (_type.Contains("int[]")) + field = field.Replace(" ", ""); + if (type.Contains("int[]")) { - return StringUtility.Contact("public int[] ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly int[] ", field.Trim(), ";"); } - else if (_type.Contains("float[]")) + else if (type.Contains("Int2[]")) { - return StringUtility.Contact("public float[] ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly Int2[] ", field.Trim(), ";"); } - else if (_type.Contains("string[]")) + else if (type.Contains("Int3[]")) { - return StringUtility.Contact("public string[] ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly Int3[] ", field.Trim(), ";"); } - else if (_type.Contains("Vector3[]")) + else if (type.Contains("float[]")) { - return StringUtility.Contact("public Vector3[] ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly float[] ", field.Trim(), ";"); } - else if (_type.Contains("int")) + else if (type.Contains("string[]")) { - return StringUtility.Contact("public int ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly string[] ", field.Trim(), ";"); } - else if (_type.Contains("long")) + else if (type.Contains("Vector3[]")) { - return StringUtility.Contact("public long ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly Vector3[] ", field.Trim(), ";"); } - else if (_type.Contains("float")) + else if (type.Contains("int")) { - return StringUtility.Contact("public float ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly int ", field.Trim(), ";"); } - else if (_type.Contains("string")) + else if (type.Contains("long")) { - return StringUtility.Contact("public string ", _field.Contains("[") ? _field.Substring(0, _field.IndexOf("[")) : _field, ";"); + return StringUtility.Contact("public readonly long ", field.Trim(), ";"); } - else if (_type.Contains("Vector3")) + else if (type.Contains("float")) { - return StringUtility.Contact("public Vector3 ", _field.Trim(), ";"); + return StringUtility.Contact("public readonly float ", field.Trim(), ";"); + } + else if (type.Contains("string")) + { + return StringUtility.Contact("public readonly string ", field, ";"); + } + else if (type.Contains("Vector3")) + { + return StringUtility.Contact("public readonly Vector3 ", field.Trim(), ";"); + } + else if (type.Contains("bool")) + { + return StringUtility.Contact("public readonly bool ", field.Trim(), ";"); + } + else if (type.Contains("Int2")) + { + return StringUtility.Contact("public readonly Int2 ", field.Trim(), ";"); + } + else if (type.Contains("Int3")) + { + return StringUtility.Contact("public readonly Int3 ", field.Trim(), ";"); } else { @@ -103,70 +147,105 @@ } } - public static string GetRead(string _type, string _field, int _index) + public static string GetRead(string type, string field, int index) { - _field = _field.Replace(" ", ""); - if (_type.Contains("int[]")) + field = field.Replace(" ", ""); + if (type.Contains("int[]")) { - - var line1 = StringUtility.Contact("var ", _field, "StringArray", " = ", "contents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); - var line2 = StringUtility.Contact("\t\t\t\t", _field, " = ", "new int", "[", _field, "StringArray.Length]", ";", "\n"); - var line3 = StringUtility.Contact("\t\t\t\t", "for (int i=0;i<", _field, "StringArray", ".Length", ";", "i++", ")", "\n"); - var line4 = "\t\t\t\t{\n"; - var line5 = StringUtility.Contact("\t\t\t\t\t", " int.TryParse(", _field, "StringArray", "[i]", ",", "out ", _field, "[i]", ")", ";", "\n"); - var line6 = "\t\t\t\t}"; + var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); + var line2 = StringUtility.Contact(retract3, field, " = ", "new int", "[", field, "StringArray.Length]", ";", "\n"); + var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n"); + var line4 = StringUtility.Contact(retract3, "{\n"); + var line5 = StringUtility.Contact(retract4, " int.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n"); + var line6 = StringUtility.Contact(retract3, "}"); return StringUtility.Contact(line1, line2, line3, line4, line5, line6); } - else if (_type.Contains("float[]")) + else if (type.Contains("Int2[]")) { - var line1 = StringUtility.Contact("var ", _field, "StringArray", " = ", "contents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); - var line2 = StringUtility.Contact("\t\t\t\t", _field, " = ", "new float", "[", _field, "StringArray.Length", "]", ";", "\n"); - var line3 = StringUtility.Contact("\t\t\t\t", "for (int i=0;i<", _field, "StringArray", ".Length", ";", "i++", ")", "\n"); - var line4 = "\t\t\t\t{\n"; - var line5 = StringUtility.Contact("\t\t\t\t\t", " float.TryParse(", _field, "StringArray", "[i]", ",", "out ", _field, "[i]", ")", ";", "\n"); - var line6 = "\t\t\t\t}"; + var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); + var line2 = StringUtility.Contact(retract3, field, " = ", "new Int2", "[", field, "StringArray.Length]", ";", "\n"); + var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n"); + var line4 = StringUtility.Contact(retract3, "{\n"); + var line5 = StringUtility.Contact(retract4, " Int2.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n"); + var line6 = StringUtility.Contact(retract3, "}"); return StringUtility.Contact(line1, line2, line3, line4, line5, line6); } - else if (_type.Contains("string[]")) + else if (type.Contains("Int3[]")) { - var line1 = StringUtility.Contact(_field, " = ", "contents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);"); + var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); + var line2 = StringUtility.Contact(retract3, field, " = ", "new Int3", "[", field, "StringArray.Length]", ";", "\n"); + var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n"); + var line4 = StringUtility.Contact(retract3, "{\n"); + var line5 = StringUtility.Contact(retract4, " Int3.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n"); + var line6 = StringUtility.Contact(retract3, "}"); + + return StringUtility.Contact(line1, line2, line3, line4, line5, line6); + } + else if (type.Contains("float[]")) + { + var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); + var line2 = StringUtility.Contact(retract3, field, " = ", "new float", "[", field, "StringArray.Length", "]", ";", "\n"); + var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n"); + var line4 = StringUtility.Contact(retract3, "{\n"); + var line5 = StringUtility.Contact(retract4, " float.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n"); + var line6 = StringUtility.Contact(retract3, "}"); + + return StringUtility.Contact(line1, line2, line3, line4, line5, line6); + } + else if (type.Contains("string[]")) + { + var line1 = StringUtility.Contact(field, " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);"); return line1; } - else if (_type.Contains("Vector3[]")) + else if (type.Contains("Vector3[]")) { - var line1 = StringUtility.Contact("var ", _field, "StringArray", " = ", "contents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); - var line2 = StringUtility.Contact("\t\t\t\t", _field, " = ", "new Vector3", "[", _field, "StringArray.Length", "]", ";", "\n"); - var line3 = StringUtility.Contact("\t\t\t\t", "for (int i=0;i<", _field, "StringArray", ".Length", ";", "i++", ")", "\n"); - var line4 = "\t\t\t\t{\n"; - var line5 = StringUtility.Contact("\t\t\t\t\t", _field, "[i]", "=", _field, "StringArray", "[i]", ".Vector3Parse()", ";", "\n"); - var line6 = "\t\t\t\t}"; + var line1 = StringUtility.Contact("string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n"); + var line2 = StringUtility.Contact(retract3, field, " = ", "new Vector3", "[", field, "StringArray.Length", "]", ";", "\n"); + var line3 = StringUtility.Contact(retract3, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n"); + var line4 = StringUtility.Contact(retract3, "{\n"); + var line5 = StringUtility.Contact(retract4, field, "[i]", "=", field, "StringArray", "[i]", ".Vector3Parse()", ";", "\n"); + var line6 = StringUtility.Contact(retract3, "}"); return StringUtility.Contact(line1, line2, line3, line4, line5, line6); } - else if (_type.Contains("int")) + else if (type.Contains("int")) { - return string.Format("int.TryParse(contents[{0}],out {1});", _index, _field); + return StringUtility.Contact("int.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; "); } - else if (_type.Contains("float")) + else if (type.Contains("float")) { - return string.Format("float.TryParse(contents[{0}],out {1});", _index, _field); + return StringUtility.Contact("float.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; "); } - else if (_type.Contains("string")) + else if (type.Contains("string")) { - return string.Format("{0} = contents[{1}].Trim();", _field.Contains("[") ? _field.Substring(0, _field.IndexOf("[")) : _field, _index); + return StringUtility.Contact(field, " = ", "tables", "[", index, "]", ";"); } - else if (_type.Contains("Vector3")) + else if (type.Contains("Vector3")) { - return StringUtility.Contact(_field, "=", "contents", "[", _index, "]", ".Vector3Parse()", ";"); + return StringUtility.Contact(field, "=", "tables", "[", index, "]", ".Vector3Parse()", ";"); + } + else if (type.Contains("bool")) + { + var line1 = StringUtility.Contact("var ", field, "Temp", " = 0", ";", "\n"); + var line2 = StringUtility.Contact(retract3, "int.TryParse(tables", "[", index, "]", ",", "out ", field, "Temp", ")", "; ", "\n"); + var line3 = StringUtility.Contact(retract3, field, "=", field, "Temp", "!=0", ";"); + return StringUtility.Contact(line1, line2, line3); + } + else if (type.Contains("Int2")) + { + return StringUtility.Contact("Int2.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; "); + } + else if (type.Contains("Int3")) + { + return StringUtility.Contact("Int3.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; "); } else { return string.Empty; } } - static string configClassPath = "Assets" + "/" + "Scripts/Core/GameEngine/Model/Config"; static string templatePath = "Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt"; @@ -176,11 +255,12 @@ var newConfigPath = configClassPath + string.Format("/{0}Config.cs", _name); AssetDatabase.DeleteAsset(newConfigPath); UnityEngine.Object o = CreateScriptAssetFromTemplate(newConfigPath, templatePath); + AddConfigInit(newConfigPath); ProjectWindowUtil.ShowCreatedAsset(o); - if (CreateConfigData.fileCreateEvent != null) + if (FileCreateEvent != null) { - CreateConfigData.fileCreateEvent(); + FileCreateEvent(); } } @@ -194,9 +274,9 @@ string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension); text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString()); - text = Regex.Replace(text, "#PrimaryKey#", CreateConfigData.primaryKey); - text = Regex.Replace(text, "#Field#", CreateConfigData.filedContent); - text = Regex.Replace(text, "#Read#", CreateConfigData.readContent); + text = Regex.Replace(text, "#Field#", CreateConfigClassFile.filedContent); + text = Regex.Replace(text, "#Read#", CreateConfigClassFile.readContent); + text = Regex.Replace(text, "#FileName#", fileNameWithoutExtension.Substring(0, fileNameWithoutExtension.Length - 6)); bool encoderShouldEmitUTF8Identifier = true; bool throwOnInvalidBytes = false; @@ -208,6 +288,36 @@ AssetDatabase.ImportAsset(pathName); return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object)); } + + internal static void AddConfigInit(string pathName) + { + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); + string add1 = string.Format("{0}.Init();{1}", fileNameWithoutExtension, "\r\n\t\ttaskCount++;"); + string add2 = string.Format("completeCount += {0}.inited ? 1 : 0;", fileNameWithoutExtension); + + string path = Application.dataPath + "/Scripts/Utility/ConfigInitiator.cs"; + var text = File.ReadAllText(path); + + if (!text.Contains(add1)) + { + text = text.Replace("//鍒濆鍖栫粨鏉焅r\n", add1 + "\r\n" + "\t\t//鍒濆鍖栫粨鏉焅r\n"); + } + + if (!text.Contains(add2)) + { + text = text.Replace("//缁熻閰嶇疆琛ㄨВ鏋愯繘搴r\n", add2 + "\r\n" + "\t\t//缁熻閰嶇疆琛ㄨВ鏋愯繘搴r\n"); + } + + bool encoderShouldEmitUTF8Identifier = true; + bool throwOnInvalidBytes = false; + UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes); + bool append = false; + StreamWriter streamWriter = new StreamWriter(path, append, encoding); + streamWriter.Write(text); + streamWriter.Close(); + AssetDatabase.ImportAsset(path); + + } } -- Gitblit v1.8.0