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