232 lines
6.3 KiB
Lua
232 lines
6.3 KiB
Lua
BOSSqueryOBJ = Up_BaseClassOBJ:new()
|
||
|
||
BOSSqueryOBJ.__cname = "BOSSqueryOBJ"
|
||
|
||
-- UI导出文件路径
|
||
BOSSqueryOBJ.UIfile = "game/Tongyong/BOSSqueryUI"
|
||
|
||
-- 数据
|
||
BOSSqueryOBJ.cfg = {}
|
||
|
||
---* 窗口创建入口
|
||
function BOSSqueryOBJ:main(arg1, arg2, arg3, data)
|
||
-- 防止重复打开
|
||
if GUI:Win_IsNotNull(self.__cname) then
|
||
GUI:Win_Close(self.__cname)
|
||
end
|
||
|
||
local parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, false, false, true, false)
|
||
if not parent then
|
||
return false
|
||
end
|
||
|
||
-- 加载UI导出文件
|
||
GUI:LoadExport(parent, self.UIfile)
|
||
|
||
self._parent = parent
|
||
self.ui = GUI:ui_delegate(parent)
|
||
|
||
-- 窗口居中
|
||
ssrUIManager:OpenAlgin(self)
|
||
|
||
-- 背景图点击关闭
|
||
GUI:addOnClickEvent(self.ui.bg_close, function()
|
||
GUI:Win_Close(self._parent)
|
||
end)
|
||
|
||
-- 关闭按钮
|
||
GUI:addOnClickEvent(self.ui.btn_close, function()
|
||
GUI:Win_Close(self._parent)
|
||
end)
|
||
|
||
-- 绑定事件
|
||
self:EventBind()
|
||
|
||
-- 接收服务端数据
|
||
if data and data.cfg then
|
||
self.cfg = data.cfg
|
||
end
|
||
|
||
-- 创建 TableView(在img_bg上,与Title下方对齐)
|
||
self.dataList = {}
|
||
self:CreateTableView()
|
||
|
||
-- 构建数据并刷新
|
||
self:buildDataList()
|
||
if self.ui.tableView then
|
||
GUI:TableView_reloadData(self.ui.tableView)
|
||
end
|
||
end
|
||
|
||
---* 创建 TableView
|
||
function BOSSqueryOBJ:CreateTableView()
|
||
-- TableView 已在 UI 文件中创建,此处只配置回调
|
||
|
||
-- 设置行数
|
||
GUI:TableView_setTableViewCellsNumHandler(self.ui.tableView, function()
|
||
return self.dataList and #self.dataList or 0
|
||
end)
|
||
|
||
-- cell创建回调
|
||
GUI:TableView_setCellCreateEvent(self.ui.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
|
||
|
||
---* 构建数据列表
|
||
function BOSSqueryOBJ:buildDataList()
|
||
local cfg = self.cfg or {}
|
||
self.dataList = {}
|
||
|
||
for i, v in ipairs(cfg) do
|
||
-- 根据绝对复活时间戳计算剩余秒数
|
||
local respawnTime = 0
|
||
local reviveStamp = v.reviveStamp or 0
|
||
if not v.alive and reviveStamp > 0 then
|
||
local now = SL:GetValue("SERVER_TIME") or 0
|
||
respawnTime = math.max(0, reviveStamp - now)
|
||
end
|
||
local item = {
|
||
idx = i,
|
||
map = v.map or "",
|
||
name = v.name or "",
|
||
level = v.level or "S级",
|
||
alive = v.alive or false,
|
||
respawnTime = respawnTime,
|
||
appr = v.appr or 0,
|
||
}
|
||
table.insert(self.dataList, item)
|
||
end
|
||
end
|
||
|
||
---* 构建每行UI
|
||
function BOSSqueryOBJ:buildCell(cellParent, item)
|
||
-- cellParent会被复用,先清空
|
||
GUI:removeAllChildren(cellParent)
|
||
|
||
-- 行背景图片 (cell宽498, 高56, 垂直居中 y=28)
|
||
local cell_bg = GUI:Image_Create(cellParent, "cell_bg_" .. item.idx, 0, 0, "res/custom/43/3.png")
|
||
GUI:setTouchEnabled(cell_bg, true)
|
||
GUI:setSwallowTouches(cell_bg, false)
|
||
|
||
|
||
-- cell点击事件
|
||
GUI:addOnClickEvent(cell_bg, function()
|
||
self.selectedIdx = item.idx
|
||
GUI:TableView_reloadDataEx(self.ui.tableView)
|
||
self:showBossModel(item)
|
||
end)
|
||
|
||
-- 地图名称
|
||
local text_map = GUI:Text_Create(cell_bg, "text_map_" .. item.idx, 64, 28, 15, "#CCAA66", item.map)
|
||
GUI:setAnchorPoint(text_map, 0.50, 0.50)
|
||
|
||
-- BOSS名称
|
||
local text_name = GUI:Text_Create(cell_bg, "text_name_" .. item.idx, 190, 28, 16, "#FFFFFF", item.name)
|
||
GUI:setAnchorPoint(text_name, 0.50, 0.50)
|
||
GUI:Text_enableOutline(text_name, "#000000", 1)
|
||
|
||
-- 等级标签
|
||
local levelColor = "#FF4444"
|
||
if item.level == "S级" then
|
||
levelColor = "#FF4444"
|
||
elseif item.level == "A级" then
|
||
levelColor = "#FF8800"
|
||
elseif item.level == "B级" then
|
||
levelColor = "#FFCC00"
|
||
end
|
||
local text_level = GUI:Text_Create(cell_bg, "text_level_" .. item.idx, 380, 28, 15, levelColor, item.level)
|
||
GUI:setAnchorPoint(text_level, 0.00, 0.50)
|
||
GUI:Text_enableOutline(text_level, "#000000", 1)
|
||
|
||
|
||
-- 刷新状态
|
||
local refreshStr, refreshColor
|
||
if item.alive then
|
||
refreshStr = "已刷新"
|
||
refreshColor = "#33FF33"
|
||
else
|
||
refreshStr = "未刷新"
|
||
refreshColor = "#FF4444"
|
||
end
|
||
local text_refresh = GUI:Text_Create(cell_bg, "text_refresh_" .. item.idx, 420, 28, 15, refreshColor, refreshStr)
|
||
GUI:setAnchorPoint(text_refresh, 0.00, 0.50)
|
||
GUI:Text_enableOutline(text_refresh, "#000000", 1)
|
||
|
||
|
||
SL:dump(item.respawnTime)
|
||
-- 倒计时
|
||
local text_countdown = GUI:Text_Create(cell_bg, "text_countdown_" .. item.idx, 276, 28, 15, "#FFCC00", "")
|
||
GUI:setAnchorPoint(text_countdown, 0.00, 0.50)
|
||
GUI:Text_enableOutline(text_countdown, "#000000", 1)
|
||
if not item.alive then
|
||
local respawn = item.respawnTime or 0
|
||
if respawn > 0 then
|
||
GUI:Text_COUNTDOWN(text_countdown, respawn, nil, 1)
|
||
end
|
||
end
|
||
|
||
-- 选中高亮覆盖图
|
||
if item.idx == self.selectedIdx then
|
||
GUI:Image_Create(cell_bg, "cell_select_" .. item.idx, 0, 0, "res/custom/43/4.png")
|
||
end
|
||
|
||
return cell_bg
|
||
end
|
||
|
||
---* 展示BOSS模型
|
||
function BOSSqueryOBJ:showBossModel(item)
|
||
if not self.ui.boss_model_node then
|
||
return
|
||
end
|
||
|
||
-- 清除旧模型
|
||
GUI:removeAllChildren(self.ui.boss_model_node)
|
||
|
||
local appr = item.appr or 0
|
||
if appr <= 0 then
|
||
return
|
||
end
|
||
|
||
-- 使用 Effect_Create 展示怪物模型 (effecttype=2=怪物)
|
||
local model = GUI:Effect_Create(
|
||
self.ui.boss_model_node,
|
||
"boss_model",
|
||
100, -- x (200宽节点居中)
|
||
140, -- y (280高节点居中)
|
||
2, -- effecttype: 怪物
|
||
appr, -- effectid: 怪物appr
|
||
0, -- sex
|
||
0, -- act: 待机
|
||
3, -- dir
|
||
1 -- speed
|
||
)
|
||
GUI:setScale(model, 1.0)
|
||
end
|
||
|
||
---* 事件绑定
|
||
function BOSSqueryOBJ:EventBind()
|
||
--关闭窗口
|
||
SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname, function(widgetName)
|
||
self:OnClose(widgetName)
|
||
end)
|
||
end
|
||
|
||
--关闭窗口
|
||
function BOSSqueryOBJ:OnClose(widgetName)
|
||
if widgetName == self.__cname then
|
||
self:UnRegisterEvent()
|
||
end
|
||
end
|
||
|
||
---* 注销事件
|
||
function BOSSqueryOBJ:UnRegisterEvent()
|
||
SL:UnRegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.__cname)
|
||
end
|
||
|
||
return BOSSqueryOBJ
|