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