Newer
Older
DungeonShooting / DungeonShooting_Godot / addons / dungeonShooting_plugin / generator / UiManagerMethodsGenerator.cs
@小李xl 小李xl on 20 Dec 2023 5 KB 编辑TileSet地形, 制作中
  1. #if TOOLS
  2.  
  3. using System;
  4. using System.IO;
  5. using Godot;
  6.  
  7. namespace Generator;
  8.  
  9. /// <summary>
  10. /// 生成 UiManager 中打开Ui相关的函数代码
  11. /// </summary>
  12. public static class UiManagerMethodsGenerator
  13. {
  14. private static string savePath = "src/game/manager/UiManager_Methods.cs";
  15.  
  16. /// <summary>
  17. /// 执行生成操作, 并返回执行结果
  18. /// </summary>
  19. public static bool Generate()
  20. {
  21. //扫描所有ui
  22. if (!Directory.Exists(GameConfig.UiPrefabDir))
  23. {
  24. return true;
  25. }
  26.  
  27. try
  28. {
  29. var directoryInfo = new DirectoryInfo(GameConfig.UiPrefabDir);
  30. var fileInfos = directoryInfo.GetFiles();
  31.  
  32. var code = $"\n// 该类为自动生成的, 请不要手动编辑, 以免造成代码丢失\n" +
  33. $"public static partial class UiManager\n" +
  34. $"{{\n" +
  35. $"\n";
  36.  
  37. var uiNameClass = $" public static class UiNames\n" +
  38. $" {{\n";
  39. var methodClass = "";
  40.  
  41. foreach (var fileInfo in fileInfos)
  42. {
  43. if (fileInfo.Extension == ".tscn")
  44. {
  45. var uiName = fileInfo.Name.Substring(0, fileInfo.Name.Length - 5);
  46. uiNameClass += $" public const string {uiName} = \"{uiName}\";\n";
  47. methodClass += $" /// <summary>\n" +
  48. $" /// 创建 {uiName}, 并返回UI实例, 该函数不会打开 Ui\n" +
  49. $" /// </summary>\n" +
  50. $" public static UI.{uiName}.{uiName}Panel Create_{uiName}()\n" +
  51. $" {{\n" +
  52. $" return CreateUi<UI.{uiName}.{uiName}Panel>(UiNames.{uiName});\n" +
  53. $" }}\n" +
  54. $"\n" +
  55. $" /// <summary>\n" +
  56. $" /// 打开 {uiName}, 并返回UI实例\n" +
  57. $" /// </summary>\n" +
  58. $" public static UI.{uiName}.{uiName}Panel Open_{uiName}()\n" +
  59. $" {{\n" +
  60. $" return OpenUi<UI.{uiName}.{uiName}Panel>(UiNames.{uiName});\n" +
  61. $" }}\n" +
  62. $"\n" +
  63. $" /// <summary>\n" +
  64. $" /// 隐藏 {uiName} 的所有实例\n" +
  65. $" /// </summary>\n" +
  66. $" public static void Hide_{uiName}()\n" +
  67. $" {{\n" +
  68. $" var uiInstance = Get_{uiName}_Instance();\n" +
  69. $" foreach (var uiPanel in uiInstance)\n" +
  70. $" {{\n" +
  71. $" uiPanel.HideUi();\n" +
  72. $" }}\n" +
  73. $" }}\n" +
  74. $"\n" +
  75. $" /// <summary>\n" +
  76. $" /// 销毁 {uiName} 的所有实例\n" +
  77. $" /// </summary>\n" +
  78. $" public static void Destroy_{uiName}()\n" +
  79. $" {{\n" +
  80. $" var uiInstance = Get_{uiName}_Instance();\n" +
  81. $" foreach (var uiPanel in uiInstance)\n" +
  82. $" {{\n" +
  83. $" uiPanel.Destroy();\n" +
  84. $" }}\n" +
  85. $" }}\n" +
  86. $"\n" +
  87. $" /// <summary>\n" +
  88. $" /// 获取所有 {uiName} 的实例, 如果没有实例, 则返回一个空数组\n" +
  89. $" /// </summary>\n" +
  90. $" public static UI.{uiName}.{uiName}Panel[] Get_{uiName}_Instance()\n" +
  91. $" {{\n" +
  92. $" return GetUiInstance<UI.{uiName}.{uiName}Panel>(nameof(UI.{uiName}.{uiName}));\n" +
  93. $" }}\n" +
  94. $"\n";
  95. }
  96. }
  97. uiNameClass += $" }}\n\n";
  98.  
  99. code += uiNameClass;
  100. code += methodClass;
  101. code += $"}}\n";
  102.  
  103. File.WriteAllText(savePath, code);
  104. }
  105. catch (Exception e)
  106. {
  107. GD.PrintErr(e.ToString());
  108. return false;
  109. }
  110.  
  111. return true;
  112. }
  113. }
  114.  
  115. #endif