Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / generator / ResourcePathGenerator.cs
@小李xl 小李xl on 19 Mar 2023 3 KB 创建新ui功能
  1.  
  2. using System;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text.RegularExpressions;
  6. using Godot;
  7.  
  8. namespace Generator;
  9.  
  10. /// <summary>
  11. /// ResourcePath 类文件生成器
  12. /// </summary>
  13. public static class ResourcePathGenerator
  14. {
  15. //支持后缀
  16. private static string[] suffix =
  17. {
  18. ".png", ".jpg", ".txt", ".json", ".ini", ".tscn", ".tres", ".otf", ".gdshader", ".ogg", ".mp3", ".wav", ".svg"
  19. };
  20. //排除第一层的文件夹
  21. private static string[] exclude =
  22. {
  23. ".vscode", ".idea", ".git", ".import", ".mono", "android", "addons", ".godot", ".vs"
  24. };
  25. private static string currDir = System.Environment.CurrentDirectory;
  26.  
  27. private static string resultStr = "";
  28.  
  29. //保存路径
  30. public static string savePath = "src/game/manager/ResourcePath.cs";
  31.  
  32. /// <summary>
  33. /// 执行生成操作, 返回是否执行成功
  34. /// </summary>
  35. public static bool Generate()
  36. {
  37. try
  38. {
  39. resultStr = "/// <summary>\n" +
  40. "/// 编辑器下所有资源路径, 该类为 Automation 面板下自动生成的, 请不要手动编辑!\n" +
  41. "/// </summary>\n" +
  42. "public class ResourcePath\n" +
  43. "{\n";
  44.  
  45. GD.Print("更新 ResourcePath...");
  46.  
  47. var directoryInfo = new DirectoryInfo(currDir);
  48.  
  49. var directories = directoryInfo.GetDirectories();
  50. for (int i = 0; i < directories.Length; i++)
  51. {
  52. var directory = directories[i];
  53. if (!exclude.Contains(directory.Name))
  54. {
  55. EachDir(directory);
  56. }
  57. }
  58.  
  59. var fileInfos = directoryInfo.GetFiles();
  60. for (var i = 0; i < fileInfos.Length; i++)
  61. {
  62. HandleFile(fileInfos[i]);
  63. }
  64.  
  65. resultStr += "}";
  66. File.WriteAllText(savePath, resultStr);
  67. GD.Print("ResourcePath.cs 写出完成!");
  68. }
  69. catch (Exception e)
  70. {
  71. GD.PrintErr(e.ToString());
  72. return false;
  73. }
  74.  
  75. return true;
  76. }
  77. private static void EachDir(DirectoryInfo directoryInfos)
  78. {
  79. var fileInfos = directoryInfos.GetFiles();
  80. for (var i = 0; i < fileInfos.Length; i++)
  81. {
  82. HandleFile(fileInfos[i]);
  83. }
  84.  
  85. var directories = directoryInfos.GetDirectories();
  86. for (var i = 0; i < directories.Length; i++)
  87. {
  88. EachDir(directories[i]);
  89. }
  90. }
  91.  
  92. private static void HandleFile(FileInfo fileInfo)
  93. {
  94. if (suffix.Contains(fileInfo.Extension))
  95. {
  96. var field = fileInfo.FullName.Substring(currDir.Length + 1);
  97. field = field.Replace("\\", "/");
  98. var resPath = "res://" + field;
  99. field = field.Replace(".", "_");
  100. field = field.Replace("/", "_");
  101. field = Regex.Replace(field, "[^\\w]", "");
  102. resultStr += $" public const string {field} = \"{resPath}\";\n";
  103. }
  104. }
  105. }