KLPreviewPanel.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. ---@class KLPreviewPanel:UIKmlLuaPanelBase
  2. ---@field view KLPreviewPanelView
  3. local KLPreviewPanel = class(UIKmlLuaPanelBase)
  4. ---创建时调用一次
  5. function KLPreviewPanel:Init()
  6. self.onClickCfgId = -1
  7. self.selectid = 0
  8. self.previewCreatList = {}
  9. self.previewCreatListIndex = 0
  10. SL.HideMainPanel()
  11. --GetPreviewData
  12. end
  13. function KLPreviewPanel:DataListItemCountFunc()
  14. return table.count(self.Info)
  15. end
  16. function KLPreviewPanel:DataListItemGetFunc(realIndex)
  17. end
  18. function KLPreviewPanel:DataListItemInitFunc(realIndex, kmlcontrol)
  19. end
  20. function KLPreviewPanel:DataListItemUpdateFunc(realIndex, kmlcontrol)
  21. local btn = GUI:GetChildControl(self.view.previewlist,realIndex,'toggle') --self.view.previewlist:GetChildControl(realIndex, 'toggle')
  22. local red = GUI:GetChildControl(self.view.previewlist,realIndex,"red") --self.view.previewlist:GetChildControl(realIndex, "red")
  23. self.btn[realIndex] = btn
  24. GUI:AddOnClickEvent(self.btn[realIndex], self, function()
  25. self:LoadPanel(realIndex)
  26. end)
  27. if self.Info[realIndex + 1]["red"] == 1 then
  28. GUI:SetActive(red, true)
  29. else
  30. GUI:SetActive(red, false)
  31. end
  32. local testtext = GUI:GetChildControl(self.view.previewlist,realIndex,"test") --self.view.previewlist:GetChildControl(realIndex, "test")
  33. GUI:Text_setString(testtext, "玩法预告")
  34. end
  35. ---创建或者刷新界面数据时调用
  36. function KLPreviewPanel:Refresh()
  37. self.previewRewardInfo = SL:TaskInfo_GetPreviewRewardInfo()
  38. if not self.cfgInfo then
  39. self.cfgInfo = SL:GetConfigTable("cfg_preview")
  40. end
  41. self.Info = self:LoadInfo()
  42. if #self.Info == 0 then
  43. GUI:UIPanel_Close("dev/ui/Preview/Panel/KLPreview/KLPreviewPanel")
  44. SL.ShowMainPanel()
  45. return
  46. end
  47. self.btn = {}
  48. GUI:DataListInitData(self.view.previewlist, function()
  49. return self:DataListItemCountFunc()
  50. end, function(realIndex)
  51. return self:DataListItemGetFunc(realIndex)
  52. end, function(realIndex, kmlcontrol)
  53. return self:DataListItemInitFunc(realIndex, kmlcontrol)
  54. end, function(realIndex, kmlcontrol)
  55. return self:DataListItemUpdateFunc(realIndex, kmlcontrol)
  56. end)
  57. GUI:DataListUpdateData(self.view.previewlist,_,function()
  58. for i, v in pairs(self.btn) do
  59. if i == self.selectid - 1 then
  60. GUI:Button_loadTextureNormal(v, "one_button_select_bg", "Atlas/UITradePanel.spriteatlas")
  61. else
  62. GUI:Button_loadTextureNormal(v, "one_button_bg", "Atlas/UITradePanel.spriteatlas")
  63. end
  64. end
  65. end)
  66. self:LoadPanel(0)
  67. self.onClickCfgId = -1
  68. end
  69. ---注册UI事件和服务器消息
  70. function KLPreviewPanel:RegistEvents()
  71. GUI:AddOnClickEvent(self.view.closeBtn, self, self.ClosePreviewPanel)
  72. SL:RegisterLuaNetMsg(MessageDef.ResPreviewRewardInfoMessage, self.ResPreviewRewardInfoMessage, self)
  73. end
  74. function KLPreviewPanel:Close()
  75. SL:UnSchedule(self.maskSchedule)
  76. SL.ShowMainPanel()
  77. SL:UnRegisterLuaNetMsg(MessageDef.ResPreviewRewardInfoMessage, self.ResPreviewRewardInfoMessage, self)
  78. end
  79. function KLPreviewPanel:LoadPanel(index)
  80. self.selectid = index + 1
  81. GUI:SetActive(self.view.receive_btn, true)
  82. GUI:SetActive(self.view.receive_text, false)
  83. for i, v in pairs(self.btn) do
  84. if i == index then
  85. GUI:Button_loadTextureNormal(v, "one_button_select_bg", "Atlas/UITradePanel.spriteatlas")
  86. else
  87. GUI:Button_loadTextureNormal(v, "one_button_bg", "Atlas/UITradePanel.spriteatlas")
  88. end
  89. end
  90. -- 加载步骤:根据索引读表,解析,对应信息,显示
  91. local data = self.Info[index + 1]
  92. if not data then
  93. data = {}
  94. end
  95. self.previewCreatList = {}
  96. self.previewCreatListIndex = 0
  97. GUI:DataListInitData(self.view.contentlist, function()
  98. return self:DataContentListCountFunc()
  99. end, function(realIndex)
  100. return self:DataContentListGetFunc(realIndex)
  101. end, function(realIndex, kmlcontrol)
  102. return self:DataContentListInitFunc(realIndex, kmlcontrol)
  103. end, function(realIndex, kmlcontrol)
  104. return self:DataContentListUpdateFunc(realIndex, kmlcontrol)
  105. end)
  106. GUI:DataListUpdateData(self.view.contentlist,nil,function()
  107. self:InitSmall_TittleList()
  108. end)
  109. self.cfgid = data["id"]
  110. local completionLevel = data["completionLevel"]
  111. if SL:MeData_GetLevel() >= completionLevel then
  112. if not self.previewRewardInfo[self.cfgid] then
  113. GUI:Button_setTitleText(self.view.receive_btn, "领取")
  114. GUI:AddOnClickEvent(self.view.receive_btn, self, self.Receive)
  115. else
  116. GUI:Button_setTitleText(self.view.receive_btn, "前往")
  117. GUI:AddOnClickEvent(self.view.receive_btn, self, function()
  118. self.GoToPanel(data)
  119. end)
  120. end
  121. else
  122. GUI:SetActive(self.view.receive_btn, false)
  123. str = "达到" .. completionLevel .. "解锁"
  124. GUI:SetActive(self.view.receive_text, true)
  125. if str then
  126. GUI:Text_setString(self.view.receive_text, str)
  127. end
  128. end
  129. if data.item then
  130. --GUI:Item_setItemId(self.view.receive_item,data.item[1])
  131. GUI:Item_UpdataData(self.view.receive_item, {
  132. itemid = data.item[1],
  133. itemcount = data.item[2]
  134. })
  135. GUI:AddOnClickEvent(self.view.clickItem, self, function()
  136. SL:OpenTips("", data.item[1])
  137. end)
  138. --SL:OpenTips("",data.item[1])
  139. end
  140. end
  141. function KLPreviewPanel:LoadInfo()
  142. --拿信息,根据信息排序
  143. local data = {}
  144. local complete = {} -- 可领取
  145. local done = {} -- 已完成
  146. local incomplete = {} -- 未达成
  147. for k, v in pairs(self.cfgInfo) do
  148. local showinfo = v
  149. showinfo["red"] = 0
  150. if SL:MeData_GetLevel() >= showinfo.showLevel then
  151. if SL:MeData_GetLevel() >= showinfo.completionLevel then
  152. if self.previewRewardInfo[showinfo.id] then
  153. --已完成
  154. if SL:MeData_GetLevel() < showinfo.hideLevel then
  155. table.insert(done, showinfo)
  156. end
  157. else
  158. -- 可领取未领取
  159. showinfo["red"] = 1
  160. table.insert(complete, showinfo)
  161. end
  162. else
  163. table.insert(incomplete, showinfo)
  164. end
  165. end
  166. end
  167. table.sort(complete, function(a, b)
  168. return a.completionLevel < b.completionLevel
  169. end)
  170. table.sort(done, function(a, b)
  171. return a.completionLevel < b.completionLevel
  172. end)
  173. table.sort(incomplete, function(a, b)
  174. return a.completionLevel < b.completionLevel
  175. end)
  176. for i = 1, #complete do
  177. table.insert(data, complete[i])
  178. end
  179. for i = 1, #incomplete do
  180. table.insert(data, incomplete[i])
  181. end
  182. for i = 1, #done do
  183. table.insert(data, done[i])
  184. end
  185. return data
  186. end
  187. function KLPreviewPanel:Receive()
  188. if self.onClickCfgId == self.cfgid then
  189. SL:MessageTip({ id = 501 })
  190. return
  191. end
  192. self.onClickCfgId = self.cfgid
  193. SL:ReqReceivePreviewRewardMessage(self.cfgid)
  194. if self.maskSchedule then
  195. SL:UnSchedule(self.maskSchedule)
  196. end
  197. self.maskSchedule = SL:ScheduleOnce(0.5, function()
  198. self.onClickCfgId = -1
  199. end)
  200. end
  201. function KLPreviewPanel:ClosePreviewPanel()
  202. GUI:UIPanel_Close("dev/ui/Preview/Panel/KLPreview/KLPreviewPanel")
  203. SL.ShowMainPanel()
  204. end
  205. function KLPreviewPanel.GoToPanel(data)
  206. if data.openPanel[1] and not string.isNullOrEmpty(data.openPanel[1][1]) then
  207. GUI:UIPanel_Close("dev/ui/Preview/Panel/KLPreview/KLPreviewPanel")
  208. local uipath = data.openPanel[1][1]
  209. local args = data.openPanel[1][2]
  210. GUI:UIPanel_Open(uipath, nil, nil, args)
  211. SL:HideMainPanel()
  212. end
  213. --if data.Panel then
  214. -- GUI:UIPanel_Open(data.Panel,nil,nil,)
  215. --end
  216. end
  217. function KLPreviewPanel:DataContentListCountFunc()
  218. return table.count(self.Info[self.selectid]["name"])
  219. end
  220. function KLPreviewPanel:DataContentListGetFunc(realIndex)
  221. end
  222. function KLPreviewPanel:DataContentListInitFunc(realIndex, kmlcontrol)
  223. SL:Log('DataListItemInitFunc' .. tostring(realIndex))
  224. end
  225. function KLPreviewPanel:DataContentListUpdateFunc(realIndex, kmlcontrol)
  226. local nametext = GUI:GetChildControl(self.view.contentlist,realIndex,'preview_name') --self.view.contentlist:GetChildControl(realIndex, 'preview_name')
  227. local data = self.Info[self.selectid]
  228. local name = data["name"][realIndex + 1][1]
  229. if name then
  230. GUI:Text_setString(nametext, name)
  231. end
  232. local small_tittlelist = GUI:GetChildControl(self.view.contentlist,realIndex,'small_tittlelist') --self.view.contentlist:GetChildControl(realIndex, 'small_tittlelist')
  233. self.previewCreatList[realIndex + 1] = small_tittlelist
  234. --self.preview_content = small_tittlelist
  235. --self.preview_name = realIndex + 1
  236. end
  237. function KLPreviewPanel:InitSmall_TittleList()
  238. self.previewCreatListIndex = self.previewCreatListIndex + 1
  239. if not self.previewCreatList[self.previewCreatListIndex] then
  240. return
  241. end
  242. GUI:DataListInitData(self.previewCreatList[self.previewCreatListIndex], function()
  243. return self:DataTittleListCountFunc()
  244. end, function(realIndex)
  245. return self:DataTittleListGetFunc(realIndex)
  246. end, function(realIndex, kmlcontrol)
  247. return self:DataTittleListInitFunc(realIndex, kmlcontrol)
  248. end, function(realIndex, kmlcontrol)
  249. return self:DataTittleListUpdateFunc(realIndex, kmlcontrol)
  250. end)
  251. GUI:DataListUpdateData(self.previewCreatList[self.previewCreatListIndex],nil,function()
  252. self:RefreshSmall_TittleList(self.previewCreatListIndex - 1)
  253. self:InitSmall_TittleList()
  254. end)
  255. end
  256. function KLPreviewPanel:RefreshSmall_TittleList(index)
  257. local _, sizey = GUI:getSizeDelta(GUI:GetChildControl(self.view.contentlist,index,'preview_name_img')) --(self.view.contentlist:GetChildControl(realIndex, 'preview_name_img'))
  258. for i = 0, table.count(self.Info[self.selectid]["describe"][index + 1]) do
  259. local textlayout1 = GUI:GetChildControl(self.view.contentlist,index,"textlayout1") --self.view.contentlist:GetChildControl(realIndex, "textlayout1")
  260. sizey = sizey + GUI:getSizeDelta(textlayout1)
  261. end
  262. local content_layout = GUI:GetChildControl(self.view.contentlist,index,"content_layout")--self.view.contentlist:GetChildControl(realIndex, "content_layout")
  263. GUI:setContentSize(content_layout, 730, sizey + 12)
  264. end
  265. function KLPreviewPanel:DataTittleListCountFunc()
  266. return self.Info[self.selectid]["describe"][self.previewCreatListIndex] and table.count(self.Info[self.selectid]["describe"][self.previewCreatListIndex])
  267. end
  268. function KLPreviewPanel:DataTittleListGetFunc(realIndex)
  269. end
  270. function KLPreviewPanel:DataTittleListInitFunc(realIndex, kmlcontrol)
  271. --SL:Log('DataListItemInitFunc' .. tostring(realIndex))
  272. end
  273. function KLPreviewPanel:DataTittleListUpdateFunc(realIndex, kmlcontrol)
  274. local data = self.Info[self.selectid]["describe"][self.previewCreatListIndex][realIndex + 1]
  275. local content = self.previewCreatList[self.previewCreatListIndex]
  276. local preview_tittle = GUI:GetChildControl(content,realIndex,'preview_tittle') --self.preview_content:GetChildControl(realIndex, 'preview_tittle')
  277. local str = data[1]
  278. if str then
  279. GUI:Text_setString(preview_tittle, str)
  280. end
  281. local preview_text = GUI:GetChildControl(content,realIndex,'preview_text') --self.preview_content:GetChildControl(realIndex, 'preview_text')
  282. str = data[2]
  283. if str then
  284. GUI:Text_setString(preview_text, str)
  285. end
  286. local textlayout1 = GUI:GetChildControl(content,realIndex,"textlayout1") --self.preview_content:GetChildControl(realIndex, "textlayout1")
  287. local preview_text_layout = GUI:GetChildControl(content,realIndex,"preview_text_layout")--self.preview_content:GetChildControl(realIndex, "preview_text_layout")
  288. local _, textsizey = GUI:getSizeDelta(preview_text)
  289. GUI:setContentSize(preview_text_layout, 700, textsizey)
  290. local _, imagesizey = GUI:getSizeDelta (GUI:GetChildControl(content,realIndex,'preciew_icon_img1'))--(self.preview_content:GetChildControl(realIndex, 'preciew_icon_img1'))
  291. GUI:setContentSize(textlayout1, 730, textsizey + imagesizey + 12)
  292. end
  293. ---@param message RoleProtos.ReceivePreviewRewardRes @预告奖励领取信息 响应
  294. function KLPreviewPanel:ResPreviewRewardInfoMessage(_, message)
  295. local data = {}
  296. for k, v in pairs(message.receiveInfos) do
  297. self.previewRewardInfo[v.id] = v.isReceive
  298. local hideLeveltable = SL:GetConfig("cfg_preview", v.id, "id")
  299. local hideLevel = hideLeveltable["hideLevel"]
  300. if SL:MeData_GetLevel() >= hideLevel then
  301. table.insert(data, v.id)
  302. end
  303. end
  304. local itemdata = SL:GetConfig("cfg_preview", self.cfgid, "id").item
  305. local items = {}
  306. items[itemdata[1]] = itemdata[2]
  307. --SL:OpenRewardTips(items,0)
  308. SL:onLUAEvent(LUA_EVENT_PREVIEW_OVER, data)
  309. self:Refresh()
  310. end
  311. return KLPreviewPanel