|  |  |  | 
|---|
|  |  |  | using System.Text; | 
|---|
|  |  |  | using System.Text.RegularExpressions; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class CreateLuaClassFile | 
|---|
|  |  |  | public class CreateLuaWindowClassFile | 
|---|
|  |  |  | { | 
|---|
|  |  |  | static string templatePath = "Assets/Editor/ScriptTemplate/LuaWindowTemplate.txt"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | StreamReader streamReader = new StreamReader(resourceFile); | 
|---|
|  |  |  | string text = streamReader.ReadToEnd(); | 
|---|
|  |  |  | streamReader.Close(); | 
|---|
|  |  |  | string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); | 
|---|
|  |  |  | var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); | 
|---|
|  |  |  | text = Regex.Replace(text, "#ClassName#", fileNameWithoutExtension); | 
|---|
|  |  |  | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | bool encoderShouldEmitUTF8Identifier = true; | 
|---|
|  |  |  | 
|---|
|  |  |  | return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class CreateLuaBehaviourClassFile | 
|---|
|  |  |  | { | 
|---|
|  |  |  | static string templatePath = "Assets/Editor/ScriptTemplate/LuaBehaviourTemplate.txt"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | [MenuItem("Assets/Create/Lua/LuaBehaviour", false, 4)] | 
|---|
|  |  |  | public static void CreateLuaClass() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var path = GetSelectedPathOrFallback() + "/NewBehaviour.lua"; | 
|---|
|  |  |  | AssetDatabase.DeleteAsset(path); | 
|---|
|  |  |  | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<LuaBehaviourTemplate>(), path, null, templatePath); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static string GetSelectedPathOrFallback() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string path = "Assets"; | 
|---|
|  |  |  | foreach (UnityEngine.Object obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | path = AssetDatabase.GetAssetPath(obj); | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(path) && File.Exists(path)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | path = Path.GetDirectoryName(path); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return path; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class LuaBehaviourTemplate : EndNameEditAction | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public override void Action(int instanceId, string pathName, string resourceFile) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile); | 
|---|
|  |  |  | ProjectWindowUtil.ShowCreatedAsset(o); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string fullPath = Path.GetFullPath(pathName); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StreamReader streamReader = new StreamReader(resourceFile); | 
|---|
|  |  |  | string text = streamReader.ReadToEnd(); | 
|---|
|  |  |  | streamReader.Close(); | 
|---|
|  |  |  | var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); | 
|---|
|  |  |  | text = Regex.Replace(text, "#ClassName#", fileNameWithoutExtension); | 
|---|
|  |  |  | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class CreateLuaConfigClassFile | 
|---|
|  |  |  | { | 
|---|
|  |  |  | static string templatePath = "Assets/Editor/ScriptTemplate/LuaConfigTemplate.txt"; | 
|---|
|  |  |  | public static string readContent = string.Empty; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | [MenuItem("Assets/生成Lua配置解析类型")] | 
|---|
|  |  |  | public static void CreateLuaClass() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (Selection.objects != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var item in Selection.objects) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var name = item.name; | 
|---|
|  |  |  | MakeReadContent(Application.dataPath.Replace("Assets", "") + AssetDatabase.GetAssetPath(item)); | 
|---|
|  |  |  | var path = string.Format("Assets/ResourcesOut/Lua/config/{0}Config.lua", name); | 
|---|
|  |  |  | AssetDatabase.DeleteAsset(path); | 
|---|
|  |  |  | ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, | 
|---|
|  |  |  | ScriptableObject.CreateInstance<LuaConfigTemplate>(), path, null, templatePath); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void MakeReadContent(string path) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var fileInfo = new FileInfo(path); | 
|---|
|  |  |  | 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 readString = GetRead(type, field, index + 1); | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(readString)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | index++; | 
|---|
|  |  |  | readFulls.Add(readString); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | readContent = string.Join("\r\n\t\t", readFulls.ToArray()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | static string GetRead(string _type, string _field, int _index) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _field = _field.Replace(" ", ""); | 
|---|
|  |  |  | if (_type.Contains("int[]") || _type.Contains("float[]")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return string.Format("subTable.{0} = stringArray_to_numberArray(Split(contents[{1}], '|'))", _field, _index); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (_type.Contains("Int2[]")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return string.Format("subTable.{0} = stringArray_to_Int2Array(Split(contents[{1}], '|'))", _field, _index); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (_type.Contains("string[]")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return string.Format("subTable.{0} = Split(contents[{1}], '|')", _field, _index); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (_type.Contains("Int2")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return string.Format("subTable.{0} = toInt2(Split(contents[{1}], '|'))", _field, _index); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (_type.Contains("int") || _type.Contains("float")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return string.Format("subTable.{0} = tonumber(contents[{1}])", _field, _index); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (_type.Contains("string")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return string.Format("subTable.{0} = contents[{1}]", _field, _index); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return string.Empty; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class LuaConfigTemplate : EndNameEditAction | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public override void Action(int instanceId, string pathName, string resourceFile) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile); | 
|---|
|  |  |  | ProjectWindowUtil.ShowCreatedAsset(o); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string fullPath = Path.GetFullPath(pathName); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StreamReader streamReader = new StreamReader(resourceFile); | 
|---|
|  |  |  | string text = streamReader.ReadToEnd(); | 
|---|
|  |  |  | streamReader.Close(); | 
|---|
|  |  |  | var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName); | 
|---|
|  |  |  | text = Regex.Replace(text, "#ClassName#", fileNameWithoutExtension.Substring(0, fileNameWithoutExtension.Length - 6)); | 
|---|
|  |  |  | text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString()); | 
|---|
|  |  |  | text = Regex.Replace(text, "#Read#", CreateLuaConfigClassFile.readContent); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|