ActivityPreviewInfo.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. ---@class ActivityPreviewInfo @注释
  2. ---@field previewInfo {leftTime:number,id:number,open:boolean,cfg:cfg_activity_rule_column,isPreview:boolean}[]
  3. ---@field activityCfgs cfg_activity_rule_column[]
  4. ActivityPreviewInfo = class()
  5. local this = ActivityPreviewInfo
  6. function this:ctor()
  7. end
  8. function this:Init()
  9. self.previewInfo = {}
  10. self.activityCfgs = SL:GetConfigTable("cfg_activity_rule")
  11. local tempTable = {}
  12. if self.activityCfgs then
  13. for k, v in pairs(self.activityCfgs) do
  14. tempTable[v.id] = v
  15. end
  16. end
  17. self.activityCfgs = tempTable
  18. self:InitData()
  19. self:RegistMessages()
  20. end
  21. function this:InitData()
  22. end
  23. function this:RegistMessages()
  24. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ACTIVITY_LIST, self.ResPreviewDataList, self)
  25. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ACTIVITY_CHANGE, self.ResPreviewDataChange, self)
  26. end
  27. ---所有的活动信息
  28. ---@param message {leftTime:number,id:number,open:boolean}[]
  29. function this:ResPreviewDataList(_, message)
  30. self.previewInfo = {}
  31. for k, v in pairs(message) do
  32. if self.activityCfgs[v.id] then
  33. v.cfg = self.activityCfgs[v.id]
  34. v.leftTime = tonumber(v.leftTime)
  35. v.isPreview = false
  36. if not v.open then
  37. v.isPreview = self:CheckActivityIsPreview(v)
  38. end
  39. table.insert(self.previewInfo, v)
  40. end
  41. end
  42. self:ActivityInfoSort()
  43. SL:onLUAEvent(LUA_EVENT_ACTIVITYPREVIEW_CHANGE)
  44. end
  45. ---单个活动更新
  46. ---@param message {leftTime:number,id:number,open:boolean}
  47. function this:ResPreviewDataChange(_, message)
  48. local isHave = false
  49. for k, v in pairs(self.previewInfo) do
  50. if v.id == message.id and self.activityCfgs[message.id] then
  51. message.leftTime = tonumber(message.leftTime)
  52. message.cfg = self.activityCfgs[message.id]
  53. message.isPreview = false
  54. if not v.open then
  55. v.isPreview = self:CheckActivityIsPreview(v)
  56. end
  57. self.previewInfo[k] = message
  58. isHave = true
  59. break
  60. end
  61. end
  62. if not isHave and self.activityCfgs[message.id] then
  63. message.leftTime = tonumber(message.leftTime)
  64. message.cfg = self.activityCfgs[message.id]
  65. message.isPreview = false
  66. if not message.open then
  67. message.isPreview = self:CheckActivityIsPreview(message)
  68. end
  69. table.insert(self.previewInfo, message)
  70. end
  71. self:ActivityInfoSort()
  72. SL:onLUAEvent(LUA_EVENT_ACTIVITYPREVIEW_CHANGE)
  73. end
  74. function this:ActivityInfoSort()
  75. table.sort(self.previewInfo, function(a, b)
  76. if a.open and not b.open then
  77. return true
  78. elseif not a.open and not b.open then
  79. if a.cfg and b.cfg and a.cfg.rank < b.cfg.rank then
  80. return true
  81. end
  82. return false
  83. end
  84. return false
  85. end)
  86. end
  87. ---@param message {leftTime:number,id:number,open:boolean}
  88. ----@return boolean
  89. function this:CheckActivityIsPreview(message)
  90. local previewTime = message.leftTime - message.cfg.specialOpen * 1000
  91. if Time.GetServerTime() > previewTime and Time.GetServerTime() < message.leftTime then
  92. return true
  93. end
  94. return false
  95. end
  96. ----获取活动数据
  97. ----@return {leftTime:number,id:number,open:boolean,cfg:cfg_activity_rule_column,isPreview:boolean}
  98. function this:GetActivityInfo(activityId)
  99. for k, v in pairs(self.previewInfo) do
  100. if v.id == activityId and self.activityCfgs[activityId] then
  101. return v
  102. end
  103. end
  104. return nil
  105. end
  106. function this:Reset()
  107. self.previewInfo = {}
  108. end