Browse Source

代码整理

main
coffee 5 months ago
parent
commit
c1bbb0f4f7
  1. 24
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs
  2. 17
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs
  3. 9
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs
  4. 17
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs

24
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs

@ -1,24 +1,34 @@
using System.Collections.Generic;
using OfficeOpenXml;
using Sirenix.OdinInspector;
using Tools.Editor;
using UnityEngine;
namespace Tools.ExcelResolver.Editor
{
[InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)]
public sealed class ExcelResolverEditorConfig : SerializedScriptableObject
internal sealed class ExcelResolverEditorConfig : SerializedScriptableObject
{
[LabelText("Excel路径"), FolderPath]
public string ExcelPathRoot = "Assets/_Project/ExcelResolver/Excel";
[SerializeField] internal string ExcelPathRoot = "Assets/_Project/ExcelResolver/Excel";
[LabelText("C#代码路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")]
public string CodePathRoot = "Assets/_Project/Scripts/Generator/Excel";
[SerializeField] internal string CodePathRoot = "Assets/_Project/Scripts/Generator/Excel";
[LabelText("SO存放路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")]
public string SOPathRoot = "Assets/_Project/ScriptableObject/Excel";
[SerializeField] internal string SOPathRoot = "Assets/_Project/ScriptableObject/Excel";
[LabelText("生成代码命名空间")]
public string GenerateDataClassNameSpace = "Tools.ExcelResolver";
[SerializeField] internal string GenerateDataClassNameSpace = "Tools.ExcelResolver";
public Dictionary<string, string> md5Dict = new();
[LabelText("导表前清空Console")]
[SerializeField] internal bool isClearConsole = true;
[LabelText("使用MD5跳过未修改的表格")]
[SerializeField] internal bool useMD5 = true;
public void MakeSureDirectory()
[ShowInInspector] internal Dictionary<ExcelWorksheet, ClassCodeData> classCodeDataDict;
[ShowInInspector] internal Dictionary<string, string> md5Dict = new();
internal void MakeSureDirectory()
{
DirectoryUtil.MakeSureDirectory(ExcelPathRoot);
DirectoryUtil.MakeSureDirectory(SOPathRoot);

17
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs

@ -13,9 +13,9 @@ namespace Tools.ExcelResolver.Editor
{
public sealed partial class ExcelResolverEditorWindow
{
private void ReadExcel(bool onlyGetClassCodeData = false)
private void ReadExcel()
{
classCodeDataDict = new Dictionary<ExcelWorksheet, ClassCodeData>();
excelResolverConfig.classCodeDataDict = new Dictionary<ExcelWorksheet, ClassCodeData>();
// 获取Excel文件
excelResolverConfig.MakeSureDirectory();
@ -32,7 +32,7 @@ namespace Tools.ExcelResolver.Editor
using MD5 md5 = MD5.Create();
byte[] hash = md5.ComputeHash(stream);// 转换为十六进制字符串
var m = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
if (excelResolverConfig.md5Dict.GetValueOrDefault(excelFile.FullName) == m && useMD5)
if (excelResolverConfig.md5Dict.GetValueOrDefault(excelFile.FullName) == m && excelResolverConfig.useMD5)
{
Debug.Log($"'{excelFile.Name}' 文件未发生变化,跳过");
continue;
@ -52,16 +52,13 @@ namespace Tools.ExcelResolver.Editor
classCodeData.fields = GetFieldData(worksheet, classCodeData);
classCodeData.tableType = CheckTableTypeAndSetKeyField(worksheet, classCodeData);
if (!onlyGetClassCodeData)
{
WriteDataCode(classCodeData);
WriteUtilCode(classCodeData);
}
classCodeDataDict.Add(worksheet, classCodeData);
WriteDataCode(classCodeData);
WriteUtilCode(classCodeData);
excelResolverConfig.classCodeDataDict.Add(worksheet, classCodeData);
Debug.Log($"读取Excel文件:'{excelFile.Name}',并生成代码");
}
if (classCodeDataDict.Count == 0)
if (excelResolverConfig.classCodeDataDict.Count == 0)
{
Debug.LogError("未检测到Excel文件改动,如需重新生成,请清空md5Dict");
return;

9
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs

@ -12,16 +12,9 @@ namespace Tools.ExcelResolver.Editor
{
public sealed partial class ExcelResolverEditorWindow
{
[FoldoutGroup("Hide Setting")]
[ShowInInspector] private Dictionary<ExcelWorksheet, ClassCodeData> classCodeDataDict;
private void WriteDataSO()
{
if (classCodeDataDict == null)
{
ReadExcel(true);
}
foreach (var classCodeDataDictPair in classCodeDataDict)
foreach (var classCodeDataDictPair in excelResolverConfig.classCodeDataDict)
{
var worksheet = classCodeDataDictPair.Key;
var classCodeData = classCodeDataDictPair.Value;

17
Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs

@ -12,12 +12,6 @@ namespace Tools.ExcelResolver.Editor
{
[SerializeField] private ExcelResolverEditorConfig excelResolverConfig;
[FoldoutGroup("Hide Setting"), LabelText("导表前是否清空Console")]
[SerializeField] private bool isClearConsole = true;
[FoldoutGroup("Hide Setting"), LabelText("是否使用MD5跳过未修改的表格")]
[SerializeField] private bool useMD5 = true;
[MenuItem("\u272dExcelResolver\u272d/ExcelResolverEditorWindow")]
private static void OpenWindow()
{
@ -46,7 +40,7 @@ namespace Tools.ExcelResolver.Editor
}
[Button("删除所有生成的代码和SO", ButtonSizes.Gigantic, Icon = SdfIconType.ExclamationDiamond), GUIColor(1f, 0f, 0f)]
[ButtonGroup("Hide Setting/Button")]
[ButtonGroup("Button")]
private void DeleteAllScriptsAndSO()
{
if (EditorUtility.DisplayDialog("警告", "确定要删除所有生成的代码和SO吗?", "确定", "取消"))
@ -59,7 +53,7 @@ namespace Tools.ExcelResolver.Editor
}
}
[ButtonGroup("Hide Setting/Button")]
[ButtonGroup("Button")]
private void ClearMd5()
{
excelResolverConfig.md5Dict.Clear();
@ -76,7 +70,7 @@ namespace Tools.ExcelResolver.Editor
private void StartExportExcel()
{
Debug.Log("Before GC: " + System.GC.GetTotalMemory(false) + " bytes");
if (isClearConsole)
if (excelResolverConfig.isClearConsole)
{
UnityEditorUtil.ClearConsole();
}
@ -90,11 +84,6 @@ namespace Tools.ExcelResolver.Editor
protected override void OnDestroy()
{
base.OnDestroy();
foreach (var pair in classCodeDataDict)
{
pair.Value.Dispose();
}
classCodeDataDict.Clear();
ExcelResolverUtil.Dispose();
}
}

Loading…
Cancel
Save