UIRuneShopBTView.lua 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092
  1. local UIRuneShopBTView = require("UIRuneShop/UIRuneShopBTView_Generate")
  2. local ConditionJudge = require("Common/ConditionJudge")
  3. local FirstBuyBgIconPath = 'ShopIcons/txt_club_first'
  4. local ExtraBuyBgIconPath = 'ShopIcons/txt_club_free_extra_cn'
  5. function UIRuneShopBTView:OnAwake(data)
  6. self.controller = require("UIRuneShop/UIRuneShopBTCtr"):new()
  7. self.controller:Init(self)
  8. self.controller:SetData(data)
  9. end
  10. function UIRuneShopBTView:AddEventListener()
  11. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.ROCOIN_CHANGED, self, self.OnRoCoinChanged)
  12. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.COIN_CHANGED, self, self.OnCoinChanged)
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.DIAMOND_CHANGED, self, self.OnDiamondChanged)
  14. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.VIP_LV_CHANGED, self, self.OnVipLvChanged)
  15. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.RUNE_SHOP_DATA_CHANGED, self, self.OnRuneShopDataChanged)
  16. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.RED_POINT_MGR_NOTICE, self, self.OnRPNotify)
  17. end
  18. function UIRuneShopBTView:FillContent(data, uiBase)
  19. self.uiBase = uiBase
  20. local gameObject = self.uiBase:GetRoot()
  21. if gameObject ~= nil then
  22. self.gameObject = gameObject
  23. self.transform = gameObject.transform
  24. end
  25. self:InitGenerate(self.transform, data)
  26. self:Init()
  27. end
  28. function UIRuneShopBTView:Init()
  29. self.controller:InitData()
  30. self.privilegeCardItem.privilegeScrollView.loopListView:InitListView(0, function (loopListView, itemIdx)
  31. return self:GetItemByIndexPrivilege(loopListView, itemIdx)
  32. end, nil, nil)
  33. self.privilegeCardItem.rewardScrollView.loopGridView:InitGridView(0, function (loopGridView, itemIdx, row, column)
  34. return self:GetItemByRowColumnPrivilege(loopGridView, itemIdx, row, column)
  35. end, nil, nil)
  36. self.giftsBox.scrollView.loopGridView:InitGridView(0, function(loopGridView, itemIdx, row, column)
  37. return self:GetItemByRowColumnGifts(loopGridView, itemIdx, row, column)
  38. end, nil, nil)
  39. self.rOPassport.scrollView.loopListView:InitListView(0, function(loopListView, itemIdx)
  40. return self:GetItemByIndexROPass(loopListView, itemIdx)
  41. end)
  42. self.limitedBox.scrollView.loopGridView:InitGridView(0, function(loopGridView, itemIdx, row, column)
  43. return self:GetItemByRowColumnLimited(loopGridView, itemIdx, row, column)
  44. end, nil, nil)
  45. self:RefreshRoCoinView()
  46. self:RefreshCoinView()
  47. self:RefreshGoldView()
  48. self:RefreshVipView()
  49. self:RefreshToggleGroupView()
  50. self:RefreshShopView(true)
  51. end
  52. function UIRuneShopBTView:RemoveEventListener()
  53. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  54. end
  55. function UIRuneShopBTView:AddUIEventListener()
  56. self.uiBase:AddButtonUniqueEventListener(self.btnClose.button, self, self.OnClickCloseBtn)
  57. self.uiBase:AddButtonUniqueEventListener(self.btnVIP.button, self, self.OnClickVipBtn)
  58. self.uiBase:AddToggleUniqueEventListener(self.privilegeCardToggle.toggle, self, self.OnClickOneToggle, Enum.RuneShopType.SpecialPrivilege)
  59. self.uiBase:AddToggleUniqueEventListener(self.weekToggle.toggle, self, self.OnClickOneToggle, Enum.RuneShopType.MonthCard)
  60. self.uiBase:AddToggleUniqueEventListener(self.passportToggle.toggle, self, self.OnClickOneToggle, Enum.RuneShopType.PassCheck)
  61. self.uiBase:AddToggleUniqueEventListener(self.giftsToggle.toggle, self, self.OnClickOneToggle, Enum.RuneShopType.Gifts)
  62. self.uiBase:AddToggleUniqueEventListener(self.limitedToggle.toggle, self, self.OnClickOneToggle, Enum.RuneShopType.LimitTime)
  63. self.uiBase:AddButtonUniqueEventListener(self.dailyBtn.button, self, self.OnClickShopSubBtn, Enum.RuneShopSubType.Daily)
  64. self.uiBase:AddButtonUniqueEventListener(self.weekBtn.button, self, self.OnClickShopSubBtn, Enum.RuneShopSubType.Week)
  65. self.uiBase:AddButtonUniqueEventListener(self.roCoinBtn.button, self, self.OnClickShopSubBtn, Enum.RuneShopSubType.ROCoin)
  66. self.uiBase:AddButtonUniqueEventListener(self.goldBtn.button, self, self.OnClickShopSubBtn, Enum.RuneShopSubType.Gold)
  67. self.uiBase:AddButtonUniqueEventListener(self.monthBtn.button, self, self.OnClickShopSubBtn, Enum.RuneShopSubType.Month)
  68. end
  69. function UIRuneShopBTView:OnHide()
  70. end
  71. function UIRuneShopBTView:OnShow(data)
  72. if data then
  73. self.controller:SetData(data)
  74. self.controller:InitData()
  75. end
  76. self:RefreshCoinView()
  77. self:RefreshGoldView()
  78. self:RefreshVipView()
  79. self:RefreshToggleGroupView()
  80. self:RefreshShopView(true)
  81. end
  82. function UIRuneShopBTView:OnClose()
  83. end
  84. function UIRuneShopBTView:OnDispose()
  85. self.privilegeUnlockDess = nil
  86. self.privilegeRewards = nil
  87. self.roPassUnlockDess = nil
  88. self:DisposeRefreshTimer()
  89. self.privilegeCardItem.privilegeScrollView.loopListView:Dispose()
  90. self.privilegeCardItem.rewardScrollView.loopGridView:Dispose()
  91. self.giftsBox.scrollView.loopGridView:Dispose()
  92. self.rOPassport.scrollView.loopListView:Dispose()
  93. self.limitedBox.scrollView.loopGridView:Dispose()
  94. self.controller:OnDispose()
  95. end
  96. function UIRuneShopBTView:OnClickCloseBtn()
  97. ManagerContainer.LuaUIMgr:OpenSourceUI(self)
  98. end
  99. function UIRuneShopBTView:OnClickVipBtn()
  100. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIVip)
  101. end
  102. function UIRuneShopBTView:OnClickOneToggle(tog, params, b)
  103. if not b then return end
  104. local shopType = params[0]
  105. if self.controller:ChangeShopType(shopType) then
  106. self:RefreshShopView(true)
  107. end
  108. end
  109. function UIRuneShopBTView:OnClickShopSubBtn(btn, params)
  110. local shopSubType = params[0]
  111. if self.controller:ChangeShopSubType(shopSubType) then
  112. self:RefreshGiftsView(true)
  113. end
  114. end
  115. function UIRuneShopBTView:OnClickMonthCardPrice(_, params)
  116. local id = params[0]
  117. local errorCodeKey = self.controller:SendPay(id)
  118. if not errorCodeKey then
  119. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCodeKey)
  120. end
  121. end
  122. function UIRuneShopBTView:OnClickRoPassBuy(_, params)
  123. local id = params[0]
  124. local errorCodeKey = self.controller:SendPay(id)
  125. if not errorCodeKey then
  126. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCodeKey)
  127. end
  128. end
  129. function UIRuneShopBTView:OnClickShopGoodsItem(_, params)
  130. local data = params[0]
  131. if not data then return end
  132. if data:IsSoldout() then return end
  133. local id = data:GetId()
  134. local runeShopType = self.controller:GetShopType()
  135. local runeShopSubType = self.controller:GetShopSubType()
  136. if runeShopType == Enum.RuneShopType.Gifts then
  137. if runeShopSubType == Enum.RuneShopSubType.Gold then
  138. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRuneShopGoldBuyTips, {runeShopType, runeShopSubType, id})
  139. return
  140. end
  141. end
  142. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRuneShopBuyTips, {runeShopType, runeShopSubType, id})
  143. end
  144. function UIRuneShopBTView:OnClickGiftItem(button, params)
  145. local id = params[0]
  146. local runeShopType = self.controller:GetShopType()
  147. local runeShopSubType = self.controller:GetShopSubType()
  148. ManagerContainer.SDKEventReportMgr:SendClickGoods()
  149. if runeShopType == Enum.RuneShopType.Gifts then
  150. if runeShopSubType == Enum.RuneShopSubType.Gold then
  151. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRuneShopGoldBuyTips, {runeShopType, runeShopSubType, id})
  152. return
  153. end
  154. end
  155. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRuneShopBuyTips, {runeShopType, runeShopSubType, id})
  156. end
  157. function UIRuneShopBTView:OnClickGiftPrice(button, params)
  158. -- 直接发起支付
  159. ManagerContainer.SDKEventReportMgr:SendClickGoods()
  160. local id = params[0]
  161. local errorCodeKey = self.controller:SendPay(id)
  162. if not errorCodeKey then
  163. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCodeKey)
  164. end
  165. end
  166. function UIRuneShopBTView:OnClickLimitedItem(button, params)
  167. local id = params[0]
  168. local itemIdx = params[1]
  169. local runeShopType = self.controller:GetShopType()
  170. local runeShopSubType = self.controller:GetShopSubType()
  171. ManagerContainer.SDKEventReportMgr:SendClickGoods()
  172. if runeShopType == Enum.RuneShopType.Gifts then
  173. if runeShopSubType == Enum.RuneShopSubType.Gold then
  174. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRuneShopGoldBuyTips, {runeShopType, runeShopSubType, id})
  175. return
  176. end
  177. end
  178. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRuneShopBuyTips, {runeShopType, runeShopSubType, id})
  179. ManagerContainer.RedPointMgr.RSLimitGiftRPCtr:CancelRedPointStatusById(id)
  180. self.limitedBox.scrollView.loopGridView:RefreshItemByItemIndex(itemIdx)
  181. end
  182. function UIRuneShopBTView:OnClickLimitedPrice(button, params)
  183. -- 直接发起支付
  184. local id = params[0]
  185. local itemIdx = params[1]
  186. ManagerContainer.SDKEventReportMgr:SendClickGoods()
  187. local errorCodeKey = self.controller:SendPay(id)
  188. if not errorCodeKey then
  189. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCodeKey)
  190. end
  191. ManagerContainer.RedPointMgr.RSLimitGiftRPCtr:CancelRedPointStatusById(id)
  192. self.limitedBox.scrollView.loopGridView:RefreshItemByItemIndex(itemIdx)
  193. end
  194. function UIRuneShopBTView:OnRoCoinChanged()
  195. self:RefreshRoCoinView()
  196. end
  197. function UIRuneShopBTView:OnCoinChanged()
  198. self:RefreshCoinView()
  199. end
  200. function UIRuneShopBTView:OnDiamondChanged()
  201. self:RefreshGoldView()
  202. end
  203. function UIRuneShopBTView:OnVipLvChanged()
  204. self:RefreshVipView()
  205. end
  206. function UIRuneShopBTView:OnRuneShopDataChanged(runeShopType, runeShopSubType)
  207. if runeShopType ~= self.controller:GetShopType() then return end
  208. local curRuneShopSubType = self.controller:GetShopSubType()
  209. if curRuneShopSubType and runeShopSubType ~= curRuneShopSubType then return end
  210. self.controller:RefreshCurShopData()
  211. self:RefreshShopView()
  212. end
  213. function UIRuneShopBTView:OnRPNotify(rpType)
  214. if rpType ~= Enum.RPNotifyType.RuneShopLimitGift then
  215. return
  216. end
  217. if Enum.RuneShopType.LimitTime ~= self.controller:GetShopType() then return end
  218. local curRuneShopSubType = self.controller:GetShopSubType()
  219. if curRuneShopSubType and nil ~= curRuneShopSubType then return end
  220. self:RefreshShopView()
  221. end
  222. function UIRuneShopBTView:RefreshRoCoinView()
  223. self.ro.number.text.text = CommonUtil.FormatNumber(self.controller:GetOwnResCountByItemId(Enum.ItemType.ROCoin))
  224. end
  225. function UIRuneShopBTView:RefreshCoinView()
  226. self.coin.number.text.text = CommonUtil.FormatNumber(self.controller:GetOwnResCountByItemId(Enum.ItemType.Coin))
  227. end
  228. function UIRuneShopBTView:RefreshGoldView()
  229. self.gold.number.text.text = CommonUtil.FormatNumber(self.controller:GetOwnResCountByItemId(Enum.ItemType.Diamond))
  230. end
  231. function UIRuneShopBTView:RefreshVipView()
  232. local curVipLv = self.controller:GetCurVipLv()
  233. local vipCfg = ManagerContainer.CfgMgr:GetVipCfgById(curVipLv)
  234. self.vipIcon.image.sprite = nil
  235. self.vipIcon.image.enabled = false
  236. self.vipFrame.image.sprite = nil
  237. self.vipFrame.image.enabled = false
  238. if not vipCfg then
  239. self.vipNameTxt.text.text = ''
  240. return
  241. end
  242. CommonUtil.LoadIcon(self, vipCfg.BigIcon, function(sprite)
  243. if sprite then
  244. self.vipIcon.image.sprite = sprite
  245. self.vipIcon.image.enabled = true
  246. end
  247. end)
  248. CommonUtil.LoadIcon(self, vipCfg.BigFrame, function(sprite)
  249. if sprite then
  250. self.vipFrame.image.sprite = sprite
  251. self.vipFrame.image.enabled = true
  252. end
  253. end)
  254. self.vipNameTxt.text.text = string.formatbykey(vipCfg.Name)
  255. end
  256. function UIRuneShopBTView:RefreshToggleGroupView()
  257. local shopType = self.controller:GetShopType()
  258. local toggleGroup = self.content.toggleGroup
  259. local oldAllowSwitchOff = toggleGroup.allowSwitchOff
  260. toggleGroup.allowSwitchOff = true
  261. self.weekToggle.toggle.isOn = (shopType == Enum.RuneShopType.MonthCard)
  262. self.giftsToggle.toggle.isOn = (shopType == Enum.RuneShopType.Gifts)
  263. self.limitedToggle.toggle.isOn = (shopType == Enum.RuneShopType.LimitTime)
  264. toggleGroup.allowSwitchOff = oldAllowSwitchOff
  265. end
  266. function UIRuneShopBTView:RefreshShopView(resetPos)
  267. self.privilegeUnlockDess = nil
  268. self.privilegeRewards = nil
  269. self.roPassUnlockDess = nil
  270. self:StopAndClearRefreshTimer()
  271. local shopType = self.controller:GetShopType()
  272. if shopType == Enum.RuneShopType.SpecialPrivilege then
  273. self.privilegeBox:SetActive(true)
  274. self.weekBox:SetActive(false)
  275. self.passportBox:SetActive(false)
  276. self.giftsBox:SetActive(false)
  277. self.limitedBox:SetActive(false)
  278. self:RefreshSpecialPrivilegeView()
  279. self.textBox.text.text = string.formatbykey('DscClub05')
  280. elseif shopType == Enum.RuneShopType.MonthCard then
  281. self.privilegeBox:SetActive(false)
  282. self.weekBox:SetActive(true)
  283. self.passportBox:SetActive(false)
  284. self.giftsBox:SetActive(false)
  285. self.limitedBox:SetActive(false)
  286. self:RefreshMonthCardView()
  287. self.textBox.text.text = string.formatbykey('DscClub06')
  288. elseif shopType == Enum.RuneShopType.PassCheck then
  289. self.privilegeBox:SetActive(false)
  290. self.weekBox:SetActive(false)
  291. self.passportBox:SetActive(true)
  292. self.giftsBox:SetActive(false)
  293. self.limitedBox:SetActive(false)
  294. self:RefreshRoPassView()
  295. self.textBox.text.text = string.formatbykey('DscClub07')
  296. elseif shopType == Enum.RuneShopType.Gifts then
  297. self.privilegeBox:SetActive(false)
  298. self.weekBox:SetActive(false)
  299. self.passportBox:SetActive(false)
  300. self.giftsBox:SetActive(true)
  301. self.limitedBox:SetActive(false)
  302. self:RefreshGiftsView(resetPos)
  303. self.textBox.text.text = string.formatbykey('DscClub02')
  304. elseif shopType == Enum.RuneShopType.LimitTime then
  305. self.privilegeBox:SetActive(false)
  306. self.weekBox:SetActive(false)
  307. self.passportBox:SetActive(false)
  308. self.giftsBox:SetActive(false)
  309. self.limitedBox:SetActive(true)
  310. self:RefreshLimitedView(resetPos)
  311. self.textBox.text.text = string.formatbykey('DscClub03')
  312. else
  313. self.privilegeBox:SetActive(false)
  314. self.weekBox:SetActive(false)
  315. self.passportBox:SetActive(false)
  316. self.giftsBox:SetActive(false)
  317. self.limitedBox:SetActive(false)
  318. self.textBox.text.text = ''
  319. end
  320. end
  321. function UIRuneShopBTView:RefreshSpecialPrivilegeView()
  322. local id = self.controller:GetSpecialPrivilegeId()
  323. local cfgData = nil
  324. local unlock = true
  325. if id then
  326. cfgData = ManagerContainer.CfgMgr:GetPrivilegeCardCfgByLv(id)
  327. if not cfgData then
  328. id = 1
  329. cfgData = ManagerContainer.CfgMgr:GetPrivilegeCardCfgByLv(1)
  330. unlock = false
  331. end
  332. else
  333. id = 1
  334. cfgData = ManagerContainer.CfgMgr:GetPrivilegeCardCfgByLv(1)
  335. unlock = false
  336. end
  337. if not cfgData then
  338. self.privilegeBox:SetActive(false)
  339. return
  340. end
  341. local privilegeCardItem = self.privilegeCardItem
  342. privilegeCardItem.privilegeLv1:SetActive(id == 1)
  343. privilegeCardItem.privilegeLv2:SetActive(id == 2)
  344. local buyRewards = cfgData.BuyReward
  345. if buyRewards then
  346. local buyReward = buyRewards[1]
  347. if buyReward then
  348. self:RefreshCurrenyItem(privilegeCardItem.buyReward1, buyReward[1], buyReward[2], true)
  349. else
  350. self:RefreshCurrenyItem(privilegeCardItem.buyReward1)
  351. end
  352. buyReward = buyRewards[2]
  353. if buyReward then
  354. self:RefreshCurrenyItem(privilegeCardItem.buyReward2, buyReward[1], buyReward[2], true)
  355. else
  356. self:RefreshCurrenyItem(privilegeCardItem.buyReward2)
  357. end
  358. else
  359. self:RefreshCurrenyItem(privilegeCardItem.buyReward1)
  360. self:RefreshCurrenyItem(privilegeCardItem.buyReward2)
  361. end
  362. privilegeCardItem.privilegeScrollView.loopListView:SetListItemCount(0, true)
  363. self.privilegeUnlockDess = unlock and cfgData.Activation or cfgData.UnlockDes
  364. if self.privilegeUnlockDess then
  365. privilegeCardItem.privilegeScrollView.loopListView:SetListItemCount(#self.privilegeUnlockDess, true)
  366. end
  367. privilegeCardItem.rewardScrollView.loopGridView:SetListItemCount(0, true)
  368. self.privilegeRewards = nil
  369. if cfgData.Reward then
  370. self.privilegeRewards = {}
  371. for i = 1, #cfgData.Reward do
  372. local reward = cfgData.Reward[i]
  373. self.privilegeRewards[#self.privilegeRewards+1] = {cfgId = reward[1], num = reward[2]}
  374. end
  375. end
  376. if self.privilegeRewards then
  377. privilegeCardItem.rewardScrollView.loopGridView:SetListItemCount(#self.privilegeRewards, true)
  378. end
  379. privilegeCardItem.active:SetActive(unlock)
  380. privilegeCardItem.unActive:SetActive(not unlock)
  381. if unlock then
  382. local nextCfgData = ManagerContainer.CfgMgr:GetPrivilegeCardCfgByLv(id + 1)
  383. if nextCfgData then
  384. local canUpgrade = false
  385. if nextCfgData.UnlockCond then
  386. canUpgrade = ConditionJudge:ConditionPassResult1(nextCfgData.UnlockCond)
  387. end
  388. privilegeCardItem.btnUpgrade:SetActive(canUpgrade)
  389. privilegeCardItem.btnBuyPrivilege:SetActive(false)
  390. self.uiBase:AddButtonUniqueEventListener(privilegeCardItem.btnUpgrade.button, self, self.OnClickPrivlegeActiveBtn)
  391. else
  392. privilegeCardItem.btnUpgrade:SetActive(false)
  393. privilegeCardItem.btnBuyPrivilege:SetActive(false)
  394. end
  395. if self.controller:CanGetSpecialPrivilegeReward() then
  396. privilegeCardItem.btnReceive:SetActive(true)
  397. privilegeCardItem.labelReceived:SetActive(false)
  398. else
  399. privilegeCardItem.btnReceive:SetActive(false)
  400. privilegeCardItem.labelReceived:SetActive(true)
  401. end
  402. self.uiBase:AddButtonUniqueEventListener(privilegeCardItem.btnReceive.button, self, self.OnClickPrivlegeReceiveBtn)
  403. else
  404. privilegeCardItem.btnUpgrade:SetActive(false)
  405. privilegeCardItem.btnBuyPrivilege:SetActive(true)
  406. privilegeCardItem.btnReceive:SetActive(true)
  407. privilegeCardItem.labelReceived:SetActive(false)
  408. self.uiBase:AddButtonUniqueEventListener(privilegeCardItem.btnBuyPrivilege.button, self, self.OnClickPrivlegeActiveBtn)
  409. self.uiBase:AddButtonUniqueEventListener(privilegeCardItem.btnReceive.button, self, self.OnClickPrivlegeActiveBtn)
  410. end
  411. end
  412. function UIRuneShopBTView:OnClickPrivlegeReceiveBtn()
  413. local errorCode = self.controller:SendRuneSpecialPrvilegeRewardReq()
  414. if errorCode ~= 0 then
  415. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
  416. end
  417. end
  418. function UIRuneShopBTView:OnClickPrivlegeActiveBtn()
  419. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPrivilegeCardTips)
  420. end
  421. function UIRuneShopBTView:GetItemByIndexPrivilege(loopListView, itemIdx)
  422. local unlockDess = self.privilegeUnlockDess
  423. if not unlockDess then
  424. return nil
  425. end
  426. local unlockDes = unlockDess[itemIdx + 1]
  427. if not unlockDes then
  428. return nil
  429. end
  430. local item = loopListView:NewListViewItem('EntryUnlockDscItem')
  431. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'EntryUnlockDscItem', item.gameObject)
  432. if itemLua then
  433. local idx = unlockDes[1] or 0
  434. itemLua.icon.uIImageSwitchSprite:ChangeSprite(idx)
  435. local params = {}
  436. local langKey = unlockDes[2]
  437. for i = 3, #unlockDes do
  438. params[#params + 1] = tostring(unlockDes[i])
  439. end
  440. itemLua.desTxt.text.text = string.formatbykey(langKey, unpack(params))
  441. end
  442. ManagerContainer.LuaUIMgr:ForceRebuildLayoutImmediate(item.CachedRectTransform)
  443. return item
  444. end
  445. function UIRuneShopBTView:GetItemByRowColumnPrivilege(loopGridView, itemIdx, row, column)
  446. if not self.privilegeRewards then
  447. return nil
  448. end
  449. local reward = self.privilegeRewards[itemIdx + 1]
  450. if not reward then
  451. return nil
  452. end
  453. local item = loopGridView:NewListViewItem('Item')
  454. local iconItem = item.transform:Find('IconItem')
  455. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'IconItem', iconItem.gameObject)
  456. CommonUtil.UpdateItemPrefab(self, itemLua, reward, nil, self, self.ShowItemTips, reward)
  457. return item
  458. end
  459. function UIRuneShopBTView:ShowItemTips(button, params)
  460. local data = params[0]
  461. ManagerContainer.LuaUIMgr:OpenTips(data)
  462. end
  463. function UIRuneShopBTView:RefreshMonthCardView()
  464. self:RefreshOneMonthCardView(self.weekCard1, 1)
  465. end
  466. function UIRuneShopBTView:RefreshOneMonthCardView(itemLua, idx)
  467. local showGoodsDatas = self.controller:GetShowGoodsDatas()
  468. if not showGoodsDatas then
  469. itemLua:SetActive(false)
  470. return
  471. end
  472. local showGoodsData = showGoodsDatas[idx]
  473. if not showGoodsData then
  474. itemLua:SetActive(false)
  475. return
  476. end
  477. itemLua:SetActive(true)
  478. local cfgData = showGoodsData:GetCfgData()
  479. local buyRewards = cfgData.BuyReward
  480. if buyRewards then
  481. local buyReward = buyRewards[1]
  482. if buyReward then
  483. self:RefreshCurrenyItem(itemLua.buyReward1, buyReward[1], buyReward[2], true)
  484. else
  485. self:RefreshCurrenyItem(itemLua.buyReward1)
  486. end
  487. buyReward = buyRewards[2]
  488. if buyReward then
  489. self:RefreshCurrenyItem(itemLua.buyReward2, buyReward[1], buyReward[2], true)
  490. else
  491. self:RefreshCurrenyItem(itemLua.buyReward2)
  492. end
  493. else
  494. self:RefreshCurrenyItem(itemLua.buyReward1)
  495. self:RefreshCurrenyItem(itemLua.buyReward2)
  496. end
  497. local dayRewards = cfgData.DayReward
  498. if dayRewards then
  499. local dayReward = dayRewards[1]
  500. if dayReward then
  501. self:RefreshCurrenyItem(itemLua.dailyReward, dayReward[1], dayReward[2], true)
  502. else
  503. self:RefreshCurrenyItem(itemLua.dailyReward)
  504. end
  505. else
  506. self:RefreshCurrenyItem(itemLua.dailyReward)
  507. end
  508. local totalRewards = cfgData.TotalReward
  509. if totalRewards then
  510. local totalReward = totalRewards[1]
  511. if totalReward then
  512. self:RefreshCurrenyItem(itemLua.totalReward, totalReward[1], totalReward[2], true)
  513. else
  514. self:RefreshCurrenyItem(itemLua.totalReward)
  515. end
  516. else
  517. self:RefreshCurrenyItem(itemLua.totalReward)
  518. end
  519. local price = showGoodsData:GetPrice()
  520. if price <= 0 then
  521. itemLua.presentPrice.number.text.text = string.formatbykey('Free')
  522. else
  523. itemLua.presentPrice.number.text.text = FloatToPrice(price)
  524. end
  525. local timerStr, outTime = showGoodsData:CalculateLimitTime()
  526. if not outTime then
  527. self:StartRefreshTimer(itemLua, showGoodsData)
  528. itemLua.textDsc.text.text = string.formatbykey('DscClubMonth2', timerStr)
  529. itemLua.active:SetActive(true)
  530. itemLua.unActive:SetActive(false)
  531. else
  532. self:StopRefreshTimer(itemLua)
  533. local mdec = cfgData.Monthdec
  534. if mdec then
  535. itemLua.textDsc.text.text = string.formatbykey(cfgData.Monthdec)
  536. else
  537. itemLua.textDsc.text.text = ""
  538. end
  539. itemLua.active:SetActive(false)
  540. itemLua.unActive:SetActive(true)
  541. end
  542. self.uiBase:AddButtonUniqueEventListener(itemLua.presentPrice.button, self, self.OnClickMonthCardPrice, showGoodsData:GetId())
  543. end
  544. function UIRuneShopBTView:RefreshCurrenyItem(itemLua, itemCfgId, itemNum, ignoreIcon)
  545. if not itemCfgId or not itemNum then
  546. itemLua:SetActive(false)
  547. return
  548. end
  549. itemLua.number.text.text = CommonUtil.FormatNumber(itemNum)
  550. itemLua:SetActive(true)
  551. if ignoreIcon then return end
  552. itemLua.icon.image.sprite = nil
  553. itemLua.icon.image.enabled = false
  554. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(itemCfgId)
  555. if itemCfgData then
  556. CommonUtil.LoadIcon(self, itemCfgData.MiniIcon, function(sprite)
  557. if sprite then
  558. itemLua.icon.image.sprite = sprite
  559. itemLua.icon.image.enabled = true
  560. end
  561. end)
  562. end
  563. end
  564. function UIRuneShopBTView:RefreshRoPassView()
  565. local cfgData = ManagerContainer.CfgMgr:GetPassCheckCfgById(1)
  566. local isActive = self.controller:GetRoPassStatus()
  567. if isActive then
  568. self.rOPassport.active:SetActive(true)
  569. self.rOPassport.presentPrice:SetActive(false)
  570. else
  571. self.rOPassport.active:SetActive(false)
  572. self.rOPassport.presentPrice:SetActive(true)
  573. self.rOPassport.presentPrice.number.text.text = FloatToPrice(cfgData and cfgData.RMB or 999)
  574. self.uiBase:AddButtonUniqueEventListener(self.rOPassport.presentPrice.button, self, self.OnClickRoPassBuy, 1)
  575. end
  576. self.rOPassport.scrollView.loopListView:SetListItemCount(0, true)
  577. if not cfgData then
  578. return
  579. end
  580. self.roPassUnlockDess = isActive and cfgData.Activation or cfgData.UnlockDes
  581. if not self.roPassUnlockDess then
  582. return
  583. end
  584. self.rOPassport.scrollView.loopListView:SetListItemCount(#self.roPassUnlockDess, true)
  585. end
  586. function UIRuneShopBTView:GetItemByIndexROPass(loopListView, itemIdx)
  587. local unlockDess = self.roPassUnlockDess
  588. if not unlockDess then
  589. return nil
  590. end
  591. local unlockDes = unlockDess[itemIdx + 1]
  592. if not unlockDes then
  593. return nil
  594. end
  595. local item = loopListView:NewListViewItem('EntryUnlockDscItem')
  596. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'EntryUnlockDscItem', item.gameObject)
  597. if itemLua then
  598. local idx = unlockDes[1] or 0
  599. itemLua.icon.uIImageSwitchSprite:ChangeSprite(idx)
  600. local params = {}
  601. local langKey = unlockDes[2]
  602. for i = 3, #unlockDes do
  603. params[#params + 1] = tostring(unlockDes[i])
  604. end
  605. itemLua.desTxt.text.text = string.formatbykey(langKey, unpack(params))
  606. end
  607. ManagerContainer.LuaUIMgr:ForceRebuildLayoutImmediate(item.CachedRectTransform)
  608. return item
  609. end
  610. function UIRuneShopBTView:RefreshGiftsView(resetPos)
  611. local shopSubType = self.controller:GetShopSubType()
  612. if shopSubType == Enum.RuneShopSubType.Week then
  613. self:RefreshShopSubBtnState(self.dailyBtn, false)
  614. self:RefreshShopSubBtnState(self.weekBtn, true)
  615. self:RefreshShopSubBtnState(self.roCoinBtn, false)
  616. self:RefreshShopSubBtnState(self.goldBtn, false)
  617. self:RefreshShopSubBtnState(self.monthBtn, false)
  618. elseif shopSubType == Enum.RuneShopSubType.ROCoin then
  619. self:RefreshShopSubBtnState(self.dailyBtn, false)
  620. self:RefreshShopSubBtnState(self.weekBtn, false)
  621. self:RefreshShopSubBtnState(self.roCoinBtn, true)
  622. self:RefreshShopSubBtnState(self.goldBtn, false)
  623. self:RefreshShopSubBtnState(self.monthBtn, false)
  624. elseif shopSubType == Enum.RuneShopSubType.Gold then
  625. self:RefreshShopSubBtnState(self.dailyBtn, false)
  626. self:RefreshShopSubBtnState(self.weekBtn, false)
  627. self:RefreshShopSubBtnState(self.roCoinBtn, false)
  628. self:RefreshShopSubBtnState(self.goldBtn, true)
  629. self:RefreshShopSubBtnState(self.monthBtn, false)
  630. elseif shopSubType == Enum.RuneShopSubType.Daily then
  631. self:RefreshShopSubBtnState(self.dailyBtn, true)
  632. self:RefreshShopSubBtnState(self.weekBtn, false)
  633. self:RefreshShopSubBtnState(self.roCoinBtn, false)
  634. self:RefreshShopSubBtnState(self.goldBtn, false)
  635. self:RefreshShopSubBtnState(self.monthBtn, false)
  636. else
  637. self:RefreshShopSubBtnState(self.dailyBtn, false)
  638. self:RefreshShopSubBtnState(self.weekBtn, false)
  639. self:RefreshShopSubBtnState(self.roCoinBtn, false)
  640. self:RefreshShopSubBtnState(self.goldBtn, false)
  641. self:RefreshShopSubBtnState(self.monthBtn, true)
  642. end
  643. local endTime = self.controller:GetRemainTime()
  644. if endTime then
  645. self:StartRefreshTimer(self, true)
  646. if endTime < 0 then endTime = 0 end
  647. self.timeBox:SetActive(true)
  648. self.timeBox.textTime.text.text = string.formatbykey('RuneShopRefreshTime', DateTimeUtil.convertSeconds2TimeStr1(endTime, true, true, false))
  649. else
  650. self:StopRefreshTimer(self)
  651. self.timeBox:SetActive(false)
  652. end
  653. local showGoodsDatas = self.controller:GetShowGoodsDatas()
  654. local length = (showGoodsDatas and #showGoodsDatas or 0)
  655. if resetPos then
  656. self.giftsBox.scrollView.loopGridView:RefreshListByIndex(length, 0)
  657. else
  658. self.giftsBox.scrollView.loopGridView:RefreshListByIndex(length)
  659. end
  660. end
  661. function UIRuneShopBTView:RefreshShopSubBtnState(itemLua, isOn)
  662. itemLua.off:SetActive(not isOn)
  663. itemLua.on:SetActive(isOn)
  664. itemLua.button.interactable = (not isOn)
  665. end
  666. function UIRuneShopBTView:GetItemByRowColumnGifts(loopGridView, itemIdx, row, column)
  667. local data = self.controller:GetShowGoodsDataByIdx(itemIdx + 1)
  668. if not data then return nil end
  669. local shopSubType = self.controller:GetShopSubType()
  670. if shopSubType == Enum.RuneShopSubType.ROCoin then
  671. return self:RefreshRoCoinShopGoodsItem(loopGridView, data)
  672. else
  673. return self:RefreshMoneyShopGoodsItem(loopGridView, data)
  674. end
  675. end
  676. function UIRuneShopBTView:RefreshMoneyShopGoodsItem(loopGridView, data)
  677. local item = loopGridView:NewListViewItem('RuneShopGoodsItem')
  678. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'RuneShopGoodsItem', item.gameObject)
  679. if itemLua then
  680. itemLua.itemIcon.image.sprite = nil
  681. itemLua.itemIcon.image.enabled = false
  682. itemLua.presentPrice.icon:SetActive(false)
  683. itemLua.presentPrice.currency:SetActive(true)
  684. local cfgData = data.cfgData
  685. if cfgData then
  686. CommonUtil.LoadIcon(self, cfgData.Pic, function(sprite)
  687. if sprite then
  688. itemLua.itemIcon.image.sprite = sprite
  689. itemLua.itemIcon.image.enabled = true
  690. end
  691. end, itemLua, 'ItemIcon')
  692. itemLua.itemName.text.text = string.formatbykey(cfgData.Name)
  693. if cfgData.FirstBuyReward and #cfgData.FirstBuyReward > 0 and data:IsFirstBuy() then
  694. itemLua.discount:SetActive(true)
  695. itemLua.discount.text.text.text = string.formatbykey('LabelFirst')
  696. self:RefreshGiftsItem(itemLua, FirstBuyBgIconPath, cfgData.FirstBuyPic, cfgData.Reward)
  697. elseif cfgData.ExtraBuyReward and #cfgData.ExtraBuyReward > 0 then
  698. itemLua.discount:SetActive(true)
  699. itemLua.discount.text.text.text = string.formatbykey('LabelExtra')
  700. self:RefreshGiftsItem(itemLua, ExtraBuyBgIconPath, cfgData.ExtraBuyPic, cfgData.Reward)
  701. else
  702. itemLua.discount:SetActive(false)
  703. self:RefreshGiftsItem(itemLua, nil, nil, cfgData.Reward)
  704. end
  705. else
  706. itemLua.discount:SetActive(false)
  707. itemLua.itemName.text.text = ''
  708. itemLua.specialReward:SetActive(false)
  709. itemLua.goodsItems:SetActive(false)
  710. end
  711. local remainBuyNum = data:GetRemainBuyNum()
  712. if remainBuyNum >= 0 then
  713. itemLua.purchaseLimit:SetActive(true)
  714. itemLua.purchaseLimit.text.text = string.formatbykey('RuneShopLimitBuy', tostring(remainBuyNum))
  715. else
  716. itemLua.purchaseLimit:SetActive(false)
  717. end
  718. local price = data:GetPrice()
  719. if price <= 0 then
  720. itemLua.presentPrice.number.text.text = string.formatbykey('Free')
  721. else
  722. itemLua.presentPrice.number.text.text = FloatToPrice(price)
  723. end
  724. if data:IsSoldout() then
  725. itemLua.soldout:SetActive(true)
  726. itemLua.button.onClick:RemoveAllListeners()
  727. itemLua.presentPrice.button.onClick:RemoveAllListeners()
  728. else
  729. itemLua.soldout:SetActive(false)
  730. self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnClickGiftItem, data:GetId())
  731. self.uiBase:AddButtonUniqueEventListener(itemLua.presentPrice.button, self, self.OnClickGiftPrice, data:GetId())
  732. end
  733. end
  734. return item
  735. end
  736. function UIRuneShopBTView:RefreshRoCoinShopGoodsItem(gridView, data)
  737. local item = gridView:NewListViewItem('ShopGoodsItem')
  738. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'ShopGoodsItem', item.gameObject)
  739. local cfgData = data:GetCfgData()
  740. local rewards = cfgData.Reward
  741. local cfgId = rewards[1][1]
  742. CommonUtil.UpdateItemPrefab(self, itemLua.iconItem, {cfgId = cfgId}, nil)
  743. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(Enum.ItemIds.ROCoin)
  744. CommonUtil.LoadIcon(self, itemCfgData.MiniIcon, function (sprite)
  745. itemLua.presentPrice.icon.image.sprite = sprite
  746. itemLua.originalPrice.icon.image.sprite = sprite
  747. end, itemLua, 'CurrenyIcon')
  748. itemLua.itemName.text.text = string.formatbykey(cfgData.Name)
  749. local price = data:GetPrice()
  750. if price <= 0 then
  751. itemLua.presentPrice.number.text.text = string.formatbykey('Free')
  752. else
  753. itemLua.presentPrice.number.text.text = FloatToPrice(price)
  754. end
  755. itemLua.discount:SetActive(false)
  756. itemLua.originalPrice:SetActive(false)
  757. local remainBuyNum = data:GetRemainBuyNum()
  758. if remainBuyNum >= 0 then
  759. itemLua.purchaseLimit:SetActive(true)
  760. itemLua.purchaseLimit.text.text = string.formatbykey("RuneShopLimitBuy", remainBuyNum)
  761. itemLua.limitBox:SetActive(false)
  762. else
  763. itemLua.purchaseLimit:SetActive(false)
  764. itemLua.limitBox:SetActive(false)
  765. end
  766. itemLua.soldout:SetActive(data:IsSoldout())
  767. self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnClickShopGoodsItem, data)
  768. self.uiBase:AddButtonUniqueEventListener(itemLua.presentPrice.button, self, self.OnClickShopGoodsItem, data)
  769. return item
  770. end
  771. function UIRuneShopBTView:RefreshGiftsItem(itemLua, bgPic, numPic, rewards)
  772. if numPic and numPic ~= '' then
  773. itemLua.specialReward.bg.image.sprite = nil
  774. itemLua.specialReward.bg.image.enabled = false
  775. CommonUtil.LoadIcon(self, bgPic, function(sprite)
  776. if sprite then
  777. itemLua.specialReward.bg.image.sprite = sprite
  778. itemLua.specialReward.bg.image.enabled = true
  779. end
  780. end, itemLua, 'SpecialRewardBgIcon')
  781. itemLua.specialReward.num.image.sprite = nil
  782. itemLua.specialReward.num.image.enabled = false
  783. CommonUtil.LoadIcon(self, numPic, function(sprite)
  784. if sprite then
  785. itemLua.specialReward.num.image.sprite = sprite
  786. itemLua.specialReward.num.image.enabled = true
  787. end
  788. end, itemLua, 'SpecialRewardNumIcon')
  789. itemLua.specialReward:SetActive(true)
  790. itemLua.goodsItems:SetActive(false)
  791. else
  792. itemLua.specialReward:SetActive(false)
  793. if rewards then
  794. itemLua.goodsItems:SetActive(true)
  795. local reward = rewards[1]
  796. if reward then
  797. itemLua.iconSmallItem1:SetActive(true)
  798. CommonUtil.UpdateItemPrefab(self, itemLua.iconSmallItem1, {cfgId = reward[1], num = reward[2]}, Enum.ItemIEnterType.Bag)
  799. else
  800. itemLua.iconSmallItem1:SetActive(false)
  801. end
  802. reward = rewards[2]
  803. if reward then
  804. itemLua.iconSmallItem2:SetActive(true)
  805. CommonUtil.UpdateItemPrefab(self, itemLua.iconSmallItem2, {cfgId = reward[1], num = reward[2]}, Enum.ItemIEnterType.Bag)
  806. else
  807. itemLua.iconSmallItem2:SetActive(false)
  808. end
  809. reward = rewards[3]
  810. if reward then
  811. itemLua.iconSmallItem3:SetActive(true)
  812. CommonUtil.UpdateItemPrefab(self, itemLua.iconSmallItem3, {cfgId = reward[1], num = reward[2]}, Enum.ItemIEnterType.Bag)
  813. else
  814. itemLua.iconSmallItem3:SetActive(false)
  815. end
  816. else
  817. itemLua.goodsItems:SetActive(false)
  818. end
  819. end
  820. end
  821. function UIRuneShopBTView:GetItemByRowColumnLimited(loopGridView, itemIdx, row, column)
  822. local data = self.controller:GetShowGoodsDataByIdx(itemIdx + 1)
  823. if not data then return nil end
  824. local item = loopGridView:NewListViewItem('RuneShopLimitedItem')
  825. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'RuneShopLimitedItem', item.gameObject)
  826. if itemLua then
  827. itemLua.itemIcon.image.sprite = nil
  828. itemLua.itemIcon.image.enabled = false
  829. local cfgData = data.cfgData
  830. if cfgData then
  831. CommonUtil.LoadIcon(self, cfgData.Banner, function(sprite)
  832. if sprite then
  833. itemLua.itemIcon.image.sprite = sprite
  834. itemLua.itemIcon.image.enabled = true
  835. end
  836. end, itemLua, 'ItemIcon')
  837. end
  838. if data:HasEndTime() then
  839. local timerStr = data:CalculateLimitTime()
  840. itemLua.timerLab.text.text.text = string.formatbykey('RuneShopLimitTime', timerStr)
  841. itemLua.timerLab:SetActive(true)
  842. self:StartRefreshTimer(itemLua, data)
  843. else
  844. self:StopRefreshTimer(itemLua)
  845. itemLua.timerLab:SetActive(false)
  846. end
  847. local price = data:GetPrice()
  848. if price <= 0 then
  849. itemLua.presentPrice.number.text.text = string.formatbykey('Free')
  850. else
  851. itemLua.presentPrice.number.text.text = FloatToPrice(price)
  852. end
  853. if data:IsSoldout() then
  854. itemLua.soldout:SetActive(true)
  855. itemLua.button.onClick:RemoveAllListeners()
  856. itemLua.presentPrice.button.onClick:RemoveAllListeners()
  857. else
  858. itemLua.soldout:SetActive(false)
  859. self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnClickLimitedItem, data:GetId(), itemIdx)
  860. self.uiBase:AddButtonUniqueEventListener(itemLua.presentPrice.button, self, self.OnClickLimitedPrice, data:GetId(), itemIdx)
  861. end
  862. itemLua.redPoint:SetActive(ManagerContainer.RedPointMgr.RSLimitGiftRPCtr:GetRedPointStatusById(data:GetId()))
  863. end
  864. return item
  865. end
  866. function UIRuneShopBTView:RefreshLimitedView(resetPos)
  867. local showGoodsDatas = self.controller:GetShowGoodsDatas()
  868. local length = (showGoodsDatas and #showGoodsDatas or 0)
  869. if resetPos then
  870. self.limitedBox.scrollView.loopGridView:RefreshListByIndex(length, 0)
  871. else
  872. self.limitedBox.scrollView.loopGridView:RefreshListByIndex(length)
  873. end
  874. end
  875. function UIRuneShopBTView:StartRefreshTimer(itemLua, goodsData)
  876. local timer = self.refreshTimer
  877. if not timer then
  878. timer = Timer.New(slot(self.RefreshTimer, self), 1, -1)
  879. self.refreshTimer = timer
  880. end
  881. local updateItemMap = timer.updateItemMap
  882. if not updateItemMap then
  883. updateItemMap = {}
  884. timer.updateItemMap = updateItemMap
  885. end
  886. updateItemMap[itemLua] = goodsData
  887. if not timer.running then
  888. timer:Start()
  889. end
  890. end
  891. function UIRuneShopBTView:StopRefreshTimer(itemLua)
  892. local timer = self.refreshTimer
  893. if timer then
  894. local updateItemMap = timer.updateItemMap
  895. if updateItemMap then
  896. updateItemMap[itemLua] = nil
  897. end
  898. if not updateItemMap or table_is_empty(updateItemMap) then
  899. timer:Stop()
  900. end
  901. end
  902. end
  903. function UIRuneShopBTView:StopAndClearRefreshTimer()
  904. if self.refreshTimer then
  905. self.refreshTimer:Stop()
  906. self.refreshTimer.time = 1
  907. self.refreshTimer.duration = 1
  908. self.refreshTimer.updateItemMap = nil
  909. end
  910. end
  911. function UIRuneShopBTView:DisposeRefreshTimer()
  912. self:StopAndClearRefreshTimer()
  913. self.refreshTimer = nil
  914. end
  915. function UIRuneShopBTView:RefreshTimer()
  916. local timer = self.refreshTimer
  917. if not timer then return end
  918. local updateItemMap = timer.updateItemMap
  919. if not updateItemMap or table_is_empty(updateItemMap) then
  920. timer:Stop()
  921. return
  922. end
  923. local minRemainTime = nil
  924. local runeShopType = self.controller:GetShopType()
  925. if runeShopType == Enum.RuneShopType.MonthCard then
  926. for itemLua, goodsData in pairs(updateItemMap) do
  927. local timerStr, outTime, remainTime = goodsData:CalculateLimitTime()
  928. if not outTime then
  929. itemLua.textDsc.text.text = string.formatbykey('DscClubMonth2', timerStr)
  930. itemLua.active:SetActive(true)
  931. itemLua.unActive:SetActive(false)
  932. else
  933. updateItemMap[itemLua] = nil
  934. itemLua.textDsc.text.text = string.formatbykey('DscClubMonth1')
  935. itemLua.active:SetActive(false)
  936. itemLua.unActive:SetActive(true)
  937. end
  938. if remainTime and remainTime > 0 then
  939. if not minRemainTime or minRemainTime > remainTime then
  940. minRemainTime = remainTime
  941. end
  942. end
  943. end
  944. if minRemainTime and minRemainTime > 0 then
  945. minRemainTime = 1
  946. end
  947. elseif runeShopType == Enum.RuneShopType.Gifts then
  948. local endTime = self.controller:GetRemainTime()
  949. if endTime then
  950. if endTime < 0 then endTime = 0 end
  951. if endTime <= 0 then
  952. timer.updateItemMap = nil
  953. end
  954. self.timeBox:SetActive(true)
  955. self.timeBox.textTime.text.text = string.formatbykey('RuneShopRefreshTime', DateTimeUtil.convertSeconds2TimeStr1(endTime, true, true, false))
  956. else
  957. self.timeBox:SetActive(false)
  958. timer.updateItemMap = nil
  959. end
  960. if endTime and endTime > 0 then
  961. if not minRemainTime or minRemainTime > endTime then
  962. minRemainTime = endTime
  963. end
  964. end
  965. elseif runeShopType == Enum.RuneShopType.LimitTime then
  966. for itemLua, goodsData in pairs(updateItemMap) do
  967. if goodsData:HasEndTime() then
  968. local timerStr, outTime, remainTime = goodsData:CalculateLimitTime()
  969. if outTime then
  970. updateItemMap[itemLua] = nil
  971. end
  972. itemLua.timerLab.text.text.text = string.formatbykey('RuneShopLimitTime', timerStr)
  973. itemLua.timerLab:SetActive(true)
  974. if remainTime and remainTime > 0 then
  975. if not minRemainTime or minRemainTime > remainTime then
  976. minRemainTime = remainTime
  977. end
  978. end
  979. else
  980. updateItemMap[itemLua] = nil
  981. itemLua.timerLab:SetActive(false)
  982. end
  983. if minRemainTime and minRemainTime > 0 then
  984. minRemainTime = 1
  985. end
  986. end
  987. end
  988. if not minRemainTime or minRemainTime <= 0 then
  989. self:StopRefreshTimer()
  990. else
  991. -- 降低刷新频率
  992. if self.refreshTimer then
  993. local validTime = nil
  994. if minRemainTime >= 86400 then
  995. validTime = minRemainTime % 3600
  996. if validTime == 0 then validTime = 3600 end
  997. elseif minRemainTime >= 3600 then
  998. validTime = minRemainTime % 60
  999. if validTime == 0 then validTime = 60 end
  1000. else
  1001. validTime = 1
  1002. end
  1003. if validTime then
  1004. self.refreshTimer.duration = validTime
  1005. else
  1006. self:StopRefreshTimer()
  1007. end
  1008. end
  1009. end
  1010. end
  1011. return UIRuneShopBTView