---@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