
装备界面框架
装备界面框架
查看大图此 UI 框架提供了一系列 API,用于在负载(Loadout)UI 面板中添加新分区或替换现有分区。
据我理解,Kuertee UI Extension 为现有分区提供了固定的 API。而我的模组需要一个更灵活的框架,以便其他模组能够添加自定义 UI 分区。
- 本框架不负责构建或辅助设计 UI 分区的内容。它会在一个共享钩子下注册多个针对负载 UI 面板的 UI 模组。
- 本框架会遍历所有已注册的 UI 数据包,并通过一个钩子统一执行它们。这样可以防止多个模组为了替换原版
menu.setupLoadoutInfoSubmenuRows函数而相互冲突。 - 本框架不依赖 Kuertee UIX,但可以将 Kuertee UIX 作为可选依赖项,与它兼容。它会等待 Kuertee UIX 完成对负载 UI 的修改,然后再挂接钩子,以添加任何额外的模组 UI。
高层抽象
menu.setupLoadoutInfoSubmenuRows =
LoadoutUI.wrapper(
Aggregate(
menu.setupLoadoutInfoSubmenuRows, -- vanilla or modified
UI_Mod_1,
UI_Mod_2,
UI_Mod_3
)
)
主 API 每个 UI 模组必须提供两个函数,并维护它们之间的数据契约:
- 构建数据:一个必须将所有数据作为数据包返回的函数。框架会将该数据传递给构建函数。如果它返回 nil,则框架跳过该 UI 数据包的执行。
- 构建函数:一个使用数据包的完整 UI 渲染函数。
LoadoutUI.RegisterUI UI 注册调用示例
local LoadoutUI = _G.LoadoutUI
LoadoutUI.RegisterUI("mod_id", function()
return {
-- use add or replace, or both if you are adding a new UI and replace existing
add = {
{
newname = "New section name",
targetname = "Original section name", -- for new UI positioning
builddata = function(vanillaparams) end,
buildfunction = function(vanillaparams, builddata) end,
},
},
replace = {
{
newname = "New name to replace or the original section name",
targetname = "Original section name",
builddata = function(vanillaparams) end,
buildfunction = function(vanillaparams, builddata) end,
},
},
}
end)
原版参数
这是原版 menu.setupLoadoutInfoSubmenuRows 使用的一个打包参数。本框架会获取菜单函数及其参数的实例,然后将它们传递给您的函数。构建数据函数可以选择不使用它,但它仍然会被传递给它。
-- 参考 menu_map.lua (位于 08.cat) 中的原版 menu.setupLoadoutInfoSubmenuRows 以了解更多详情
local vanillaparams = {
menu = menu, -- 实例引用 UI 菜单
mode = mode,
inputtable = inputtable,
inputobject = inputobject,
instance = instance,
}
调试消息 此框架会记录每个 UI 模组的注册,以及针对同一 UI 分区的重复注册情况:
[Loadout UI][RegisterUI] ...
这些仅用于调试,无法解决冲突问题。
可选 API 用于注册常见服务的附加 API。使用 GetService 来获取共享状态或函数。
LoadoutUI.RegisterService
local service = {
data = {},
GetData = function(...) end,
SetData = function(...) end,
}
LoadoutUI.RegisterService("mod_id", "service_id", service)
LoadoutUI.GetService
local service = LoadoutUI.GetService("service_id")
service.GetData(...)
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。