293 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			293 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			C#
		
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using UnityEngine;
 | 
						|
using UnityEditor;
 | 
						|
using System.IO;
 | 
						|
using System.Linq;
 | 
						|
using System.Text;
 | 
						|
using System.Text.RegularExpressions;
 | 
						|
using System;
 | 
						|
 | 
						|
public class GenConfig
 | 
						|
{
 | 
						|
    public static string SavePath = Application.dataPath + "/GenConfig/";
 | 
						|
    public static string CheckOutputPath = Application.dataPath + "/GenConfig/";
 | 
						|
    public static string CheckFilePath = Application.dataPath + "/LuaFramework/Resources/";
 | 
						|
 | 
						|
    static StringBuilder sb = new StringBuilder();
 | 
						|
    static string bundleName_Identify = "bundle";
 | 
						|
    static string tableName_Identify = "table";
 | 
						|
    static string output_Identify = "out";
 | 
						|
    static string type_Identify = "type";
 | 
						|
 | 
						|
    [MenuItem("Assets/Gen Lua Config", false, 10)]
 | 
						|
    private static void GenSelectLuaFile()
 | 
						|
    {
 | 
						|
        //确保鼠标右键选择的是一个Prefab
 | 
						|
        var files = Selection.GetFiltered<TextAsset>(SelectionMode.DeepAssets);
 | 
						|
        if (files.Length <= 0)
 | 
						|
            return;
 | 
						|
 | 
						|
        for (int i = 0; i < files.Length; i++)
 | 
						|
        {
 | 
						|
            string text = files[i].ToString();
 | 
						|
            GenLuaConfig(text);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static string[] GetValidLines(string content)
 | 
						|
    {
 | 
						|
        var lineContent = content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
 | 
						|
        if (lineContent.Length <= 0)
 | 
						|
            return lineContent;
 | 
						|
 | 
						|
        List<string> lineList = new List<string>();
 | 
						|
        for (int i = 0; i < lineContent.Length; i++)
 | 
						|
        {
 | 
						|
            var cells = lineContent[i].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
 | 
						|
            if (cells.Length > 0)
 | 
						|
            {
 | 
						|
                lineList.Add(lineContent[i]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return lineList.ToArray();
 | 
						|
    }
 | 
						|
 | 
						|
    static void GenLuaConfig(string content)
 | 
						|
    {
 | 
						|
        sb = new StringBuilder();
 | 
						|
 | 
						|
        var lineContent = GetValidLines(content);
 | 
						|
        if (lineContent.Length <= 0)
 | 
						|
            return;
 | 
						|
 | 
						|
        var bundleName = FindContentString(bundleName_Identify, lineContent);
 | 
						|
        var tableName = FindContentString(tableName_Identify, lineContent);
 | 
						|
        var outRowIndexs = FindOutPutRows(lineContent);
 | 
						|
 | 
						|
        var typeLineIndex = FindContentLineIndex(type_Identify, lineContent);
 | 
						|
        var typeLineCells = lineContent[typeLineIndex].Split(new string[] { "," }, StringSplitOptions.None);
 | 
						|
        var startIndex = typeLineIndex + 1;
 | 
						|
 | 
						|
 | 
						|
        sb.AppendLine(tableName + " =");
 | 
						|
        sb.AppendLine("{");
 | 
						|
        sb.AppendLine("bundleName = " + " '" + bundleName + "', ");
 | 
						|
 | 
						|
        int intValue;
 | 
						|
        for (int i = startIndex; i < lineContent.Length; i++)
 | 
						|
        {
 | 
						|
            var cells = lineContent[i].Split(new string[] { "," }, StringSplitOptions.None);
 | 
						|
            for (int k = 0; k < outRowIndexs.Length; k++)
 | 
						|
            {
 | 
						|
                var index = outRowIndexs[k];
 | 
						|
                Debug.LogWarning("LineIndex:   " + i + "     cellIndex:   " + index);
 | 
						|
                if (!string.IsNullOrEmpty(cells[index]))
 | 
						|
                {
 | 
						|
                    if (k == 0)
 | 
						|
                    {
 | 
						|
                        if (int.TryParse(cells[index], out intValue))
 | 
						|
                        {
 | 
						|
                            sb.Append(" [" + cells[index] + "]");
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            sb.Append(cells[index]);
 | 
						|
                        }
 | 
						|
                        sb.Append(" = { ");
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        var typeName = typeLineCells[index];
 | 
						|
                        sb.Append(typeName + " = ");
 | 
						|
                        sb.Append(ProcessCell_Info(cells[index]));
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                if (k == outRowIndexs.Length - 1)
 | 
						|
                {
 | 
						|
                    sb.AppendLine(" },");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        sb.AppendLine("}");
 | 
						|
 | 
						|
        if (!Directory.Exists(SavePath))
 | 
						|
            Directory.CreateDirectory(SavePath);
 | 
						|
 | 
						|
        string filePath = SavePath + "Test.lua";
 | 
						|
        if (File.Exists(filePath))
 | 
						|
            File.Delete(filePath);
 | 
						|
 | 
						|
        File.WriteAllText(filePath, sb.ToString());
 | 
						|
    }
 | 
						|
 | 
						|
    static string ProcessCell_Info(string content)
 | 
						|
    {
 | 
						|
        StringBuilder temp = new StringBuilder();
 | 
						|
        var split = content.Split(new string[] { "|" }, StringSplitOptions.None);
 | 
						|
        for (int i = 0; i < split.Length; i++)
 | 
						|
        {
 | 
						|
            if (i == 0)
 | 
						|
            {
 | 
						|
                temp.Append(" { '" + split[i] + "', ");
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                temp.Append("'" + split[i] + "', ");
 | 
						|
            }
 | 
						|
 | 
						|
            if (i == split.Length - 1)
 | 
						|
            {
 | 
						|
                temp.Append("}, ");
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return temp.ToString();
 | 
						|
    }
 | 
						|
 | 
						|
    static int FindContentLineIndex(string findContent, string[] lineContent)
 | 
						|
    {
 | 
						|
        for (int i = 0; i < lineContent.Length; i++)
 | 
						|
        {
 | 
						|
            var lineCells = lineContent[i].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
 | 
						|
            for (int j = 0; j < lineCells.Length; j++)
 | 
						|
            {
 | 
						|
                if (lineCells[j].Equals(findContent))
 | 
						|
                    return i;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return -1;
 | 
						|
    }
 | 
						|
 | 
						|
    static string FindContentString(string findContent, string[] lineContent)
 | 
						|
    {
 | 
						|
        for (int i = 0; i < lineContent.Length; i++)
 | 
						|
        {
 | 
						|
            var lineCells = lineContent[i].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
 | 
						|
            for (int j = 0; j < lineCells.Length; j++)
 | 
						|
            {
 | 
						|
                if (lineCells[j].Equals(findContent))
 | 
						|
                    return lineCells[j + 1];
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return string.Empty;
 | 
						|
    }
 | 
						|
 | 
						|
    static int[] FindOutPutRows(string[] lineContent)
 | 
						|
    {
 | 
						|
        List<int> output = new List<int>();
 | 
						|
        var index = FindContentLineIndex(output_Identify, lineContent);
 | 
						|
        var cells = lineContent[index].Split(new string[] { "," }, StringSplitOptions.None);
 | 
						|
        for (int i = 1; i < cells.Length; i++)
 | 
						|
        {
 | 
						|
            if (!string.IsNullOrEmpty(cells[i]))
 | 
						|
            {
 | 
						|
                output.Add(i);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return output.ToArray();
 | 
						|
    }
 | 
						|
 | 
						|
    [MenuItem("Assets/Check Lua Config", false, 11)]
 | 
						|
    static void CheckConfigResources()
 | 
						|
    {
 | 
						|
        //确保鼠标右键选择的是一个Prefab
 | 
						|
        var files = Selection.GetFiltered<TextAsset>(SelectionMode.DeepAssets);
 | 
						|
        if (files.Length <= 0)
 | 
						|
            return;
 | 
						|
 | 
						|
        if (!Directory.Exists(CheckOutputPath))
 | 
						|
            Directory.CreateDirectory(CheckOutputPath);
 | 
						|
 | 
						|
        string filePath = CheckOutputPath + "Test.lua";
 | 
						|
        if (File.Exists(filePath))
 | 
						|
            File.Delete(filePath);
 | 
						|
 | 
						|
        for (int i = 0; i < files.Length; i++)
 | 
						|
        {
 | 
						|
            string text = files[i].ToString();
 | 
						|
            CheckConfig(text);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    static void CheckConfig(string text)
 | 
						|
    {
 | 
						|
        sb = new StringBuilder();
 | 
						|
 | 
						|
        var lineContent = GetValidLines(text);
 | 
						|
        if (lineContent.Length <= 0)
 | 
						|
            return;
 | 
						|
 | 
						|
        var bundleName = FindContentString(bundleName_Identify, lineContent);
 | 
						|
        var tableName = FindContentString(tableName_Identify, lineContent);
 | 
						|
        var outRowIndexs = FindOutPutRows(lineContent);
 | 
						|
 | 
						|
        var typeLineIndex = FindContentLineIndex(type_Identify, lineContent);
 | 
						|
        var typeLineCells = lineContent[typeLineIndex].Split(new string[] { "," }, StringSplitOptions.None);
 | 
						|
        var startIndex = typeLineIndex + 1;
 | 
						|
 | 
						|
 | 
						|
        sb.AppendLine(tableName + " =");
 | 
						|
        sb.AppendLine("{");
 | 
						|
        sb.AppendLine("bundleName = " + " '" + bundleName + "', ");
 | 
						|
 | 
						|
        for (int i = startIndex; i < lineContent.Length; i++)
 | 
						|
        {
 | 
						|
            var cells = lineContent[i].Split(new string[] { "," }, StringSplitOptions.None);
 | 
						|
            for (int k = 0; k < outRowIndexs.Length; k++)
 | 
						|
            {
 | 
						|
                var index = outRowIndexs[k];
 | 
						|
                Debug.LogWarning("LineIndex:   " + i + "     cellIndex:   " + index);
 | 
						|
                if (!string.IsNullOrEmpty(cells[index]))
 | 
						|
                {
 | 
						|
                    if (k == 0)
 | 
						|
                    {
 | 
						|
                        sb.Append(" Header =" + cells[index]);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (!CheckHasFile(CheckFilePath, cells[index]))
 | 
						|
                        {
 | 
						|
                            sb.Append( "   " + cells[index]);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                if (k == outRowIndexs.Length - 1)
 | 
						|
                {
 | 
						|
                    sb.AppendLine(" ");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        sb.AppendLine("}");
 | 
						|
 | 
						|
        string filePath = SavePath + "Test.lua";
 | 
						|
        File.AppendAllText(filePath, sb.ToString());
 | 
						|
    }
 | 
						|
 | 
						|
    static bool CheckHasFile(string path, string name)
 | 
						|
    {
 | 
						|
        string[] files = Directory.GetFiles(path);
 | 
						|
 | 
						|
        for (int i = 0; i < files.Length; i++)
 | 
						|
        {
 | 
						|
            if (files[i].Equals(name))
 | 
						|
                return true;
 | 
						|
        }
 | 
						|
 | 
						|
        string[] dirs = Directory.GetDirectories(path);
 | 
						|
        for (int i = 0; i < dirs.Length; i++)
 | 
						|
        {
 | 
						|
             return CheckHasFile(dirs[i], name);
 | 
						|
        }
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
}
 |