| | |
| | | using System.Text; |
| | | using System.Text.RegularExpressions; |
| | | |
| | | public class CreateLuaClassFile |
| | | public class CreateLuaWindowClassFile |
| | | { |
| | | static string templatePath = "Assets/Editor/ScriptTemplate/LuaWindowTemplate.txt"; |
| | | |
| | |
| | | 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)); |
| | | } |
| | | |
| | | } |
| | | |