Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / generator / UiManagerMethodsGenerator.cs
  1. using System;
  2. using System.IO;
  3. using System.Text.RegularExpressions;
  4. using Godot;
  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" +
  32. $" * 该类为自动生成的, 请不要手动编辑, 以免造成代码丢失\n" +
  33. $" */\n" +
  34. $"public static partial class UiManager\n" +
  35. $"{{\n" +
  36. $"\n";
  37.  
  38. var uiNameClass = $" public static class UiName\n" +
  39. $" {{\n";
  40. var methodClass = "";
  41.  
  42. foreach (var fileInfo in fileInfos)
  43. {
  44. if (fileInfo.Extension == ".tscn")
  45. {
  46. var uiName = fileInfo.Name.Substring(0, fileInfo.Name.Length - 5);
  47. uiNameClass += $" public const string {uiName} = \"{uiName}\";\n";
  48. methodClass += $" /// <summary>\n" +
  49. $" /// 打开 {uiName}, 并返回UI实例\n" +
  50. $" /// </summary>\n" +
  51. $" public static UI.{uiName}.{uiName}Panel Open_{uiName}()\n" +
  52. $" {{\n" +
  53. $" return OpenUi<UI.{uiName}.{uiName}Panel>(UiName.{uiName});\n" +
  54. $" }}\n" +
  55. $"\n" +
  56. $" /// <summary>\n" +
  57. $" /// 隐藏 {uiName} 的所有实例\n" +
  58. $" /// </summary>\n" +
  59. $" public static void Hide_{uiName}()\n" +
  60. $" {{\n" +
  61. $" var uiInstance = Get_{uiName}_Instance();\n" +
  62. $" foreach (var uiPanel in uiInstance)\n" +
  63. $" {{\n" +
  64. $" uiPanel.HideUi();\n" +
  65. $" }}\n" +
  66. $" }}\n" +
  67. $"\n" +
  68. $" /// <summary>\n" +
  69. $" /// 销毁 {uiName} 的所有实例\n" +
  70. $" /// </summary>\n" +
  71. $" public static void Dispose_{uiName}()\n" +
  72. $" {{\n" +
  73. $" var uiInstance = Get_{uiName}_Instance();\n" +
  74. $" foreach (var uiPanel in uiInstance)\n" +
  75. $" {{\n" +
  76. $" uiPanel.DisposeUi();\n" +
  77. $" }}\n" +
  78. $" }}\n" +
  79. $"\n" +
  80. $" /// <summary>\n" +
  81. $" /// 获取所有 {uiName} 的实例, 如果没有实例, 则返回一个空数组\n" +
  82. $" /// </summary>\n" +
  83. $" public static UI.{uiName}.{uiName}Panel[] Get_{uiName}_Instance()\n" +
  84. $" {{\n" +
  85. $" return GetUiInstance<UI.{uiName}.{uiName}Panel>(nameof(UI.{uiName}.{uiName}));\n" +
  86. $" }}\n" +
  87. $"\n";
  88. }
  89. }
  90. uiNameClass += $" }}\n\n";
  91.  
  92. code += uiNameClass;
  93. code += methodClass;
  94. code += $"}}\n";
  95.  
  96. File.WriteAllText(savePath, code);
  97. }
  98. catch (Exception e)
  99. {
  100. GD.PrintErr(e.ToString());
  101. return false;
  102. }
  103.  
  104. return true;
  105. }
  106. }