123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- ---@class KLDailyRafflePanel:UIKmlLuaPanelBase
- ---@field view KLDailyRafflePanelView
- local KLDailyRafflePanel = class(UIKmlLuaPanelBase)
- local this =KLDailyRafflePanel
- ---创建时调用一次
- function this:Init()
- self.targetPosition = 1
- SL.HideMainPanel()
- 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}}
- self.all_data = SL:GetConfigTable("cfg_daily_prizes")
- GUI:DataListInitData(self.view.reward_dl,function()
- return self:GoldRewardDataListItemCountFunc()
- end,function(realIndex)
- return self:GoldRewardDataListItemGetFunc(realIndex)
- end,function(realIndex, kmlcontrol)
- return self:GoldRewardDataListItemInitFunc(realIndex, kmlcontrol)
- end, function(realIndex, kmlcontrol)
- return self:GoldRewardDataListItemUpdateFunc(realIndex, kmlcontrol)
- end)
- self.reward_all_item = {}
- GUI:DataListUpdateData(self.view.reward_dl)
- self.is_start_anim = false
- self.updateID = SL:Schedule(self.updateID,0,Time.deltaTime,-1,function()
- self:Update()
- end)
- --GUI:UIPanel_Close("dev/outui/MainRecharge/Panel/KLMainRecharge/KLMainRechargePanel")
- end
- ---创建或者刷新界面数据时调用
- function this:Refresh()
- SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_LUCK_DRAW_INFO)
- end
- ---注册UI事件和服务器消息
- function this:RegistEvents()
- SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_LUCK_DRAW_INFO,self.RES_LUCK_DRAW_INFO,self)
- SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_LUCK_DRAW,self.RES_LUCK_DRAW,self)
- GUI:AddOnClickEvent(self.view.btnStart,self,self.StartReward)
- GUI:AddOnClickEvent(self.view.btnPhoneNumber,self,self.Questionnaire)
-
- end
- function this:CloseOnclick()
- GUI:UIPanel_Close("dev/outui/DailyRaffle/Panel/KLDailyRaffle/KLDailyRafflePanel")
- SL.ShowMainPanel()
- end
- function this:Close()
- if self.updateID then
- SL:UnSchedule(self.updateID)
- self.updateID = nil
- end
- end
- function this:GoldRewardDataListItemCountFunc()
- return #self.all_data
- end
- function this:GoldRewardDataListItemGetFunc(realIndex)
- local item = GUI:UIPanel_Open("dev/outui/DailyRaffle/Item/KLUIDailyRaffleRewardItem/KLUIDailyRaffleRewardItem",self.view.reward_dl,self,{},true)
- self.reward_all_item[realIndex+1] = item
- return item.view.root
- end
- function this:GoldRewardDataListItemInitFunc(realIndex, kmlcontrol)
- end
- function this:GoldRewardDataListItemUpdateFunc(realIndex, kmlcontrol)
- local _data = self.all_data[realIndex + 1]
- self.reward_all_item[realIndex+1]:RefreshItem({cfgId=_data.reward[1],data=_data,count=_data.reward[2],pos=self.all_pos[realIndex + 1]},self)
- end
- -- 初始化转动速度和间隔时间
- local initialSpeed = 200 -- 初始转动速度,单位为毫秒
- local minSpeed = 400 -- 最小转动速度,单位为毫秒
- local maxSpeed = 50 -- 最小转动速度,单位为毫秒
- local acceleration = 20 -- 加速度,单位为毫秒
- local deceleration = 50 -- 减速度,单位为毫秒
- local max_num = 30
- function this:initAnim( ... )
- self.currentPosition = 1
- self.totalPrizes = #self.reward_all_item
- end
- function this:StartAnim()
- if self.is_start_anim then
- return
- end
- self:initAnim()
- self.is_start_anim = true
- self.speed = initialSpeed
- self.all_time = 0
- for i, v in ipairs(self.reward_all_item) do
- v:noselect()
- end
- self.reward_all_item[1]:select()
- self.is_add = true
- self.add_time = max_num
- end
- function this:Update()
- if not self.is_start_anim then
- return
- end
- self.all_time = self.all_time + Time.deltaTime
- --SL:LogError(self.all_time)
- if self.all_time > self.speed/1000 then
- self:runCarousel()
- self.all_time = 0
- end
- end
- -- 定义转动函数
- function this:runCarousel()
- for i, v in ipairs(self.reward_all_item) do
- v:noselect()
- end
- --SL:LogError("当前奖品:" .. self.reward_all_item[self.currentPosition].reward[1])
- self.currentPosition = self.currentPosition % self.totalPrizes + 1
- self.reward_all_item[self.currentPosition]:select()
- -- if self.speed > minSpeed then
- -- self.speed = self.speed - acceleration
- -- elseif self.currentPosition == self.targetPosition and self.speed <= minSpeed then
- -- self.is_start_anim = false
- -- SL:LogError("恭喜您抽中:" .. self.reward_all_item[self.currentPosition].reward[1])
- -- else
- -- self.speed = self.speed + deceleration
- -- end
- if self.is_add then
- self.speed = self.speed - acceleration
- if self.speed < maxSpeed then
- self.speed = maxSpeed
- end
- if self.speed <= maxSpeed then
- self.add_time = self.add_time - 1
- if self.add_time <= 0 then
- self.is_add = false
- end
- end
- else
- if self.speed < minSpeed then
- self.speed = self.speed + deceleration
- elseif self.currentPosition == self.targetPosition and self.speed >= minSpeed then
- self.is_start_anim = false
- --SL:LogError("恭喜您抽中:" .. self.all_data[self.currentPosition].reward[1])
- self:ShowReward(self.all_data[self.currentPosition].reward)
- end
- end
- end
- function this:RES_LUCK_DRAW_INFO(id, message)
- --SL:LogTable(message,true)
- --SL:LogError(message)
- if not message then
- message = {dayCount=0,currentCount=0}
- end
- ---@class message 每日抽奖信息
- ---@field currentCount number 当前已经抽奖次数
- ---@field lastResetTime number 上一次重置事件
- ---@field phone number 手机号
- ---@field dayCount number 当天剩余抽奖次数
- self.data = message
- local tab = SL:GetConfig("cfg_global",19001)
- local all_num = 7
- if tab then
- local str_list = tab.value
- local data_list = string.split(str_list,'#')
- all_num = tonumber(data_list[1])
- end
- self.data.count = all_num - self.data.currentCount
- if self.data and self.data.phone then
- else
- self.data.count = 0
- end
- local str = "剩余抽奖总次数:".. self.data.count
- GUI:Text_setString(self.view.last_num,str)
- local str_day = "今日剩余抽奖".. self.data.dayCount .. "次"
- GUI:Text_setString(self.view.day_num,str_day)
- if self.data.dayCount <= 0 then
- GUI:Button_setGrey(self.view.btnStart, true)
- else
- GUI:Button_setGrey(self.view.btnStart, false)
- end
-
- end
- function this:Questionnaire()
- if self.data and self.data.phone then
- SL:TipMessage( SL:GetConfig("cfg_string",468).text, 1, NoticeType.NoticeMid )
- return
- end
- GUI:UIPanel_Open("dev/outui/DailyRaffle/Panel/KLQuestionnaire/KLQuestionnairePanel",nil,nil,{parent=self})
- end
- function this:StartReward()
- if not self.data then
- return
- end
- if self.is_start_anim then
- return
- end
- if self.data.dayCount <= 0 and self.data.count > 0 then
- SL:TipMessage( SL:GetConfig("cfg_string",471).text, 1, NoticeType.NoticeMid )
- return
- end
- if self.data.count <= 0 then
- SL:TipMessage( SL:GetConfig("cfg_string",469).text, 1, NoticeType.NoticeMid )
- return
- end
- SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_LUCK_DRAW)
- end
- function this:RES_LUCK_DRAW(id, message)
- self.targetPosition = tonumber(message)
- self:StartAnim()
- self:Refresh()
- end
- function this:ShowReward(message)
- local key = tostring(message[1])
- local tab = {}
- tab[key] = message[2]
- SL:OpenRewardTips(tab,0)
- end
- return this
|