bayuMIR/client/dev/GUILayout/game/tongyong/BOSSqueryOBJ.lua
2026-06-18 01:11:06 +08:00

230 lines
6.3 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
-- 倒计时
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