using System.Collections;
|
using System.Collections.Generic;
|
using UnityEditor.ProjectWindowCallback;
|
using UnityEngine;
|
using UnityEditor;
|
using System;
|
using System.IO;
|
using System.Text;
|
using System.Text.RegularExpressions;
|
|
public class CreateLuaWindowClassFile
|
{
|
static string templatePath = "Assets/Editor/ScriptTemplate/LuaWindowTemplate.txt";
|
|
[MenuItem("Assets/Create/Lua/LuaWindow", false, 4)]
|
public static void CreateLuaClass()
|
{
|
var path = GetSelectedPathOrFallback() + "/NewLuaWindow.lua";
|
AssetDatabase.DeleteAsset(path);
|
ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance<LuaWindowTemplate>(), 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 LuaWindowTemplate : 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 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));
|
}
|
|
}
|