- #if TOOLS
-
- using System;
- using System.IO;
- using System.Text.Json;
- using Config;
- using Godot;
- using Array = Godot.Collections.Array;
-
- namespace Generator;
-
- public static class ExcelGenerator
- {
- /// <summary>
- /// 执行导出Excel表
- /// </summary>
- public static bool ExportExcel()
- {
- var arr = new Array();
- var toolDir = "excelTool";
- var excelPath = "excel/";
- var jsonPath = "resource/config/";
- var codePath = "src/config/";
-
- //平台名称
- var osName = OS.GetName();
- //平台标识符
- string rid;
- string toolName;
- if (osName == "Windows")
- {
- rid = "win-x64";
- toolName = "ExcelTool.exe";
- }
- else if (osName == "macOS")
- {
- rid = "osx-x64";
- toolName = "ExcelTool";
- }
- else
- {
- GD.PrintErr($"当前平台{osName}不支持导出Excel表");
- return false;
- }
-
- var toolPath = $"{toolDir}/publish/{rid}";
-
- if (!Directory.Exists(toolPath)) //判断是否编译过工具
- {
- GD.Print("开始编译导出工具");
- var r = compilerTool(toolDir, rid, toolPath);
- if (r != 0)
- {
- return false;
- }
- }
- else if (File.ReadAllText($"{toolDir}/version") != File.ReadAllText($"{toolPath}/version")) //版本有变化
- {
- GD.Print("工具版本有变化,执行重新编译导出工具");
- //删除编译目录
- Directory.Delete(toolPath, true);
- var r = compilerTool(toolDir, rid, toolPath);
- if (r != 0)
- {
- return false;
- }
- }
-
- var result = OS.Execute($"{toolPath}/{toolName}", new[] { excelPath, jsonPath, codePath }, arr);
- foreach (var message in arr)
- {
- GD.Print(message);
- }
-
- if (result != 0)
- {
- return false;
- }
-
- try
- {
- GeneratorActivityObjectInit();
- GD.Print("生成'src/framework/activity/ActivityObject_Init.cs'成功!");
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- return false;
- }
-
- return true;
- }
-
- //编译工具
- private static int compilerTool(string csProjectPath, string rid, string outputPath)
- {
- //dotnet publish excelTool -c Release -r win-x64 -o ./excelTool/publish/win-x64
- var outLog = new Array();
- var result = OS.Execute("dotnet", new string[] { "publish", csProjectPath, "-c", "Release", "-r", rid, "-o", outputPath }, outLog);
- foreach (var variant in outLog)
- {
- GD.Print(variant);
- }
-
- return result;
- }
-
- //生成初始化 ActivityObject 代码
- private static void GeneratorActivityObjectInit()
- {
- var text = File.ReadAllText($"resource/config/{nameof(ExcelConfig.ActivityBase)}.json");
- var array = JsonSerializer.Deserialize<System.Collections.Generic.Dictionary<string, object>[]>(text);
-
- var code1 = "";
-
- foreach (var item in array)
- {
- var id = item["Id"];
- var name = item["Name"] + "";
- var intro = item["Intro"] + "";
- code1 += $" /// <summary>\n";
- code1 += $" /// 名称: {name} <br/>\n";
- code1 += $" /// 简介: {intro.Replace("\n", " <br/>\n /// ")}\n";
- code1 += $" /// </summary>\n";
- code1 += $" public const string Id_{id} = \"{id}\";\n";
- }
-
- var str = $"using Config;\n\n";
- str += $"// 根据配置表注册物体, 该类是自动生成的, 请不要手动编辑!\n";
- str += $"public partial class ActivityObject\n";
- str += $"{{\n";
-
- str += $" /// <summary>\n";
- str += $" /// 存放所有在表中注册的物体的id\n";
- str += $" /// </summary>\n";
- str += $" public static class Ids\n";
- str += $" {{\n";
- str += code1;
- str += $" }}\n";
-
- str += $"}}\n";
-
- File.WriteAllText("src/framework/activity/ActivityObject_Init.cs", str);
- }
- }
-
- #endif