1A1 - API文档汉化 - 添加自定义页面

Updated 6 days ago

添加自定义页面

添加自定义章节

在极少数情况下,您可能需要向规则书添加一个全新的页面章节。由于该操作涉及较多技术细节,下文提供了如何正确设置新规则书章节的示例。

完成所有设置后,调用带有必要参数的RuleBookManager.New()即可实现功能。

RuleBookManager.New(
    MyPluginGuid, // 模组的唯一标识符
    PageRangeType.Boons, // 需要继承页面样式的PageRangeType枚举
    "Mod Tribes", // 显示在章节标题末尾的子节名称
    GetInsertPosition, // 确定自定义章节插入规则书位置的函数
    CreatePages, // 用于创建自定义章节页面的函数
    headerPrefix: null, // 可选参数,留空时将自动生成
    getStartingNumberFunc: GetStartingNumber, // 可选参数,留空时起始编号默认为1
    fillPageAction: FillPage // 可选参数,但如需显示自定义名称、描述等内容则必须设置
    );

该方法将返回代表自定义章节的FullRuleBookRangeInfo对象,以便进行后续修改。

注意:创建自定义规则书章节时,可传入STATIC方法作为Func和Action参数。

// ---重要说明---
// 返回值和参数必须与Func的参数及返回值严格匹配

// 确定该章节应插入规则书的位置
// 由于我们使用BoonPage样式,此处会将页面插入规则书"奖励"章节之后
private static int GetInsertPosition(PageRangeInfo pageRangeInfo, List<RuleBookPageInfo> pages)
{
    return pages.FindLastIndex(rbi => rbi.pagePrefab == pageRangeInfo.rangePrefab) + 1;
}

private static List<RuleBookPageInfo> CreatePages(RuleBookInfo instance, PageRangeInfo currentRange, AbilityMetaCategory metaCategory)
{
    // 本示例为自定义族群添加规则书章节
    // 为每个存在的自定义族群创建规则书页面,并将pageId设置为族群枚举以便后续调用
    List<TribeManager.TribeInfo> allTribes = TribeManager.NewTribes.ToList();
    List<RuleBookPageInfo> retval = new();
    foreach (var tribe in allTribes)
    {
        RuleBookPageInfo page = new();
        page.pageId = tribe.tribe.ToString();
        retval.Add(page);
    }
    return retval;
}

private static int GetStartingNumber(List<RuleBookPageInfo> addedPages)
{
    return (int)Tribe.NUM_TRIBES; // 由于仅处理模组族群,页面编号从7开始
}

private static void FillPage(RuleBookPage page, string pageId, object[] otherArgs)
{
    // 修改页面描述时,必须按如下方式将页面转换为目标类型
    if (page is BoonPage boonPage && int.TryParse(pageId, out int id))
    {
        TribeManager.TribeInfo tribe = TribeManager.NewTribes.FirstOrDefault(x => x.tribe == (Tribe)id);
        if (tribe != null)
        {
            // 使用各族群的内部名称作为页面标题
            // 同时移除名称中所有'tribe'字样使阅读更自然
            boonPage.nameTextMesh.text = Localization.Translate(tribe.name.ToLowerInvariant().Replace("tribe", ""));
            
            // 如需为各族群添加描述,可在此处设置
            boonPage.descriptionTextMesh.text = "";

            // 奖励页面包含两个渲染器(页面左右各一)
            // 本示例中要求两者使用相同纹理
            boonPage.iconRenderer.material.mainTexture = boonPage.iconRenderer2.material.mainTexture = tribe.icon.texture;
        }
    }
}

规则书页面的实用信息

填充自定义页面内容时,理解页面样式及可访问字段至关重要。

当自定义章节的FillPage()方法被调用时,系统仅会提供当前RuleBookPageInfo的特定部分信息。若需使用pageId之外的信息填充页面,必须了解数组中对象的排列顺序才能正确访问。

AbilityPage

能力图标纹理显示在页面左侧

otherArgs参数: headerText, ability, fillerAbilityIds

类字段:

  • AbilityPageContent mainAbilityGroup

StatIconPage

属性图标纹理显示在图标名称左侧

otherArgs参数: headerText

类字段:

  • Renderer iconRenderer
  • TextMeshPro nameTextMesh
  • TextMeshPro descriptionTextMesh

BoonPage

奖励纹理显示在页面左右两侧(右侧图标水平翻转)

otherArgs参数: headerText, boon

类字段:

  • Renderer iconRenderer
  • Renderer iconRenderer2
  • TextMeshPro nameTextMesh
  • TextMeshPro descriptionTextMesh

ItemPage

道具的rulebookSprite显示在页面左侧

otherArgs参数: headerText

类字段:

  • Renderer iconRenderer
  • TextMeshPro nameTextMesh
  • TextMeshPro descriptionTextMesh
  • Transform itemModelParent
  • GameObject itemModel