202 lines
7 KiB
Lua
202 lines
7 KiB
Lua
ZBHuiShouOBJ = Up_BaseClassOBJ:new()
|
||
|
||
ZBHuiShouOBJ.__cname = "FuLiDaTingOBJ"
|
||
|
||
|
||
ZBHuiShouOBJ.cfg = {}
|
||
|
||
function ZBHuiShouOBJ:main(parent, data)
|
||
|
||
self.cfg = data
|
||
|
||
GUI:LoadExport(parent, "game/FuLiDaTing/ZBHuiShouUI")
|
||
|
||
self._parent = parent
|
||
self.ui = GUI:ui_delegate(parent)
|
||
if not self.ui then
|
||
return false
|
||
end
|
||
|
||
-- 隐藏导出的 ListView,使用 TableView 替代
|
||
GUI:setVisible(self.ui.ListView, false)
|
||
self.dataList = {}
|
||
self:CreateTableView()
|
||
|
||
---* 绑定事件
|
||
self:EventBind()
|
||
self:updata()
|
||
end
|
||
|
||
--创建 TableView(与导出的 ListView 同位置同尺寸)
|
||
function ZBHuiShouOBJ:CreateTableView()
|
||
-- ListView 原配置: 父=parent, 位置(-262,-199), 尺寸 528x363, 方向=1(垂直), 间距=4
|
||
-- TableView 不支持 itemsMargin,把间距叠加到 cellHei 中(68 + 4)
|
||
-- num=7:可视区 363/72 ≈ 5,加上下缓冲
|
||
self.tableView = GUI:TableView_Create(self._parent, "TableView", -262, -199, 528, 363, 1, 528, 72, 7)
|
||
GUI:setAnchorPoint(self.tableView, 0.00, 0.00)
|
||
|
||
GUI:TableView_setTableViewCellsNumHandler(self.tableView, function()
|
||
return self.dataList and #self.dataList or 0
|
||
end)
|
||
|
||
GUI:TableView_setCellCreateEvent(self.tableView, function(cellParent, idx)
|
||
local realIdx = (tonumber(idx) or 0)
|
||
local item = self.dataList[realIdx]
|
||
if not item then
|
||
return
|
||
end
|
||
self:buildCell(cellParent, item)
|
||
end)
|
||
end
|
||
|
||
--根据 cfg、回收计数、背包中是否拥有该装备构建 dataList
|
||
--三档排序:可回收(未达上限 + 背包有,带红点)置顶 → 普通未达档(背包没但还能回收)居中 → 已达上限置底
|
||
function ZBHuiShouOBJ:buildDataList()
|
||
local cfg = self.cfg or {}
|
||
local canGet, normal, done = {}, {}, {}
|
||
for i, v in ipairs(cfg) do
|
||
local num = hk.getkeycount("GLOBAL(STR_福利回收)", i) or 0
|
||
local bag_num = tonumber(SL:Get_ITEM_COUNT(v.name)) or 0
|
||
local item = { idx = i, v = v, num = num, bag_num = bag_num }
|
||
if num >= (v.num or 0) then
|
||
table.insert(done, item)
|
||
elseif bag_num > 0 then
|
||
table.insert(canGet, item)
|
||
else
|
||
table.insert(normal, item)
|
||
end
|
||
end
|
||
self.dataList = {}
|
||
for _, it in ipairs(canGet) do table.insert(self.dataList, it) end
|
||
for _, it in ipairs(normal) do table.insert(self.dataList, it) end
|
||
for _, it in ipairs(done) do table.insert(self.dataList, it) end
|
||
end
|
||
|
||
function ZBHuiShouOBJ:updata()
|
||
self:buildDataList()
|
||
if self.tableView then
|
||
GUI:TableView_reloadData(self.tableView)
|
||
end
|
||
end
|
||
|
||
--回收计数变化:重新排序并保持滚动位置
|
||
function ZBHuiShouOBJ:setsort()
|
||
self:buildDataList()
|
||
if self.tableView then
|
||
GUI:TableView_reloadDataEx(self.tableView)
|
||
end
|
||
end
|
||
|
||
--在 TableView cell 父节点内构建一行 UI
|
||
function ZBHuiShouOBJ:buildCell(cellParent, item)
|
||
-- TableView 是虚拟化加载,cellParent 会被复用,必须先清空旧子节点
|
||
GUI:removeAllChildren(cellParent)
|
||
|
||
local i = item.idx
|
||
local v = item.v
|
||
local num = item.num
|
||
|
||
local list_bg = GUI:Image_Create(cellParent, "list_bg_", 0, 0, "res/custom/02/14.png")
|
||
|
||
local item_show = GUI:ItemShow_Create(list_bg, "item_" .. i, 46.00, 36.00, { index = SL:GetMetaValue("ITEM_INDEX_BY_NAME", v.name), count = 1, bgVisible = false, look = true })
|
||
GUI:setAnchorPoint(item_show, 0.50, 0.50)
|
||
|
||
local give_str = {}
|
||
for _, gives in ipairs(v.gives) do
|
||
table.insert(give_str, string.format("%sx%d", gives[1], gives[2]))
|
||
end
|
||
|
||
local gives_Text = GUI:Text_Create(list_bg, "gives_Text_" .. i, 216, 34, 16, "#00ff00", table.concat(give_str, ", "))
|
||
GUI:setAnchorPoint(gives_Text, 0.50, 0.50)
|
||
|
||
local xiangou_Text = GUI:Text_Create(list_bg, "xiangou_Text_" .. i, 334, 34, 16, "#00ff00", string.format("%d/%d", num, v.num))
|
||
GUI:setAnchorPoint(xiangou_Text, 0.50, 0.50)
|
||
GUI:Text_enableOutline(xiangou_Text, "#000000", 2)
|
||
GUI:Text_setTextColor(xiangou_Text, num >= v.num and "#ff0000" or "#00ff00")
|
||
|
||
if num >= v.num then
|
||
local list_open_img = GUI:Image_Create(list_bg, "list_open_img", 470, 34, "res/custom/Label/3.png")
|
||
GUI:setScale(list_open_img, 0.2)
|
||
GUI:setAnchorPoint(list_open_img, 0.50, 0.50)
|
||
else
|
||
local list_btn = GUI:Button_Create(list_bg, "list_btn", 470, 34, "res/custom/02/20.png")
|
||
GUI:Button_loadTexturePressed(list_btn, "res/custom/02/21.png")
|
||
GUI:setAnchorPoint(list_btn, 0.50, 0.50)
|
||
GUI:addOnClickEvent(list_btn, function()
|
||
ssrMessage:SubLink(MeiriXianGouOBJ.__cname .. "_recycle", { id = i })
|
||
end)
|
||
--背包中拥有该装备:回收按钮加红点
|
||
if (item.bag_num or 0) > 0 then
|
||
RedDotMgr.attachDot(list_btn, { x = 5, y = 5 })
|
||
end
|
||
end
|
||
|
||
return list_bg
|
||
end
|
||
|
||
function ZBHuiShouOBJ:EventBind()
|
||
local function ZBHuiShouOBJ_Var_Change(data)
|
||
if GUI:Win_IsNotNull(self._parent) then
|
||
if data.key == "GLOBAL(STR_福利回收)" then
|
||
self:setsort()
|
||
return
|
||
end
|
||
end
|
||
end
|
||
SL:RegisterLUAEvent(LUA_EVENT_SERVER_VALUE_CHANGE, self.__cname, ZBHuiShouOBJ_Var_Change)
|
||
|
||
--背包变化也要重排(能回收的装备变多/减少影响红点与三档排序)
|
||
SL:RegisterLUAEvent(LUA_EVENT_BAG_ITEM_CHANGE, self.__cname, function()
|
||
if GUI:Win_IsNotNull(self._parent) then
|
||
self:setsort()
|
||
end
|
||
end)
|
||
|
||
--关闭窗口
|
||
SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname .. "mrcz", function(widgetName)
|
||
self:OnClose(widgetName)
|
||
end)
|
||
end
|
||
|
||
--关闭窗口
|
||
function ZBHuiShouOBJ:OnClose(widgetName)
|
||
if widgetName == self.__cname then
|
||
self:UnRegisterEvent()
|
||
end
|
||
end
|
||
|
||
function ZBHuiShouOBJ:UnRegisterEvent()
|
||
SL:UnRegisterLUAEvent(LUA_EVENT_SERVER_VALUE_CHANGE, self.__cname)
|
||
SL:UnRegisterLUAEvent(LUA_EVENT_BAG_ITEM_CHANGE, self.__cname)
|
||
SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname)
|
||
end
|
||
|
||
--注册到全局红点系统:任意装备未达回收上限 → 福利按钮 4 + 顶部福利图标都亮
|
||
if RedDotMgr and RedDotMgr.register then
|
||
RedDotMgr:register("FuLi_ZBHuiShou", {
|
||
owner = "FuLiDaTingOBJ",
|
||
parent = "TopIcon_FuLi",
|
||
target = function()
|
||
return FuLiDaTingOBJ and FuLiDaTingOBJ.ui and FuLiDaTingOBJ.ui.class_btn_4
|
||
end,
|
||
offset = { x = 105, y = 35 },
|
||
watchKeys = { "GLOBAL(STR_福利回收)" },
|
||
watchBag = true,
|
||
check = function()
|
||
local cfg = FuLiDaTingOBJ and FuLiDaTingOBJ.cfg and FuLiDaTingOBJ.cfg[4]
|
||
if not cfg then
|
||
return false
|
||
end
|
||
for i, v in ipairs(cfg) do
|
||
local num = hk.getkeycount("GLOBAL(STR_福利回收)", i) or 0
|
||
local bag_item_num = tonumber(SL:Get_ITEM_COUNT(v.name)) or 0
|
||
if num < (v.num or 0) and bag_item_num > 0 then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end,
|
||
})
|
||
end
|
||
|
||
return ZBHuiShouOBJ
|