Newer
Older
DungeonShooting / DungeonShooting_Godot / addons / dungeonShooting_plugin / generator / BuffGenerator.cs
@小李xl 小李xl on 22 Mar 2024 2 KB 生成道具逻辑属性表表
#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