Newer
Older
DungeonShooting / DungeonShooting_Godot / addons / dungeonShooting_plugin / generator / BuffGenerator.cs
@小李xl 小李xl on 22 Mar 2024 2 KB 生成道具逻辑属性表表
  1. #if TOOLS
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Reflection;
  7. using Godot;
  8.  
  9. namespace Generator;
  10.  
  11. /// <summary>
  12. /// 生成 Buff 属性表
  13. /// </summary>
  14. public static class BuffGenerator
  15. {
  16. public static bool Generate()
  17. {
  18. PropFragmentRegister.Init();
  19. var outStr = "# 道具逻辑属性表\n\n";
  20. outStr += GetSplit("Buff 属性片段");
  21. outStr += GetTableTitle();
  22. foreach (var fragment in PropFragmentRegister.BuffFragmentInfos)
  23. {
  24. outStr += GetTableLine(fragment.Value);
  25. }
  26. outStr += "\n\n";
  27. outStr += GetSplit("主动道具使用条件片段");
  28. outStr += GetTableTitle();
  29. foreach (var fragment in PropFragmentRegister.ConditionFragmentInfos)
  30. {
  31. outStr += GetTableLine(fragment.Value);
  32. }
  33. outStr += "\n\n";
  34. outStr += GetSplit("主动道具使用效果片段");
  35. outStr += GetTableTitle();
  36. foreach (var fragment in PropFragmentRegister.EffectFragmentInfos)
  37. {
  38. outStr += GetTableLine(fragment.Value);
  39. }
  40. outStr += "\n\n";
  41. outStr += GetSplit("主动道具充能条件片段");
  42. outStr += GetTableTitle();
  43. foreach (var fragment in PropFragmentRegister.ChargeFragmentInfos)
  44. {
  45. outStr += GetTableLine(fragment.Value);
  46. }
  47. outStr += "\n\n";
  48.  
  49. if (!Directory.Exists("buffTable"))
  50. {
  51. Directory.CreateDirectory("buffTable");
  52. }
  53. File.WriteAllText("buffTable/BuffTable.md", outStr);
  54. return true;
  55. }
  56.  
  57. private static string GetSplit(string title)
  58. {
  59. return $"---\n### {title}\n";
  60. }
  61.  
  62. private static string GetTableTitle()
  63. {
  64. return $"| 属性名称 | 描述 | 参数 |\n" +
  65. $"|-|-|-|\n";
  66. }
  67.  
  68. private static string GetTableLine(PropFragmentInfo fragmentInfo)
  69. {
  70. var arg = "";
  71. for (var i = 0; i < fragmentInfo.ArgInfos.Count; i++)
  72. {
  73. var argInfo = fragmentInfo.ArgInfos[i];
  74. if (i > 0)
  75. {
  76. arg += "<br/>";
  77. }
  78. arg += $"参数{argInfo.ArgIndex}: {argInfo.Description}";
  79. }
  80.  
  81. return $"| {fragmentInfo.Name} | {fragmentInfo.Description} | {arg} |\n";
  82. }
  83. }
  84. #endif