282 lines
9.9 KiB
C#
282 lines
9.9 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description:
|
|
* @Date: 2025年11月21日 星期五 16:11:31
|
|
* @Modify:
|
|
*/
|
|
|
|
|
|
using System.IO;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using ExcelConfig;
|
|
using Logic.Config;
|
|
using Logic.CrashSight;
|
|
using TH1_Logic.Config;
|
|
using ConfigManager = TH1_Logic.Config.ConfigManager;
|
|
|
|
|
|
public class ExcelEditorWIndow : EditorWindow
|
|
{
|
|
[MenuItem("Tools/导表工具")]
|
|
public static void ShowWindow()
|
|
{
|
|
GetWindow<ExcelEditorWIndow>("导表工具");
|
|
}
|
|
|
|
private void OnGUI()
|
|
{
|
|
if (GUILayout.Button("清理"))
|
|
{
|
|
ClearFolder("../../ExcelExport/GenerateBytes");
|
|
ClearFolder("../../ExcelExport/GenerateCS");
|
|
ClearFolder("../../ExcelExport/GenerateCSPartial");
|
|
}
|
|
|
|
if (GUILayout.Button("导CS"))
|
|
{
|
|
try
|
|
{
|
|
System.Diagnostics.Process process = new System.Diagnostics.Process();
|
|
process.StartInfo.FileName = "cmd.exe";
|
|
process.StartInfo.WorkingDirectory = System.IO.Path.Combine(Application.dataPath, "../../ExcelExport");
|
|
process.StartInfo.Arguments = "/c dotnet run 1";
|
|
process.StartInfo.UseShellExecute = false;
|
|
process.StartInfo.RedirectStandardOutput = true;
|
|
process.StartInfo.RedirectStandardError = true;
|
|
process.StartInfo.CreateNoWindow = true;
|
|
|
|
process.Start();
|
|
|
|
string output = process.StandardOutput.ReadToEnd();
|
|
string error = process.StandardError.ReadToEnd();
|
|
|
|
process.WaitForExit();
|
|
|
|
if (!string.IsNullOrEmpty(output))
|
|
{
|
|
Debug.Log($"导CS输出: {output}");
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(error))
|
|
{
|
|
Debug.LogError($"导CS错误: {error}");
|
|
}
|
|
|
|
if (process.ExitCode == 0)
|
|
{
|
|
Debug.Log("导CS成功");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"导CS失败,退出码: {process.ExitCode}");
|
|
}
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Debug.LogError($"执行命令失败: {ex.Message}");
|
|
}
|
|
}
|
|
if (GUILayout.Button("导二进制"))
|
|
{
|
|
try
|
|
{
|
|
System.Diagnostics.Process process = new System.Diagnostics.Process();
|
|
process.StartInfo.FileName = "cmd.exe";
|
|
process.StartInfo.WorkingDirectory = System.IO.Path.Combine(Application.dataPath, "../../ExcelExport");
|
|
process.StartInfo.Arguments = "/c dotnet run 2";
|
|
process.StartInfo.UseShellExecute = false;
|
|
process.StartInfo.RedirectStandardOutput = true;
|
|
process.StartInfo.RedirectStandardError = true;
|
|
process.StartInfo.CreateNoWindow = true;
|
|
|
|
process.Start();
|
|
|
|
string output = process.StandardOutput.ReadToEnd();
|
|
string error = process.StandardError.ReadToEnd();
|
|
|
|
process.WaitForExit();
|
|
|
|
if (!string.IsNullOrEmpty(output))
|
|
{
|
|
Debug.Log($"导二进制输出: {output}");
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(error))
|
|
{
|
|
Debug.LogError($"导二进制错误: {error}");
|
|
}
|
|
|
|
if (process.ExitCode == 0)
|
|
{
|
|
Debug.Log("导二进制成功");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"导二进制失败,退出码: {process.ExitCode}");
|
|
}
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Debug.LogError($"执行命令失败: {ex.Message}");
|
|
}
|
|
}
|
|
if (GUILayout.Button("移动文件"))
|
|
{
|
|
try
|
|
{
|
|
System.Diagnostics.Process process = new System.Diagnostics.Process();
|
|
process.StartInfo.FileName = "cmd.exe";
|
|
process.StartInfo.WorkingDirectory = System.IO.Path.Combine(Application.dataPath, "../../ExcelExport");
|
|
process.StartInfo.Arguments = "/c dotnet run 3";
|
|
process.StartInfo.UseShellExecute = false;
|
|
process.StartInfo.RedirectStandardOutput = true;
|
|
process.StartInfo.RedirectStandardError = true;
|
|
process.StartInfo.CreateNoWindow = true;
|
|
|
|
process.Start();
|
|
|
|
string output = process.StandardOutput.ReadToEnd();
|
|
string error = process.StandardError.ReadToEnd();
|
|
|
|
process.WaitForExit();
|
|
|
|
if (!string.IsNullOrEmpty(output))
|
|
{
|
|
Debug.Log($"移动文件输出: {output}");
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(error))
|
|
{
|
|
Debug.LogError($"移动文件错误: {error}");
|
|
}
|
|
|
|
if (process.ExitCode == 0)
|
|
{
|
|
Debug.Log("移动文件成功");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"移动文件失败,退出码: {process.ExitCode}");
|
|
}
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Debug.LogError($"执行命令失败: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
if(GUILayout.Button("转入 GeoDataAsset"))
|
|
{
|
|
ConfigManager.Instance.InitExcelConfig();
|
|
string dataAssetPath = "DataAssets/GeoDataAssets";
|
|
GeoDataAssets geoDataAssets = TH1Resource.ResourceLoader.Load<GeoDataAssets>(dataAssetPath);
|
|
geoDataAssets.GeoItemList.Clear();
|
|
foreach (var i in GeoDescCategory.Dict.Keys)
|
|
{
|
|
if (!System.Enum.TryParse(GeoDescCategory.Dict[i].BigClass, out GeoBigClass bigClass))
|
|
{
|
|
LogSystem.LogError($"ParseWrong {GeoDescCategory.Dict[i].BigClass}");
|
|
continue;
|
|
}
|
|
|
|
if (!System.Enum.TryParse(GeoDescCategory.Dict[i].SmallClass, out GeoSmallClass smallClass))
|
|
{
|
|
LogSystem.LogError($"ParseWrong {GeoDescCategory.Dict[i].SmallClass}");
|
|
continue;
|
|
}
|
|
|
|
if (!System.Enum.TryParse(GeoDescCategory.Dict[i].CivEnum, out CivEnum civEnum))
|
|
{
|
|
LogSystem.LogError($"ParseWrong {GeoDescCategory.Dict[i].CivEnum}");
|
|
continue;
|
|
}
|
|
var t = new GeoItem();
|
|
t.Id = (uint)GeoDescCategory.Dict[i].Id;
|
|
t.GeoBigClass = bigClass;
|
|
t.GeoSmallClass = smallClass;
|
|
t.CivEnum = civEnum;
|
|
t.GeoName = GeoDescCategory.Dict[i].GeoName;
|
|
t.GeoDesc = GeoDescCategory.Dict[i].GeoDescStr;
|
|
geoDataAssets.GeoItemList.Add(t);
|
|
}
|
|
|
|
EditorUtility.SetDirty(geoDataAssets);
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
|
|
LogSystem.LogError($"GeoDescCategory.Dict.Count : {GeoDescCategory.Dict.Count}");
|
|
}
|
|
|
|
if(GUILayout.Button("转入 MomentDataAsset"))
|
|
{
|
|
ConfigManager.Instance.InitExcelConfig();
|
|
string dataAssetPath = "DataAssets/MomentDataAssets";
|
|
MomentDataAssets momentDataAssets = TH1Resource.ResourceLoader.Load<MomentDataAssets>(dataAssetPath);
|
|
momentDataAssets.MomentSubDataList.Clear();
|
|
foreach (var i in MomentCategory.Dict.Keys)
|
|
{
|
|
if (!System.Enum.TryParse(MomentCategory.Dict[i].MomentSubType, out MomentSubType subType))
|
|
{
|
|
LogSystem.LogError($"ParseWrong {MomentCategory.Dict[i].MomentSubType}");
|
|
continue;
|
|
}
|
|
|
|
if (!System.Enum.TryParse(MomentCategory.Dict[i].MomentMainType, out MomentMainType mainType))
|
|
{
|
|
LogSystem.LogError($"ParseWrong {MomentCategory.Dict[i].MomentMainType}");
|
|
continue;
|
|
}
|
|
|
|
var t = new MomentSubData();
|
|
t.SubType = subType;
|
|
t.MomentType = mainType;
|
|
t.Title = MomentCategory.Dict[i].Title;
|
|
t.Desc = MomentCategory.Dict[i].Desc;
|
|
momentDataAssets.MomentSubDataList.Add(t);
|
|
}
|
|
|
|
EditorUtility.SetDirty(momentDataAssets);
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
|
|
LogSystem.LogError($"MomentCategory.Dict.Count : {MomentCategory.Dict.Count}");
|
|
}
|
|
|
|
}
|
|
|
|
private static void ClearFolder(string relativeAssetsFolder)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(relativeAssetsFolder))
|
|
{
|
|
Debug.LogError("传入目录为空");
|
|
return;
|
|
}
|
|
|
|
var rel = relativeAssetsFolder.Trim().TrimStart('/', '\\');
|
|
var fullPath = Path.Combine(Application.dataPath, rel);
|
|
|
|
if (!Directory.Exists(fullPath))
|
|
{
|
|
Debug.LogWarning($"目录不存在: {fullPath}");
|
|
return;
|
|
}
|
|
|
|
// 删除文件
|
|
foreach (var file in Directory.GetFiles(fullPath, "*", SearchOption.TopDirectoryOnly))
|
|
{
|
|
if (file.EndsWith(".meta")) continue;
|
|
try
|
|
{
|
|
File.SetAttributes(file, FileAttributes.Normal);
|
|
File.Delete(file);
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Debug.LogError($"删除文件失败: {file} -> {ex.Message}");
|
|
}
|
|
}
|
|
|
|
Debug.Log($"已清理目录内容: {fullPath}");
|
|
}
|
|
} |