---@class KLActivityPreviewPanel:UIKmlLuaPanelBase ---@field view KLActivityPreviewPanelView ---@field bgLessHeight number ---@field bgMoreHeight number ---@field moreHeight number ---@field moreHeight number ---@field all_item KLActivityPreviewItem[] ---@field dataList {leftTime:number,id:number,open:boolean,cfg:cfg_activity_rule_column,isPreview:boolean} local KLActivityPreviewPanel = class(UIKmlLuaPanelBase) local this = KLActivityPreviewPanel ---创建时调用一次 function this:Init() --self.activityPool = TablePool() --self.activityList = {} self.all_item = {} self.listLessHeight = 75 self.listMoreHeight = 75 * 3 self.listWidth = GUI:GetControlWidth(self.view.scrollview) self.bgLessHeight = 130 self.bgMoreHeight = 130 + 75 * 2 self.bgWidth = GUI:GetControlWidth(self.view.bg) GUI:DataListInitData(self.view.previewItems, function() return self:BtnDataListItemCountFunc() end, function(realIndex) return self:BtnDataListItemGetFunc(realIndex) end, function(realIndex, kmlcontrol) return self:BtnDataListItemInitFunc(realIndex, kmlcontrol) end, function(realIndex, kmlcontrol) return self:BtnDataListItemUpdateFunc(realIndex, kmlcontrol) end) end ---创建或者刷新界面数据时调用 function this:Refresh() --self:RefreshTimeText() --if not self.timer then -- self.timer = Timer.StartLoopForever(1, self.RefreshTimeText, self) --end local panel2 = GUI:GetUI("dev/ui/Monster/Panel/KLMonsterMapPoint/KLMonsterMapPointPanel") if panel2 then panel2:HidePanel() end end ---注册UI事件和服务器消息 function this:RegistEvents() GUI:AddOnClickEvent(self.view.btnClose, self, self.OnClickClose) GUI:AddOnClickEvent(self.view.btnOpenPreview, self, self.OnClickOpenPreview) GUI:AddOnClickEvent(self.view.btnMoreActivity, self, self.OnClickMoreActivity) GUI:AddOnClickEvent(self.view.btnLessActivity, self, self.OnClickLessActivity) GUI:AddOnClickEvent(self.view.btnHidePreview, self, self.OnClickClose) SL:RegisterLUAEvent(LUA_EVENT_ACTIVITYPREVIEW_CHANGE, self.InitActivityItem, self) SL:RegisterLUAEvent(LUA_EVENT_LEVELCHANGE, self.InitActivityItem, self) end --打开活动预告 function this:OnClickOpenPreview() GUI:setVisible(self.view.bgRoot, true) --GUI:setVisible(self.view.btnHidePreview, true) GUI:setVisible(self.view.btnOpenPreview, false) local panel2 = GUI:GetUI("dev/ui/Monster/Panel/KLMonsterMapPoint/KLMonsterMapPointPanel") if panel2 then panel2:HidePanel() end end --点进隐藏更多活动 function this:OnClickLessActivity() GUI:setVisible(self.view.btnMoreActivity, true) GUI:setVisible(self.view.btnLessActivity, false) GUI:setContentSize(self.view.bg, self.bgWidth, self.bgLessHeight) GUI:setContentSize(self.view.scrollview, self.listWidth, self.listLessHeight) end --点击更多活动 function this:OnClickMoreActivity() GUI:setVisible(self.view.btnMoreActivity, false) GUI:setVisible(self.view.btnLessActivity, true) GUI:setContentSize(self.view.bg, self.bgWidth, self.bgMoreHeight) GUI:setContentSize(self.view.scrollview, self.listWidth, self.listMoreHeight) end --关闭活动预告 function this:OnClickClose() GUI:setVisible(self.view.bgRoot, false) --GUI:setVisible(self.view.btnHidePreview, false) GUI:setVisible(self.view.btnOpenPreview, true) end --关闭活动预告 function this:HideActivity() GUI:setVisible(self.view.bgRoot, false) GUI:setVisible(self.view.btnOpenPreview, false) -- GUI:setVisible(self.view.btnHidePreview, false) end --关闭活动预告 function this:ShowActivity() GUI:setVisible(self.view.bgRoot, true) --GUI:setVisible(self.view.btnHidePreview, true) GUI:setVisible(self.view.btnOpenPreview, false) end function this:BtnDataListItemCountFunc() return table.count(self.dataList) end function this:BtnDataListItemGetFunc(realIndex) ---@type KLActivityPreviewItem local item = GUI:UIPanel_Open("dev/outui/Activity/Item/KLActivityPreview/KLActivityPreviewItem", self.view.previewItems, self, nil, true) self.all_item[item.view.root] = item return item.view.root end function this:BtnDataListItemInitFunc(realIndex, kmlcontrol) end function this:BtnDataListItemUpdateFunc(realIndex, kmlcontrol) local tempData = { index = realIndex + 1, data = self.dataList[realIndex + 1] } self.all_item[kmlcontrol]:InitData(tempData.index,tempData.data) self.all_item[kmlcontrol]:RefreshItem() end function this:InitActivityItem() self.dataList = {} for k, v in pairs(InfoManager.activityPreviewInfo.previewInfo) do if SL:MeData_GetLevel() >= v.cfg.level then if v.open and SL:MeData_GetLevel() >= v.cfg.level then --活动开启中 if Time.GetServerTime() < v.leftTime then table.insert(self.dataList,v) end else if v.isPreview then table.insert(self.dataList,v) end end end end if table.count(self.dataList) > 0 then GUI:SetActive(self.view.panelRoot, true) self:RefreshTimeText() if not self.timer then --self.timer = Timer.StartLoopForever(1, self.RefreshTimeText, self) self.timer = SL:Schedule(self.timer,0,1,-1,self.RefreshTimeText,self) end elseif table.count(self.dataList) <= 0 then GUI:SetActive(self.view.panelRoot, false) if self.timer then --Timer.Stop(self.timer) SL:UnSchedule(self.timer) self.timer = nil end end end function this:InitActivityItem_2() self:Recycle() for k, v in pairs(InfoManager.activityPreviewInfo.previewInfo) do ---@type KLActivityPreviewItem local item = self.activityPool:Pop() if not next(item) then item = GUI:UIPanel_Open("dev/outui/Activity/Item/KLActivityPreview/KLActivityPreviewItem", self.view.previewItems, self, nil, true) end self.activityList[k] = item item:InitData(k, v) item:RefreshItem() if SL:MeData_GetLevel() >= v.cfg.level then if v.open and SL:MeData_GetLevel() >= v.cfg.level then --活动开启中 if Time.GetServerTime() < v.leftTime then item:SetActiveUI(true) else item:SetActiveUI(false) self.activityPool:Push(item) end else if v.isPreview then item:SetActiveUI(true) else item:SetActiveUI(false) self.activityPool:Push(item) end end else item:SetActiveUI(false) self.activityPool:Push(item) end end self:RefreshTimeText() if not self.timer then --self.timer = Timer.StartLoopForever(1, self.RefreshTimeText, self) self.timer = SL:Schedule(self.timer,0,1,-1,self.RefreshTimeText,self) end end function this:RefreshTimeText() GUI:DataListUpdateData(self.view.previewItems) --local isHaveActivityOpen = false --for k, v in pairs(self.activityList) do -- if SL:MeData_GetLevel() >= v.data.cfg.level then -- if v.data.open then -- ---结束了 -- if Time.GetServerTime() > v.data.leftTime then -- if v:GetActiveUI() then -- v:SetActiveUI(false) -- self.activityPool:Push(v) -- end -- else -- if not v:GetActiveUI() then -- v:SetActiveUI(true) -- end -- v:RefreshTimeText() -- isHaveActivityOpen = true -- end -- else -- local previewTime = v.data.leftTime - v.data.cfg.specialOpen * 1000 -- if Time.GetServerTime() > previewTime and Time.GetServerTime() < v.data.leftTime then -- if not v:GetActiveUI() then -- v:SetActiveUI(true) -- end -- isHaveActivityOpen = true -- v:RefreshTimeText() -- else -- if v:GetActiveUI() then -- v:SetActiveUI(false) -- self.activityPool:Push(v) -- end -- end -- end -- else -- if v:GetActiveUI() then -- v:SetActiveUI(false) -- self.activityPool:Push(v) -- end -- end --end --if table.count(self.dataList) and not GUI:getVisible(self.view.panelRoot) then -- GUI:SetActive(self.view.panelRoot, true) --elseif not isHaveActivityOpen and GUI:getVisible(self.view.panelRoot) then -- GUI:SetActive(self.view.panelRoot, false) --end end function this:Recycle() for _, v in pairs(self.activityList) do v:SetActiveUI(false) self.activityPool:Push(v) end end function this:Close() --self:Recycle() --self.activityPool = TablePool() --self.activityList = {} if self.timer then --Timer.Stop(self.timer) SL:UnSchedule(self.timer) self.timer = nil end end return this