From 57d8018b909bb87bf9af486b7008b7ca7b8157e7 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 13 十一月 2023 12:17:58 +0800
Subject: [PATCH] 0312 读表增加对数组和二维数组的解析

---
 Assets/Editor/Tool/ConfigClassGenerate.cs |  697 +++++++++++++++++++++++++++++----------------------------
 1 files changed, 356 insertions(+), 341 deletions(-)

diff --git a/Assets/Editor/Tool/ConfigClassGenerate.cs b/Assets/Editor/Tool/ConfigClassGenerate.cs
index 0efc865..076c642 100644
--- a/Assets/Editor/Tool/ConfigClassGenerate.cs
+++ b/Assets/Editor/Tool/ConfigClassGenerate.cs
@@ -1,341 +1,356 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEditor.ProjectWindowCallback;
-using UnityEngine;
-using UnityEditor;
-using System.IO;
-using System.Text;
-using System.Text.RegularExpressions;
-using System;
-using UnityEngine.Events;
-
-public class CreateConfigClassFile
-{
-
-    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 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, bool isIL = false)
-    {
-        var lines = File.ReadAllLines(fileInfo.FullName);
-        if (lines.Length > 2)
-        {
-            var typeLine = lines[0];
-            var fieldLine = lines[1];
-            var types = typeLine.Split('\t');
-            var fields = fieldLine.Split('\t');
-            var min = Mathf.Min(types.Length, fields.Length);
-            var fieldFulls = new List<string>();
-            var readFulls = new List<string>();
-
-            int index = 0;
-            for (int j = 0; j < min; j++)
-            {
-                var type = types[j];
-                var field = fields[j];
-                var fieldstring = GetField(type, field);
-                var readString = GetRead(type, field, index);
-                if (!string.IsNullOrEmpty(fieldstring))
-                {
-                    fieldFulls.Add(fieldstring);
-                }
-
-                if (!string.IsNullOrEmpty(readString))
-                {
-                    index++;
-                    readFulls.Add(readString);
-                }
-            }
-
-            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('.')), isIL);
-        }
-
-    }
-
-    public static string GetField(string type, string field)
-    {
-        field = field.Replace(" ", "");
-        if (type.Contains("int[]"))
-        {
-            return StringUtility.Contact("public readonly int[] ", 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 if (type.Contains("float[]"))
-        {
-            return StringUtility.Contact("public readonly float[] ", field.Trim(), ";");
-        }
-        else if (type.Contains("string[]"))
-        {
-            return StringUtility.Contact("public readonly string[] ", field.Trim(), ";");
-        }
-        else if (type.Contains("Vector3[]"))
-        {
-            return StringUtility.Contact("public readonly Vector3[] ", field.Trim(), ";");
-        }
-        else if (type.Contains("int"))
-        {
-            return StringUtility.Contact("public readonly int ", field.Trim(), ";");
-        }
-        else if (type.Contains("long"))
-        {
-            return StringUtility.Contact("public readonly long ", field.Trim(), ";");
-        }
-        else if (type.Contains("float"))
-        {
-            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
-        {
-            return string.Empty;
-        }
-    }
-
-    public static string GetRead(string type, string field, int index)
-    {
-        field = field.Replace(" ", "");
-        if (type.Contains("int[]"))
-        {
-            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("Int2[]"))
-        {
-            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("Int3[]"))
-        {
-            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[]"))
-        {
-            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"))
-        {
-            return StringUtility.Contact("int.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
-        }
-        else if (type.Contains("long"))
-        {
-            return StringUtility.Contact("long.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
-        }
-        else if (type.Contains("float"))
-        {
-            return StringUtility.Contact("float.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
-        }
-        else if (type.Contains("string"))
-        {
-            return StringUtility.Contact(field, " = ", "tables", "[", index, "]", ";");
-        }
-        else if (type.Contains("Vector3"))
-        {
-            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 configILClassPath = "LogicProject/Src/Config";
-    static string templatePath = "Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt";
-
-    public static void CreatNewConfigClass(string _name, bool isIL)
-    {
-        string newConfigPath;
-        if (isIL)
-        {
-            newConfigPath = configILClassPath + string.Format("/IL{0}Config.cs", _name);
-        }
-        else
-        { 
-            newConfigPath = configClassPath + string.Format("/{0}Config.cs", _name);
-        } 
-        AssetDatabase.DeleteAsset(newConfigPath);
-        UnityEngine.Object o = CreateScriptAssetFromTemplate(newConfigPath, templatePath, isIL);
-        ProjectWindowUtil.ShowCreatedAsset(o);
-    }
-
-    internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile, bool isIL)
-    {
-        string fullPath = Path.GetFullPath(pathName);
-
-        StreamReader streamReader = new StreamReader(resourceFile);
-        string text = streamReader.ReadToEnd();
-        streamReader.Close();
-        string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
-        text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension);
-        text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString());
-        text = Regex.Replace(text, "#Field#", CreateConfigClassFile.filedContent);
-        text = Regex.Replace(text, "#Read#", CreateConfigClassFile.readContent);
-        if (isIL)
-        {
-            text = Regex.Replace(text, "#FileName#", fileNameWithoutExtension.Substring(2, fileNameWithoutExtension.Length - 8));
-        }
-        else
-        { 
-            text = Regex.Replace(text, "#FileName#", fileNameWithoutExtension.Substring(0, fileNameWithoutExtension.Length - 6));
-        }
-
-        bool encoderShouldEmitUTF8Identifier = true;
-        bool throwOnInvalidBytes = false;
-        UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
-        bool append = false;
-        StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
-        streamWriter.Write(text);
-        streamWriter.Close();
-        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();taskCount++;", fileNameWithoutExtension);
-        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");
-        }
-        else
-        {
-            Debug.Log(fileNameWithoutExtension);
-        }
-
-        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);
-
-    }
-}
-
-
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEditor.ProjectWindowCallback;
+using UnityEngine;
+using UnityEditor;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System;
+using UnityEngine.Events;
+
+public class CreateConfigClassFile
+{
+
+    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 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, bool isIL = false)
+    {
+        var lines = File.ReadAllLines(fileInfo.FullName);
+        if (lines.Length > 2)
+        {
+            var typeLine = lines[0];
+            var fieldLine = lines[1];
+            var types = typeLine.Split('\t');
+            var fields = fieldLine.Split('\t');
+            var min = Mathf.Min(types.Length, fields.Length);
+            var fieldFulls = new List<string>();
+            var readFulls = new List<string>();
+
+            int index = 0;
+            for (int j = 0; j < min; j++)
+            {
+                var type = types[j];
+                var field = fields[j];
+                var fieldstring = GetField(type, field);
+                var readString = GetRead(type, field, index);
+                if (!string.IsNullOrEmpty(fieldstring))
+                {
+                    fieldFulls.Add(fieldstring);
+                }
+
+                if (!string.IsNullOrEmpty(readString))
+                {
+                    index++;
+                    readFulls.Add(readString);
+                }
+            }
+
+            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('.')), isIL);
+        }
+
+    }
+
+    public static string GetField(string type, string field)
+    {
+        field = field.Replace(" ", "");
+        if (type.Contains("int[][]"))
+        {
+            return StringUtility.Contact("public readonly int[][] ", field.Trim(), ";");
+        }
+        else if (type.Contains("int[]"))
+        {
+            return StringUtility.Contact("public readonly int[] ", 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 if (type.Contains("float[]"))
+        {
+            return StringUtility.Contact("public readonly float[] ", field.Trim(), ";");
+        }
+        else if (type.Contains("string[]"))
+        {
+            return StringUtility.Contact("public readonly string[] ", field.Trim(), ";");
+        }
+        else if (type.Contains("Vector3[]"))
+        {
+            return StringUtility.Contact("public readonly Vector3[] ", field.Trim(), ";");
+        }
+        else if (type.Contains("int"))
+        {
+            return StringUtility.Contact("public readonly int ", field.Trim(), ";");
+        }
+        else if (type.Contains("long"))
+        {
+            return StringUtility.Contact("public readonly long ", field.Trim(), ";");
+        }
+        else if (type.Contains("float"))
+        {
+            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
+        {
+            return string.Empty;
+        }
+    }
+
+    public static string GetRead(string type, string field, int index)
+    {
+        field = field.Replace(" ", "");
+        if (type.Contains("int[][]"))
+        {
+            return StringUtility.Contact(field, " = JsonMapper.ToObject<int[][]>(tables", "[", index, "]", ")", "; ");
+        }
+        else if (type.Contains("int[]"))
+        {
+            var line0 = StringUtility.Contact("if (tables", "[", index, "].Contains(\"[\"))\n");
+            var line0_1 = StringUtility.Contact(retract3, "{\n");
+            var line0_2 = StringUtility.Contact(retract4, field, " = JsonMapper.ToObject<int[]>(tables", "[", index, "]);\n");
+            var line0_3 = StringUtility.Contact(retract3, "}\n");
+            var line0_4 = StringUtility.Contact(retract3, "else\n");
+            var line0_5 = StringUtility.Contact(retract3, "{\n");
+            var line1 = StringUtility.Contact(retract4, "string[] ", field, "StringArray", " = ", "tables", "[", index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
+            var line2 = StringUtility.Contact(retract4, field, " = ", "new int", "[", field, "StringArray.Length]", ";", "\n");
+            var line3 = StringUtility.Contact(retract4, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
+            var line4 = StringUtility.Contact(retract4, "{\n");
+            var line5 = StringUtility.Contact(retract5, " int.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
+            var line6 = StringUtility.Contact(retract4, "}\n");
+            var line0_6 = StringUtility.Contact(retract3, "}");
+
+            return StringUtility.Contact(line0, line0_1, line0_2, line0_3, line0_4, line0_5, line1, line2, line3, line4, line5, line6, line0_6);
+        }
+        else if (type.Contains("Int2[]"))
+        {
+            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("Int3[]"))
+        {
+            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[]"))
+        {
+            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"))
+        {
+            return StringUtility.Contact("int.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+        }
+        else if (type.Contains("long"))
+        {
+            return StringUtility.Contact("long.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+        }
+        else if (type.Contains("float"))
+        {
+            return StringUtility.Contact("float.TryParse(tables", "[", index, "]", ",", "out ", field, ")", "; ");
+        }
+        else if (type.Contains("string"))
+        {
+            return StringUtility.Contact(field, " = ", "tables", "[", index, "]", ";");
+        }
+        else if (type.Contains("Vector3"))
+        {
+            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 configILClassPath = "LogicProject/Src/Config";
+    static string templatePath = "Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt";
+
+    public static void CreatNewConfigClass(string _name, bool isIL)
+    {
+        string newConfigPath;
+        if (isIL)
+        {
+            newConfigPath = configILClassPath + string.Format("/IL{0}Config.cs", _name);
+        }
+        else
+        { 
+            newConfigPath = configClassPath + string.Format("/{0}Config.cs", _name);
+        } 
+        AssetDatabase.DeleteAsset(newConfigPath);
+        UnityEngine.Object o = CreateScriptAssetFromTemplate(newConfigPath, templatePath, isIL);
+        ProjectWindowUtil.ShowCreatedAsset(o);
+    }
+
+    internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile, bool isIL)
+    {
+        string fullPath = Path.GetFullPath(pathName);
+
+        StreamReader streamReader = new StreamReader(resourceFile);
+        string text = streamReader.ReadToEnd();
+        streamReader.Close();
+        string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
+        text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension);
+        text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString());
+        text = Regex.Replace(text, "#Field#", CreateConfigClassFile.filedContent);
+        text = Regex.Replace(text, "#Read#", CreateConfigClassFile.readContent);
+        if (isIL)
+        {
+            text = Regex.Replace(text, "#FileName#", fileNameWithoutExtension.Substring(2, fileNameWithoutExtension.Length - 8));
+        }
+        else
+        { 
+            text = Regex.Replace(text, "#FileName#", fileNameWithoutExtension.Substring(0, fileNameWithoutExtension.Length - 6));
+        }
+
+        bool encoderShouldEmitUTF8Identifier = true;
+        bool throwOnInvalidBytes = false;
+        UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
+        bool append = false;
+        StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
+        streamWriter.Write(text);
+        streamWriter.Close();
+        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();taskCount++;", fileNameWithoutExtension);
+        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");
+        }
+        else
+        {
+            Debug.Log(fileNameWithoutExtension);
+        }
+
+        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