RSLimitGiftRPCtr.lua 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. local RSLimitGiftRPCtr = class('RSLimitGiftRPCtr')
  2. local CACHE_RP_KEY_NAME = 'Cache_RuneShopLimitGift_RP_Key'
  3. function RSLimitGiftRPCtr:ctor()
  4. self.cacheRSLimitGiftRPMap = nil
  5. end
  6. function RSLimitGiftRPCtr:Init()
  7. self.cacheRSLimitGiftRPMap = nil
  8. end
  9. function RSLimitGiftRPCtr:Destory()
  10. end
  11. function RSLimitGiftRPCtr:RefreshLimitGiftRedPointByShopData(shopData)
  12. if not self.cacheRSLimitGiftRPMap then
  13. self:ReadCacheRSLimitGiftRPData()
  14. end
  15. if shopData then
  16. local showGoodsDatas = shopData:GetShowGoodsDatas()
  17. if showGoodsDatas and #showGoodsDatas > 0 then
  18. local redpoint = false
  19. local changed = false
  20. local id
  21. local newCacheRSLimitGiftRPMap = {}
  22. for _, showGoodsData in pairs(showGoodsDatas) do
  23. local cfgData = showGoodsData:GetCfgData()
  24. if cfgData and cfgData.RedPoint == 1 and not showGoodsData:IsSoldout() then
  25. id = showGoodsData:GetId()
  26. if self.cacheRSLimitGiftRPMap[id] == nil then
  27. newCacheRSLimitGiftRPMap[id] = true
  28. redpoint = true
  29. changed = true
  30. else
  31. newCacheRSLimitGiftRPMap[id] = self.cacheRSLimitGiftRPMap[id]
  32. if newCacheRSLimitGiftRPMap[id] then
  33. redpoint = true
  34. end
  35. end
  36. end
  37. end
  38. if changed then
  39. self.cacheRSLimitGiftRPMap = newCacheRSLimitGiftRPMap
  40. self:WriteCacheRSLimitGiftRPData()
  41. end
  42. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.RuneShopLimitGift, redpoint)
  43. return
  44. end
  45. end
  46. if not CommonUtil.TableIsEmpty(self.cacheRSLimitGiftRPMap) then
  47. self.cacheRSLimitGiftRPMap = {}
  48. self:WriteCacheRSLimitGiftRPData()
  49. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.RuneShopLimitGift, false)
  50. end
  51. end
  52. function RSLimitGiftRPCtr:RefreshLimitGiftRedPointByIds(ids)
  53. if not self.cacheRSLimitGiftRPMap then
  54. self:ReadCacheRSLimitGiftRPData()
  55. end
  56. if not ids then
  57. if not CommonUtil.TableIsEmpty(self.cacheRSLimitGiftRPMap) then
  58. self.cacheRSLimitGiftRPMap = {}
  59. self:WriteCacheRSLimitGiftRPData()
  60. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.RuneShopLimitGift, false)
  61. end
  62. return
  63. end
  64. local redpoint = false
  65. local changed = false
  66. local newCacheRSLimitGiftRPMap = {}
  67. for _, id in pairs(ids) do
  68. local cfgData = ManagerContainer.CfgMgr:GetRuneShopCfgByFeature(Enum.RuneShopType.LimitTime, nil, id)
  69. if cfgData and cfgData.RedPoint == 1 then
  70. if self.cacheRSLimitGiftRPMap[id] == nil then
  71. newCacheRSLimitGiftRPMap[id] = true
  72. redpoint = true
  73. changed = true
  74. else
  75. newCacheRSLimitGiftRPMap[id] = self.cacheRSLimitGiftRPMap[id]
  76. if newCacheRSLimitGiftRPMap[id] then
  77. redpoint = true
  78. end
  79. end
  80. end
  81. end
  82. if changed then
  83. self.cacheRSLimitGiftRPMap = newCacheRSLimitGiftRPMap
  84. self:WriteCacheRSLimitGiftRPData()
  85. end
  86. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.RuneShopLimitGift, redpoint)
  87. end
  88. function RSLimitGiftRPCtr:GetRedPointStatusById(id)
  89. return self.cacheRSLimitGiftRPMap and self.cacheRSLimitGiftRPMap[id] or false
  90. end
  91. function RSLimitGiftRPCtr:CancelRedPointStatusById(id)
  92. if self.cacheRSLimitGiftRPMap then
  93. if not self.cacheRSLimitGiftRPMap[id] then
  94. return
  95. end
  96. self.cacheRSLimitGiftRPMap[id] = false
  97. else
  98. self.cacheRSLimitGiftRPMap = {}
  99. end
  100. self.cacheRSLimitGiftRPMap[id] = false
  101. self:WriteCacheRSLimitGiftRPData()
  102. for _, value in pairs(self.cacheRSLimitGiftRPMap) do
  103. if value then
  104. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.RuneShopLimitGift, true)
  105. return
  106. end
  107. end
  108. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.RuneShopLimitGift, false)
  109. end
  110. function RSLimitGiftRPCtr:ReadCacheRSLimitGiftRPData()
  111. local cacheStr = ManagerContainer.PlayerPrefsMgr:GetString(CACHE_RP_KEY_NAME, '')
  112. local cacheRSLimitGiftRPMap = JSON:decode(cacheStr)
  113. if not cacheRSLimitGiftRPMap then
  114. cacheRSLimitGiftRPMap = {}
  115. end
  116. self.cacheRSLimitGiftRPMap = cacheRSLimitGiftRPMap
  117. end
  118. function RSLimitGiftRPCtr:WriteCacheRSLimitGiftRPData()
  119. if self.cacheRSLimitGiftRPMap then
  120. local valueStr = JSON:encode(self.cacheRSLimitGiftRPMap)
  121. ManagerContainer.PlayerPrefsMgr:SetString(CACHE_RP_KEY_NAME, valueStr)
  122. end
  123. end
  124. return RSLimitGiftRPCtr