#if TOOLS using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using Godot; namespace Generator; /// <summary> /// 生成 Buff 属性表 /// </summary> public static class BuffGenerator { public static bool Generate() { PropFragmentRegister.Init(); var outStr = "# 道具逻辑属性表\n\n"; outStr += GetSplit("Buff 属性片段"); outStr += GetTableTitle(); foreach (var fragment in PropFragmentRegister.BuffFragmentInfos) { outStr += GetTableLine(fragment.Value); } outStr += "\n\n"; outStr += GetSplit("主动道具使用条件片段"); outStr += GetTableTitle(); foreach (var fragment in PropFragmentRegister.ConditionFragmentInfos) { outStr += GetTableLine(fragment.Value); } outStr += "\n\n"; outStr += GetSplit("主动道具使用效果片段"); outStr += GetTableTitle(); foreach (var fragment in PropFragmentRegister.EffectFragmentInfos) { outStr += GetTableLine(fragment.Value); } outStr += "\n\n"; outStr += GetSplit("主动道具充能条件片段"); outStr += GetTableTitle(); foreach (var fragment in PropFragmentRegister.ChargeFragmentInfos) { outStr += GetTableLine(fragment.Value); } outStr += "\n\n"; if (!Directory.Exists("buffTable")) { Directory.CreateDirectory("buffTable"); } File.WriteAllText("buffTable/BuffTable.md", outStr); return true; } private static string GetSplit(string title) { return $"---\n### {title}\n"; } private static string GetTableTitle() { return $"| 属性名称 | 描述 | 参数 |\n" + $"|-|-|-|\n"; } private static string GetTableLine(PropFragmentInfo fragmentInfo) { var arg = ""; for (var i = 0; i < fragmentInfo.ArgInfos.Count; i++) { var argInfo = fragmentInfo.ArgInfos[i]; if (i > 0) { arg += "<br/>"; } arg += $"参数{argInfo.ArgIndex}: {argInfo.Description}"; } return $"| {fragmentInfo.Name} | {fragmentInfo.Description} | {arg} |\n"; } } #endif