Browse Source

代码整理

main
coffee 5 months ago
parent
commit
c1bbb0f4f7
  1. 24
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs
  2. 13
      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 System.Collections.Generic;
using OfficeOpenXml;
using Sirenix.OdinInspector; using Sirenix.OdinInspector;
using Tools.Editor; using Tools.Editor;
using UnityEngine;
namespace Tools.ExcelResolver.Editor namespace Tools.ExcelResolver.Editor
{ {
[InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)] [InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)]
public sealed class ExcelResolverEditorConfig : SerializedScriptableObject internal sealed class ExcelResolverEditorConfig : SerializedScriptableObject
{ {
[LabelText("Excel路径"), FolderPath] [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()")] [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()")] [LabelText("SO存放路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")]
public string SOPathRoot = "Assets/_Project/ScriptableObject/Excel"; [SerializeField] internal string SOPathRoot = "Assets/_Project/ScriptableObject/Excel";
[LabelText("生成代码命名空间")] [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(ExcelPathRoot);
DirectoryUtil.MakeSureDirectory(SOPathRoot); DirectoryUtil.MakeSureDirectory(SOPathRoot);

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

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

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

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

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

@ -12,12 +12,6 @@ namespace Tools.ExcelResolver.Editor
{ {
[SerializeField] private ExcelResolverEditorConfig excelResolverConfig; [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")] [MenuItem("\u272dExcelResolver\u272d/ExcelResolverEditorWindow")]
private static void OpenWindow() private static void OpenWindow()
{ {
@ -46,7 +40,7 @@ namespace Tools.ExcelResolver.Editor
} }
[Button("删除所有生成的代码和SO", ButtonSizes.Gigantic, Icon = SdfIconType.ExclamationDiamond), GUIColor(1f, 0f, 0f)] [Button("删除所有生成的代码和SO", ButtonSizes.Gigantic, Icon = SdfIconType.ExclamationDiamond), GUIColor(1f, 0f, 0f)]
[ButtonGroup("Hide Setting/Button")] [ButtonGroup("Button")]
private void DeleteAllScriptsAndSO() private void DeleteAllScriptsAndSO()
{ {
if (EditorUtility.DisplayDialog("警告", "确定要删除所有生成的代码和SO吗?", "确定", "取消")) if (EditorUtility.DisplayDialog("警告", "确定要删除所有生成的代码和SO吗?", "确定", "取消"))
@ -59,7 +53,7 @@ namespace Tools.ExcelResolver.Editor
} }
} }
[ButtonGroup("Hide Setting/Button")] [ButtonGroup("Button")]
private void ClearMd5() private void ClearMd5()
{ {
excelResolverConfig.md5Dict.Clear(); excelResolverConfig.md5Dict.Clear();
@ -76,7 +70,7 @@ namespace Tools.ExcelResolver.Editor
private void StartExportExcel() private void StartExportExcel()
{ {
Debug.Log("Before GC: " + System.GC.GetTotalMemory(false) + " bytes"); Debug.Log("Before GC: " + System.GC.GetTotalMemory(false) + " bytes");
if (isClearConsole) if (excelResolverConfig.isClearConsole)
{ {
UnityEditorUtil.ClearConsole(); UnityEditorUtil.ClearConsole();
} }
@ -90,11 +84,6 @@ namespace Tools.ExcelResolver.Editor
protected override void OnDestroy() protected override void OnDestroy()
{ {
base.OnDestroy(); base.OnDestroy();
foreach (var pair in classCodeDataDict)
{
pair.Value.Dispose();
}
classCodeDataDict.Clear();
ExcelResolverUtil.Dispose(); ExcelResolverUtil.Dispose();
} }
} }

Loading…
Cancel
Save