Newer
Older
DungeonShooting / DungeonShooting_Godot / addons / dungeonShooting_plugin / Automation.cs
  1. #if TOOLS
  2. using System.IO;
  3. using System.Linq;
  4. using System.Text.RegularExpressions;
  5. using Godot;
  6. using File = System.IO.File;
  7.  
  8. [Tool]
  9. public class Automation : Control
  10. {
  11. //支持后缀
  12. private string[] suffix =
  13. {
  14. ".png", ".jpg", ".txt", ".json", ".ini", ".tscn", ".tres", ".otf", ".gdshader", ".tmx", ".tsx", ".ogg", ".mp3", ".wav", ".svg"
  15. };
  16. //排除第一层的文件夹
  17. private string[] exclude =
  18. {
  19. ".vscode", ".idea", ".git", ".import", ".mono", "android", "addons"
  20. };
  21. private string currDir = System.Environment.CurrentDirectory;
  22.  
  23. private string resultStr = "";
  24. //更新 ResourcePath
  25. private void _on_Button_pressed()
  26. {
  27. resultStr = "/// <summary>\n" +
  28. "/// 编辑器下所有资源路径, 该类为 Automation 面板下自动生成的, 请不要手动编辑!\n" +
  29. "/// </summary>\n" +
  30. "public class ResourcePath\n" +
  31. "{\n";
  32. //输出路径
  33. var path = "src/game/manager/ResourcePath1.cs";
  34. GD.Print("更新 ResourcePath...");
  35.  
  36. var directoryInfo = new DirectoryInfo(currDir);
  37.  
  38. var directories = directoryInfo.GetDirectories();
  39. for (int i = 0; i < directories.Length; i++)
  40. {
  41. var directory = directories[i];
  42. if (!exclude.Contains(directory.Name))
  43. {
  44. EachDir(directory);
  45. }
  46. }
  47.  
  48. var fileInfos = directoryInfo.GetFiles();
  49. for (var i = 0; i < fileInfos.Length; i++)
  50. {
  51. HandleFile(fileInfos[i]);
  52. }
  53.  
  54. resultStr += "}";
  55. File.WriteAllText("src/game/manager/ResourcePath.cs", resultStr);
  56. GD.Print("ResourcePath.cs 写出完成!");
  57. }
  58.  
  59. private void EachDir(DirectoryInfo directoryInfos)
  60. {
  61. var fileInfos = directoryInfos.GetFiles();
  62. for (var i = 0; i < fileInfos.Length; i++)
  63. {
  64. HandleFile(fileInfos[i]);
  65. }
  66.  
  67. var directories = directoryInfos.GetDirectories();
  68. for (var i = 0; i < directories.Length; i++)
  69. {
  70. EachDir(directories[i]);
  71. }
  72. }
  73.  
  74. private void HandleFile(FileInfo fileInfo)
  75. {
  76. if (suffix.Contains(fileInfo.Extension))
  77. {
  78. var field = fileInfo.FullName.Substring(currDir.Length + 1);
  79. field = field.Replace("\\", "/");
  80. var resPath = "res://" + field;
  81. field = field.Replace(".", "_");
  82. field = field.Replace("/", "_");
  83. field = Regex.Replace(field, "[^\\w_]", "");
  84. resultStr += $" public const string {field} = \"{resPath}\";\n";
  85. }
  86. }
  87. }
  88. #endif