KLDailyRafflePanel.lua 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. ---@class KLDailyRafflePanel:UIKmlLuaPanelBase
  2. ---@field view KLDailyRafflePanelView
  3. local KLDailyRafflePanel = class(UIKmlLuaPanelBase)
  4. local this =KLDailyRafflePanel
  5. ---创建时调用一次
  6. function this:Init()
  7. self.targetPosition = 1
  8. SL.HideMainPanel()
  9. self.all_pos = {{x=0,y=136},{x=98,y=97},{x=140,y=0},{x=98,y=-97},{x=0,y=-122},{x=-98,y=-97},{x=-140,y=0},{x=-98,y=97}}
  10. self.all_data = SL:GetConfigTable("cfg_daily_prizes")
  11. GUI:DataListInitData(self.view.reward_dl,function()
  12. return self:GoldRewardDataListItemCountFunc()
  13. end,function(realIndex)
  14. return self:GoldRewardDataListItemGetFunc(realIndex)
  15. end,function(realIndex, kmlcontrol)
  16. return self:GoldRewardDataListItemInitFunc(realIndex, kmlcontrol)
  17. end, function(realIndex, kmlcontrol)
  18. return self:GoldRewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  19. end)
  20. self.reward_all_item = {}
  21. GUI:DataListUpdateData(self.view.reward_dl)
  22. self.is_start_anim = false
  23. self.updateID = SL:Schedule(self.updateID,0,Time.deltaTime,-1,function()
  24. self:Update()
  25. end)
  26. --GUI:UIPanel_Close("dev/outui/MainRecharge/Panel/KLMainRecharge/KLMainRechargePanel")
  27. end
  28. ---创建或者刷新界面数据时调用
  29. function this:Refresh()
  30. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_LUCK_DRAW_INFO)
  31. end
  32. ---注册UI事件和服务器消息
  33. function this:RegistEvents()
  34. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_LUCK_DRAW_INFO,self.RES_LUCK_DRAW_INFO,self)
  35. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_LUCK_DRAW,self.RES_LUCK_DRAW,self)
  36. GUI:AddOnClickEvent(self.view.btnStart,self,self.StartReward)
  37. GUI:AddOnClickEvent(self.view.btnPhoneNumber,self,self.Questionnaire)
  38. end
  39. function this:CloseOnclick()
  40. GUI:UIPanel_Close("dev/outui/DailyRaffle/Panel/KLDailyRaffle/KLDailyRafflePanel")
  41. SL.ShowMainPanel()
  42. end
  43. function this:Close()
  44. if self.updateID then
  45. SL:UnSchedule(self.updateID)
  46. self.updateID = nil
  47. end
  48. end
  49. function this:GoldRewardDataListItemCountFunc()
  50. return #self.all_data
  51. end
  52. function this:GoldRewardDataListItemGetFunc(realIndex)
  53. local item = GUI:UIPanel_Open("dev/outui/DailyRaffle/Item/KLUIDailyRaffleRewardItem/KLUIDailyRaffleRewardItem",self.view.reward_dl,self,{},true)
  54. self.reward_all_item[realIndex+1] = item
  55. return item.view.root
  56. end
  57. function this:GoldRewardDataListItemInitFunc(realIndex, kmlcontrol)
  58. end
  59. function this:GoldRewardDataListItemUpdateFunc(realIndex, kmlcontrol)
  60. local _data = self.all_data[realIndex + 1]
  61. self.reward_all_item[realIndex+1]:RefreshItem({cfgId=_data.reward[1],data=_data,count=_data.reward[2],pos=self.all_pos[realIndex + 1]},self)
  62. end
  63. -- 初始化转动速度和间隔时间
  64. local initialSpeed = 200 -- 初始转动速度,单位为毫秒
  65. local minSpeed = 400 -- 最小转动速度,单位为毫秒
  66. local maxSpeed = 50 -- 最小转动速度,单位为毫秒
  67. local acceleration = 20 -- 加速度,单位为毫秒
  68. local deceleration = 50 -- 减速度,单位为毫秒
  69. local max_num = 30
  70. function this:initAnim( ... )
  71. self.currentPosition = 1
  72. self.totalPrizes = #self.reward_all_item
  73. end
  74. function this:StartAnim()
  75. if self.is_start_anim then
  76. return
  77. end
  78. self:initAnim()
  79. self.is_start_anim = true
  80. self.speed = initialSpeed
  81. self.all_time = 0
  82. for i, v in ipairs(self.reward_all_item) do
  83. v:noselect()
  84. end
  85. self.reward_all_item[1]:select()
  86. self.is_add = true
  87. self.add_time = max_num
  88. end
  89. function this:Update()
  90. if not self.is_start_anim then
  91. return
  92. end
  93. self.all_time = self.all_time + Time.deltaTime
  94. --SL:LogError(self.all_time)
  95. if self.all_time > self.speed/1000 then
  96. self:runCarousel()
  97. self.all_time = 0
  98. end
  99. end
  100. -- 定义转动函数
  101. function this:runCarousel()
  102. for i, v in ipairs(self.reward_all_item) do
  103. v:noselect()
  104. end
  105. --SL:LogError("当前奖品:" .. self.reward_all_item[self.currentPosition].reward[1])
  106. self.currentPosition = self.currentPosition % self.totalPrizes + 1
  107. self.reward_all_item[self.currentPosition]:select()
  108. -- if self.speed > minSpeed then
  109. -- self.speed = self.speed - acceleration
  110. -- elseif self.currentPosition == self.targetPosition and self.speed <= minSpeed then
  111. -- self.is_start_anim = false
  112. -- SL:LogError("恭喜您抽中:" .. self.reward_all_item[self.currentPosition].reward[1])
  113. -- else
  114. -- self.speed = self.speed + deceleration
  115. -- end
  116. if self.is_add then
  117. self.speed = self.speed - acceleration
  118. if self.speed < maxSpeed then
  119. self.speed = maxSpeed
  120. end
  121. if self.speed <= maxSpeed then
  122. self.add_time = self.add_time - 1
  123. if self.add_time <= 0 then
  124. self.is_add = false
  125. end
  126. end
  127. else
  128. if self.speed < minSpeed then
  129. self.speed = self.speed + deceleration
  130. elseif self.currentPosition == self.targetPosition and self.speed >= minSpeed then
  131. self.is_start_anim = false
  132. --SL:LogError("恭喜您抽中:" .. self.all_data[self.currentPosition].reward[1])
  133. self:ShowReward(self.all_data[self.currentPosition].reward)
  134. end
  135. end
  136. end
  137. function this:RES_LUCK_DRAW_INFO(id, message)
  138. --SL:LogTable(message,true)
  139. --SL:LogError(message)
  140. if not message then
  141. message = {dayCount=0,currentCount=0}
  142. end
  143. ---@class message 每日抽奖信息
  144. ---@field currentCount number 当前已经抽奖次数
  145. ---@field lastResetTime number 上一次重置事件
  146. ---@field phone number 手机号
  147. ---@field dayCount number 当天剩余抽奖次数
  148. self.data = message
  149. local tab = SL:GetConfig("cfg_global",19001)
  150. local all_num = 7
  151. if tab then
  152. local str_list = tab.value
  153. local data_list = string.split(str_list,'#')
  154. all_num = tonumber(data_list[1])
  155. end
  156. self.data.count = all_num - self.data.currentCount
  157. if self.data and self.data.phone then
  158. else
  159. self.data.count = 0
  160. end
  161. local str = "剩余抽奖总次数:".. self.data.count
  162. GUI:Text_setString(self.view.last_num,str)
  163. local str_day = "今日剩余抽奖".. self.data.dayCount .. "次"
  164. GUI:Text_setString(self.view.day_num,str_day)
  165. if self.data.dayCount <= 0 then
  166. GUI:Button_setGrey(self.view.btnStart, true)
  167. else
  168. GUI:Button_setGrey(self.view.btnStart, false)
  169. end
  170. end
  171. function this:Questionnaire()
  172. if self.data and self.data.phone then
  173. SL:TipMessage( SL:GetConfig("cfg_string",468).text, 1, NoticeType.NoticeMid )
  174. return
  175. end
  176. GUI:UIPanel_Open("dev/outui/DailyRaffle/Panel/KLQuestionnaire/KLQuestionnairePanel",nil,nil,{parent=self})
  177. end
  178. function this:StartReward()
  179. if not self.data then
  180. return
  181. end
  182. if self.is_start_anim then
  183. return
  184. end
  185. if self.data.dayCount <= 0 and self.data.count > 0 then
  186. SL:TipMessage( SL:GetConfig("cfg_string",471).text, 1, NoticeType.NoticeMid )
  187. return
  188. end
  189. if self.data.count <= 0 then
  190. SL:TipMessage( SL:GetConfig("cfg_string",469).text, 1, NoticeType.NoticeMid )
  191. return
  192. end
  193. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_LUCK_DRAW)
  194. end
  195. function this:RES_LUCK_DRAW(id, message)
  196. self.targetPosition = tonumber(message)
  197. self:StartAnim()
  198. self:Refresh()
  199. end
  200. function this:ShowReward(message)
  201. local key = tostring(message[1])
  202. local tab = {}
  203. tab[key] = message[2]
  204. SL:OpenRewardTips(tab,0)
  205. end
  206. return this