KLRechargeActivityPanel.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. ---@class KLRechargeActivityPanel:UIKmlLuaPanelBase
  2. ---@field view KLRechargeActivityPanelView
  3. local KLRechargeActivityPanel = class(UIKmlLuaPanelBase)
  4. local this = KLRechargeActivityPanel
  5. --限时礼包主面板
  6. ---创建时调用一次
  7. function this:Init()
  8. --右侧礼包Toggle
  9. GUI:DataListInitData(self.view.activeDataList, function()
  10. return self:RightToggleCountFunc()
  11. end, function(realIndex)
  12. return self:RightToggleGetFunc(realIndex)
  13. end, function(realIndex, kmlcontrol)
  14. return self:RightToggleInitFunc(realIndex, kmlcontrol)
  15. end, function(realIndex, kmlcontrol)
  16. return self:RightToggleUpdateFunc(realIndex, kmlcontrol)
  17. end)
  18. self.Right_Toggle_all_item = {}
  19. --中间礼包
  20. GUI:DataListInitData(self.view.ItemBoxDataList, function()
  21. return self:GiftsCountFunc()
  22. end, function(realIndex)
  23. return self:GiftsGetFunc(realIndex)
  24. end, function(realIndex, kmlcontrol)
  25. return self:GiftsInitFunc(realIndex, kmlcontrol)
  26. end, function(realIndex, kmlcontrol)
  27. return self:GiftsUpdateFunc(realIndex, kmlcontrol)
  28. end)
  29. self.Gifts_all_item = {}
  30. self.SingleGiftItemParents = {
  31. [1] = self.view.SingleGift1,
  32. [2] = self.view.SingleGift2,
  33. [3] = self.view.SingleGift3,
  34. [4] = self.view.SingleGift4,
  35. }
  36. end
  37. --region 右侧礼包Toggle
  38. function this:RightToggleCountFunc()
  39. return #self.allToggleData
  40. end
  41. function this:RightToggleGetFunc(realIndex)
  42. local cfgData = self.allToggleData[realIndex + 1]
  43. local item = GUI:UIPanel_Open("dev/outui/Recharge/Item/KLRechargeActivityToggle/KLRechargeActivityToggleItem",self.view.activeDataList,self,cfgData,true)
  44. self.Right_Toggle_all_item[realIndex + 1] = item
  45. return item.view.root
  46. end
  47. function this:RightToggleInitFunc(realIndex, kmlcontrol)
  48. end
  49. function this:RightToggleUpdateFunc(realIndex, kmlcontrol)
  50. local cfgData = self.allToggleData[realIndex + 1]
  51. self.Right_Toggle_all_item[realIndex + 1]:RefreshItem(cfgData)
  52. end
  53. function this:RefreshRightToggleData()
  54. self.allToggleData = {}
  55. local timeLimitGiftInfo = table.copy(InfoManager.rechargeActivityInfo.timeLimitGiftData)
  56. -- table.sort(timeLimitGiftInfo,function(a, b)
  57. -- return a.group < b.group
  58. -- end)
  59. for group,msgInfo in pairs(timeLimitGiftInfo) do
  60. --没过期的
  61. if msgInfo.endTime - Time.GetServerTime() > 1000 then
  62. local giftCfgs = InfoManager.rechargeActivityInfo.timeLimitGift_giftCfg[group]
  63. if msgInfo.timeLimitGiftInfo and giftCfgs and table.count(msgInfo.timeLimitGiftInfo) < table.count(giftCfgs) then
  64. local allCfg = SL:GetConfig("cfg_timelLimitGift_all",group,"id")
  65. if allCfg then
  66. local data = {}
  67. data.group = group
  68. data.giftCfgs = giftCfgs
  69. data.msgInfo = msgInfo
  70. data.allCfg = allCfg
  71. table.insert(self.allToggleData,data)
  72. end
  73. end
  74. end
  75. end
  76. end
  77. function this:RefreshToggleList()
  78. local selectGroup = nil
  79. if self.selectedToggle then
  80. --刷新时有可能改变引用,存group
  81. selectGroup = self.selectedToggle.args.group
  82. end
  83. self:RefreshRightToggleData()
  84. if table.count(self.allToggleData) == 0 then
  85. return
  86. end
  87. -- GUI:DataListUpdateData(self.view.activeDataList)
  88. GUI:DataListUpdateData(self.view.activeDataList,_,function()
  89. if not self.selectedToggle then
  90. self.selectedToggle = self.Right_Toggle_all_item[1]
  91. end
  92. self:SelectGiftGroup(self.selectedToggle)
  93. self:RefreshRedPoint()
  94. end)
  95. --重新指向
  96. if selectGroup then
  97. self.selectedToggle = nil
  98. for i,data in pairs(self.allToggleData) do
  99. if data.group == selectGroup then
  100. self.selectedToggle = self.Right_Toggle_all_item[i]
  101. end
  102. end
  103. end
  104. end
  105. --endregion 右侧礼包Toggle
  106. function this:SelectGiftGroup(toggle)
  107. --点击toggle
  108. if self.selectedToggle then
  109. self.selectedToggle:ToggleOff()
  110. end
  111. self.selectedToggle = toggle
  112. self.selectedToggle:ToggleOn()
  113. local data = toggle.args
  114. if data then
  115. if table.count(data.giftCfgs) == 1 then
  116. GUI:setVisible(self.view.LevelGiftPanel,false)
  117. GUI:setVisible(self.view.SingleGiftPanel,true)
  118. self:RefreshSingleGiftList(data)
  119. else
  120. GUI:setVisible(self.view.LevelGiftPanel,true)
  121. GUI:setVisible(self.view.SingleGiftPanel,false)
  122. self:RefreshGiftList(data)
  123. end
  124. GUI:Text_setString(self.view.DIY_Text_Level, data.allCfg.tip)
  125. local actualTimer = (data.msgInfo.endTime - Time.GetServerTime()) / 1000
  126. if actualTimer > 0 then
  127. GUI:SetControl_time(self.view.DIY_TimeText, actualTimer)
  128. end
  129. end
  130. end
  131. --region 中间礼包
  132. function this:GiftsCountFunc()
  133. return #self.allGiftData
  134. end
  135. function this:GiftsGetFunc(realIndex)
  136. local cfgData = self.allGiftData[realIndex + 1]
  137. local item = GUI:UIPanel_Open("dev/outui/Recharge/Item/KLRechargeActivityTwo/KLRechargeActivityTwoItem",self.view.ItemBoxDataList,self,cfgData,true)
  138. self.Gifts_all_item[realIndex + 1] = item
  139. return item.view.root
  140. end
  141. function this:GiftsInitFunc(realIndex, kmlcontrol)
  142. end
  143. function this:GiftsUpdateFunc(realIndex, kmlcontrol)
  144. local cfgData = self.allGiftData[realIndex + 1]
  145. self.Gifts_all_item[realIndex + 1]:RefreshItem(cfgData)
  146. end
  147. function this:RefreshGiftData(data)
  148. self.allGiftData = {}
  149. --刷新礼包数据 data.giftCfgs 显示基本,data.msgInfo.timeLimitGiftInfo 显示是否购买
  150. for i,giftCfg in pairs(data.giftCfgs) do
  151. local giftData = {}
  152. giftData.giftCfg = giftCfg
  153. giftData.hasBuy = table.contains(data.msgInfo.timeLimitGiftInfo,giftCfg.id)
  154. if giftCfg.sort == 1 then
  155. giftData.canBuy = true
  156. else
  157. local prevGift = InfoManager.rechargeActivityInfo.timeLimitGift_giftCfg[giftCfg.group][giftCfg.sort-1]
  158. giftData.canBuy = prevGift and table.contains(data.msgInfo.timeLimitGiftInfo,prevGift.id)
  159. end
  160. table.insert(self.allGiftData,giftData)
  161. end
  162. end
  163. function this:RefreshGiftList(data)
  164. self:RefreshGiftData(data)
  165. GUI:DataListUpdateData(self.view.ItemBoxDataList,_,function()
  166. self:RefreshRedPoint()
  167. end)
  168. end
  169. --endregion 中间礼包
  170. function this:RefreshSingleGiftList(data)
  171. --单个礼包特殊处理
  172. self:RefreshGiftData(data)
  173. local giftData = self.allGiftData[1]
  174. --道具列表
  175. if not self.singleGiftItems then
  176. self.singleGiftItems = {}
  177. end
  178. for i=1,4 do
  179. local giftInfo = giftData.giftCfg.gift[i]
  180. if not self.singleGiftItems[i] then
  181. local itemId = giftInfo[1]
  182. local itemCount = giftInfo[2]
  183. local item = GUI:Item_Create(self.SingleGiftItemParents[i],{
  184. width = 60,
  185. height = 60,
  186. itemid = itemId,
  187. --mfixsize = "80,80",
  188. tips = "1",
  189. itemcustomcount = itemCount,
  190. })
  191. GUI:AddOnClickEvent(item,self,function()
  192. SL:OpenTips(nil,itemId)
  193. end)
  194. self.singleGiftItems[i] = item
  195. else
  196. local itemId = giftInfo[1]
  197. local itemCount = giftInfo[2]
  198. local item = self.singleGiftItems[i]
  199. GUI:Item_setItemId(item,itemId)
  200. GUI:Item_setItemCount(item,itemCount)
  201. GUI:AddOnClickEvent(item,self,function()
  202. SL:OpenTips(nil,itemId)
  203. end)
  204. end
  205. end
  206. --按钮
  207. if giftData.hasBuy then
  208. GUI:setVisible(self.view.SingleBuyBtn,false)
  209. GUI:setVisible(self.view.SingleGetZuanShiBtn,false)
  210. else
  211. GUI:setVisible(self.view.SingleBuyBtn,true)
  212. GUI:setVisible(self.view.SingleGetZuanShiBtn,true)
  213. if table.count(giftData.giftCfg.cost) == 0 then
  214. GUI:setVisible(self.view.Singlezuanshi,false)
  215. GUI:Text_setString(self.view.SingleBuyCount,"免费")
  216. else
  217. --GUI:Image_loadTexture(self.view.Singlezuanshi,) --TODO:根据道具id显示图标
  218. GUI:setVisible(self.view.Singlezuanshi,true)
  219. --GUI:setContentSize(self.view.Singlezuanshi,43,24) --组件自适应偶尔会把宽改成0
  220. GUI:Text_setString(self.view.SingleBuyCount,tostring(giftData.giftCfg.cost[2]))
  221. end
  222. -- if giftData.canBuy then --单个的不需要锁
  223. -- GUI:setVisible(self.view.LockUI,false)
  224. -- else
  225. -- GUI:setVisible(self.view.LockUI,true)
  226. -- end
  227. end
  228. self:RefreshRedPoint()
  229. end
  230. ---注册UI事件和服务器消息
  231. function this:RegistEvents()
  232. GUI:AddOnClickEvent(self.view.CloseButton, self, self.BtnCloseOnClick)
  233. GUI:AddOnClickEvent(self.view.SingleBuyBtn, self, self.SingleBuyBtn)
  234. GUI:AddOnClickEvent(self.view.SingleGetZuanShiBtn, self, self.SingleGetZuanShiBtn)
  235. end
  236. function this:BtnCloseOnClick()
  237. GUI:UIPanel_Close("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  238. SL.ShowMainPanel()
  239. end
  240. function this:SingleGetZuanShiBtn()
  241. if InfoManager.uiFirstChargeInfo:IsShowBtn() then
  242. --跳转至首充界面
  243. GUI:UIPanel_Close("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  244. GUI:UIPanel_Open("dev/outui/FirstCharge/Panel/KLFirstCharge/KLFirstChargePanel")
  245. else
  246. --跳转充值界面
  247. GUI:UIPanel_Close("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  248. -- GUI:UIPanel_Open("dev/outui/ShopMain/Panel/KLRecharge/KLRechargePanel")
  249. -- SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_RECHARGE_ACTION, {type=1, action="panel"})
  250. GUI:UIPanel_Open("dev/outui/ShopMain/Panel/KLShopMain/KLShopMainPanel",nil,nil,{2})
  251. end
  252. end
  253. function this:SingleBuyBtn()
  254. if not self.allGiftData[1].canBuy then
  255. --SL:TipMessage({ SL:GetConfig('cfg_string', 330).text, 1, NoticeType.NoticeMid })
  256. SL:TipMessage( "请先解锁上一档礼包",1, NoticeType.NoticeMid)
  257. return
  258. end
  259. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_BUY_TIME_LIMIT_GIFT ,{id = self.allGiftData[1].giftCfg.id})
  260. end
  261. ---创建或者刷新界面数据时调用
  262. function this:Refresh()
  263. self:RefreshToggleList()
  264. if table.count(self.allToggleData) == 0 then
  265. self:BtnCloseOnClick()
  266. return
  267. end
  268. -- if not self.selectedToggle then
  269. -- self.selectedToggle = self.Right_Toggle_all_item[1]
  270. -- end
  271. -- self:SelectGiftGroup(self.selectedToggle)
  272. -- self:RefreshRedPoint()
  273. end
  274. function this:RefreshRedPoint()
  275. local needRedPoint,data = InfoManager.rechargeActivityInfo:IsShowTimeLimitGiftRedDot()
  276. if needRedPoint then
  277. --toggle红点
  278. for i,toggle in pairs(self.Right_Toggle_all_item) do
  279. if toggle then
  280. local group = toggle.args.group
  281. if data[toggle.args.group] then
  282. GUI:setVisible(toggle.view.redDot,true)
  283. else
  284. GUI:setVisible(toggle.view.redDot,false)
  285. end
  286. end
  287. end
  288. --礼包红点
  289. if self.selectedToggle and data[self.selectedToggle.args.group] then
  290. local sorts = data[self.selectedToggle.args.group]
  291. for i,gift in pairs(self.Gifts_all_item) do
  292. if table.contains(sorts,gift.args.giftCfg.sort) then
  293. GUI:setVisible(gift.view.RedDot,true)
  294. else
  295. GUI:setVisible(gift.view.RedDot,false)
  296. end
  297. end
  298. else
  299. for i,gift in pairs(self.Gifts_all_item) do
  300. GUI:setVisible(gift.view.RedDot,false)
  301. end
  302. end
  303. else
  304. --toggle红点
  305. for i,toggle in pairs(self.Right_Toggle_all_item) do
  306. if toggle then
  307. GUI:setVisible(toggle.view.redDot,false)
  308. end
  309. end
  310. --礼包红点
  311. for i,gift in pairs(self.Gifts_all_item) do
  312. GUI:setVisible(gift.view.RedDot,false)
  313. end
  314. end
  315. end
  316. function this:Close()
  317. -- self.selectedToggle = nil
  318. end
  319. return this