- #if TOOLS
-
- using System;
- using System.IO;
- using System.Text.RegularExpressions;
- using Godot;
-
- namespace Generator;
-
- /// <summary>
- /// 生成 UiManager 中打开Ui相关的函数代码
- /// </summary>
- public static class UiManagerMethodsGenerator
- {
- private static string savePath = "src/game/manager/UiManager_Methods.cs";
-
- /// <summary>
- /// 执行生成操作, 并返回执行结果
- /// </summary>
- public static bool Generate()
- {
- //扫描所有ui
- if (!Directory.Exists(GameConfig.UiPrefabDir))
- {
- return true;
- }
-
- try
- {
- var directoryInfo = new DirectoryInfo(GameConfig.UiPrefabDir);
- var fileInfos = directoryInfo.GetFiles();
-
- var code = $"/**\n" +
- $" * 该类为自动生成的, 请不要手动编辑, 以免造成代码丢失\n" +
- $" */\n" +
- $"public static partial class UiManager\n" +
- $"{{\n" +
- $"\n";
-
- var uiNameClass = $" public static class UiName\n" +
- $" {{\n";
- var methodClass = "";
-
- foreach (var fileInfo in fileInfos)
- {
- if (fileInfo.Extension == ".tscn")
- {
- var uiName = fileInfo.Name.Substring(0, fileInfo.Name.Length - 5);
- uiNameClass += $" public const string {uiName} = \"{uiName}\";\n";
-
- methodClass += $" /// <summary>\n" +
- $" /// 创建 {uiName}, 并返回UI实例, 该函数不会打开 Ui\n" +
- $" /// </summary>\n" +
- $" public static UI.{uiName}.{uiName}Panel Create_{uiName}()\n" +
- $" {{\n" +
- $" return CreateUi<UI.{uiName}.{uiName}Panel>(UiName.{uiName});\n" +
- $" }}\n" +
- $"\n" +
- $" /// <summary>\n" +
- $" /// 打开 {uiName}, 并返回UI实例\n" +
- $" /// </summary>\n" +
- $" public static UI.{uiName}.{uiName}Panel Open_{uiName}()\n" +
- $" {{\n" +
- $" return OpenUi<UI.{uiName}.{uiName}Panel>(UiName.{uiName});\n" +
- $" }}\n" +
- $"\n" +
- $" /// <summary>\n" +
- $" /// 隐藏 {uiName} 的所有实例\n" +
- $" /// </summary>\n" +
- $" public static void Hide_{uiName}()\n" +
- $" {{\n" +
- $" var uiInstance = Get_{uiName}_Instance();\n" +
- $" foreach (var uiPanel in uiInstance)\n" +
- $" {{\n" +
- $" uiPanel.HideUi();\n" +
- $" }}\n" +
- $" }}\n" +
- $"\n" +
- $" /// <summary>\n" +
- $" /// 销毁 {uiName} 的所有实例\n" +
- $" /// </summary>\n" +
- $" public static void Destroy_{uiName}()\n" +
- $" {{\n" +
- $" var uiInstance = Get_{uiName}_Instance();\n" +
- $" foreach (var uiPanel in uiInstance)\n" +
- $" {{\n" +
- $" uiPanel.Destroy();\n" +
- $" }}\n" +
- $" }}\n" +
- $"\n" +
- $" /// <summary>\n" +
- $" /// 获取所有 {uiName} 的实例, 如果没有实例, 则返回一个空数组\n" +
- $" /// </summary>\n" +
- $" public static UI.{uiName}.{uiName}Panel[] Get_{uiName}_Instance()\n" +
- $" {{\n" +
- $" return GetUiInstance<UI.{uiName}.{uiName}Panel>(nameof(UI.{uiName}.{uiName}));\n" +
- $" }}\n" +
- $"\n";
- }
- }
- uiNameClass += $" }}\n\n";
-
- code += uiNameClass;
- code += methodClass;
- code += $"}}\n";
-
- File.WriteAllText(savePath, code);
- }
- catch (Exception e)
- {
- GD.PrintErr(e.ToString());
- return false;
- }
-
- return true;
- }
- }
-
- #endif