local LingLongBaoJingPanel = {} local data = {} ---转盘旋转类型 local TableTurnType={ Normal=1,--默认旋转 Expedite=2,--加快旋转 } local curTurnPos=1 --当前位置 local sortingOrder = 0 function LingLongBaoJingPanel:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = LingLongBaoJingPanel }) return b end local a,b,c,d local configs ---初始化组件(用于子类重写) function LingLongBaoJingPanel:InitComponent(gameObject) self.spLoader = SpriteLoader.New() self.luckyTurnPanel = Util.GetGameObject(self.gameObject,"Panel") self.mask = Util.GetGameObject(self.luckyTurnPanel,"Mask") self.time = Util.GetGameObject(self.luckyTurnPanel,"time"):GetComponent("Text") self.firstLayer = Util.GetGameObject(self.luckyTurnPanel,"firstLayer"):GetComponent("Canvas") self.secondLayer = Util.GetGameObject(self.luckyTurnPanel,"turnpanelWai"):GetComponent("Canvas") self.thirtyLayer = Util.GetGameObject(self.luckyTurnPanel,"TurnTable"):GetComponent("Canvas") self.fx_linglongbaojing_changzhu = Util.GetGameObject(self.firstLayer.transform,"fx_linglongbaojing_changzhu") self.fx_linglongbaojing_changzhu.gameObject:SetActive(true) self.fx_linglongbaojing_long = Util.GetGameObject(self.thirtyLayer.transform,"fx_linglongbaojing_long") self.fx_linglongbaojing_long.gameObject:SetActive(true) self.fx_linglongbaojing_chuxian = Util.GetGameObject(self.thirtyLayer.transform,"fx_linglongbaojing_chuxian") self.fx_linglongbaojing_chuxian.gameObject:SetActive(false) self.fx_linglongbaojing_longchuxian = Util.GetGameObject(self.thirtyLayer.transform,"fx_linglongbaojing_longchuxian") self.fx_linglongbaojing_longchuxian.gameObject:SetActive(false) ---跑马灯位置(物品位置) self.itemList = {} for i = 1,2 do if not self.itemList[i] then self.itemList[i] = {} end self.itemList[i].go = Util.GetGameObject(self.luckyTurnPanel, "ItemList"..i) for j = 1,self.itemList[i].go.transform.childCount do if not self.itemList[i][j] then self.itemList[i][j] = {} end self.itemList[i][j].pos = Util.GetGameObject(self.itemList[i].go, "item"..j) self.itemList[i][j].item = Util.GetGameObject(self.itemList[i][j].pos, "pre") local effect = nil effect = Util.GetGameObject(self.itemList[i][j].item, "fx_linglongbaojing_waiquanchufacangzhu") if not effect then effect = Util.GetGameObject(self.itemList[i][j].item, "fx_linglongbaojing_chouzhonglongtou") end self.itemList[i][j].effect = effect if self.itemList[i][j].effect then self.itemList[i][j].effect.gameObject:SetActive(false) end self.itemList[i][j].mask = Util.GetGameObject(self.itemList[i][j].item, "mask") self.itemList[i][j].itemPos = Util.GetGameObject(self.itemList[i][j].item, "itemPos") self.itemList[i][j].get = Util.GetGameObject(self.itemList[i][j].item, "get") self.itemList[i][j].selectKuang = Util.GetGameObject(self.itemList[i][j].item, "selectKuang") self.itemList[i][j].selectKuang.gameObject:SetActive(false) self.itemList[i][j].itemView = Util.GetGameObject(self.itemList[i][j].itemPos, "icon"):GetComponent("Image")--道具 end end --拥有道具数量 self.propBtn = Util.GetGameObject(self.thirtyLayer.transform,"Prop") self.propImage = Util.GetGameObject(self.propBtn, "PropImage"):GetComponent("Image")--道具 self.propText =Util.GetGameObject(self.propBtn, "PropText"):GetComponent("Text") self.fx_linglongbaojing_kaiqi = Util.GetGameObject(self.propBtn,"fx_linglongbaojing_kaiqi") self.fx_linglongbaojing_kaiqi.gameObject:SetActive(false) -- 奖励预览 self.btnPreview = Util.GetGameObject(self.gameObject, "button/previewBtn") self.helpBtn = Util.GetGameObject(self.luckyTurnPanel,"button/helpBtn") self.helpPosition = Util.GetGameObject(self.luckyTurnPanel,"BG/helpPos"):GetComponent("RectTransform").localPosition -- self.slider = Util.GetGameObject(self.luckyTurnPanel,"Slider") -- self.luckyValueNum = Util.GetGameObject(self.slider, "LuckyValue/LuckyValueNum"):GetComponent("Text")--幸运值 -- self.luckySlider = Util.GetGameObject(self.slider, "LuckySlider"):GetComponent("Slider") -- self.rewardBoxList={}--奖励盒 -- self.rewardBox=Util.GetGameObject(self.slider,"RewardBox") -- for i=1,5 do -- if not self.rewardBoxList[i] then -- self.rewardBoxList[i] = {} -- end -- self.rewardBoxList[i].go=Util.GetGameObject(self.rewardBox,"Item"..i) -- self.rewardBoxList[i].icon =Util.GetGameObject(self.rewardBoxList[i].go,"icon"):GetComponent("Image")--幸运值 -- self.rewardBoxList[i].value =Util.GetGameObject(self.rewardBoxList[i].go,"Value"):GetComponent("Text")--幸运值 -- self.rewardBoxList[i].redPoint=Util.GetGameObject(self.rewardBoxList[i].go,"redPoint") -- self.rewardBoxList[i].Num=Util.GetGameObject(self.rewardBoxList[i].go,"Num/Text"):GetComponent("Text")--幸运值 -- end -- self.itemRewardList = {} local config = ConfigManager.GetConfigData(ConfigName.SpecialConfig,117) local strs = string.split(config.Value,"|") self.costId = tonumber(strs[1]) strs = string.split(strs[2],"#") a = tonumber(strs[1]) b = tonumber(strs[2]) c = tonumber(strs[3]) d = tonumber(strs[4]) end ---绑定事件(用于子类重写) function LingLongBaoJingPanel:BindEvent() --帮助按钮 Util.AddClick(self.helpBtn,function() --Log("==YSP==点击帮助按钮") UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.LuckyTurn,self.helpPosition.x,self.helpPosition.y) end) Util.AddClick(self.btnPreview, function() UIManager.OpenPanel(UIName.RewardPreviewPopup,PRE_REWARD_POOL_TYPE.LINGLONG) end) Util.AddClick(self.propBtn, function() if not self.enough then PopupTipPanel.ShowTip("道具不足") return end LingLongBaoJingManager.QiMenDunJiaDrawRequest(self.actId,function(idList,drop) if not idList[1] then PopupTipPanel.ShowTip("转盘奖励出错了") return end self.fx_linglongbaojing_kaiqi.gameObject:SetActive(true) -- local drop = {} -- drop.itemlist = {} -- local idList = {1,1} local x = function(isGetBigReward) LingLongBaoJingManager.SetDataListState(idList) local tempData = {} for i = 1,#idList do table.insert(tempData,data[idList[i]]) end self:RefreshTreasureTypeState(0,tempData) UIManager.OpenPanel(UIName.RewardItemPopup,drop,1,function() if isGetBigReward then if LingLongBaoJingManager.IsAllGet() then LingLongBaoJingManager.SetDataListState(nil,1) self:RefreshTreasureTypeState(1) end LingLongBaoJingManager.SetDataListState(nil,2) self:RefreshTreasureTypeState(2) self.itemList[1][data[idList[2]].address].selectKuang.gameObject:SetActive(false) self.itemList[2][data[idList[1]].address].selectKuang.gameObject:SetActive(false) else self.itemList[2][data[idList[1]].address].selectKuang.gameObject:SetActive(false) end self:SetPropShow() self.fx_linglongbaojing_kaiqi.gameObject:SetActive(false) self.itemList[2][1].effect.gameObject:SetActive(false) self.fx_linglongbaojing_longchuxian.gameObject:SetActive(false) for i = 1,#self.itemList[1] do self.itemList[1][i].effect.gameObject:SetActive(false) end end) end curTurnPos = 1 self:SetTableTurnEffect(TableTurnType.Expedite,2,data[idList[1]].address,function() if idList[2] and idList[2] > 0 then --PopupTipPanel.ShowTip("播放一些开门的特效") self.Btncoroutine = coroutine.start(function() self.itemList[2][1].effect.gameObject:SetActive(true) coroutine.wait(0.4) self.fx_linglongbaojing_longchuxian.gameObject:SetActive(true) coroutine.wait(1) self:RefreshTreasureMaskByType(1,false) for i = 1,#self.itemList[1] do self.itemList[1][i].effect.gameObject:SetActive(true) end coroutine.wait(1) curTurnPos = 1 self:SetTableTurnEffect(TableTurnType.Expedite,1,data[idList[2]].address,function() self:RefreshTreasureMaskByType(1,true) x(true) end) end) else x(false) end end) end) end) end ---添加事件监听(用于子类重写) function LingLongBaoJingPanel:AddListener() end ---移除事件监听(用于子类重写) function LingLongBaoJingPanel:RemoveListener() end --界面打开时调用(用于子类重写) function LingLongBaoJingPanel:OnOpen(_activityConfig,_index,parent) self.actConfig = _activityConfig self.pageIndex = _index self.parent = parent end function LingLongBaoJingPanel:OnSortingOrderChange(_sortingOrder) self.sortingOrder = _sortingOrder self:SetLayer() end -- 打开,重新打开时回调 function LingLongBaoJingPanel:OnShow(_sortingOrder) --self.parent.tabbox.gameObject:SetActive(false) self.gameObject:SetActive(true) self.sortingOrder = _sortingOrder self.actId = self.actConfig.ActId self.actType = self.actConfig.ActiveType > 0 and self.actConfig.ActiveType or self.actConfig.FunType if self.actConfig.IfBack == 1 then if self.actConfig.ActiveType > 0 then local id = ActivityGiftManager.IsActivityTypeOpen(self.actConfig.ActiveType) if id and id > 0 then self.actId = id local config = ConfigManager.TryGetConfigDataByThreeKey(ConfigName.ActivityGroups,"PageType",self.actConfig.PageType,"ActiveType",self.actConfig.ActiveType,"ActId",id) if config then self.actConfig = config end end end end self.turnEffect = Timer.New() self:RefreshTreasureType() self:DelayMaskWithTime(0.5) self:SetPropShow() --self:CreatBox() self:SetTime() self:SetLayer() self.fx_linglongbaojing_chuxian.gameObject:SetActive(true) end function LingLongBaoJingPanel:SetLayer() self.firstLayer.overrideSorting = true self.firstLayer.sortingOrder = self.sortingOrder self.secondLayer.overrideSorting = true self.secondLayer.sortingOrder = self.sortingOrder + 1 self.thirtyLayer.overrideSorting = true self.thirtyLayer.sortingOrder = self.sortingOrder + 2 Util.SetParticleSortLayer(self.fx_linglongbaojing_changzhu,self.sortingOrder) Util.SetParticleSortLayer(self.fx_linglongbaojing_long,self.sortingOrder + 2) Util.SetParticleSortLayer(self.fx_linglongbaojing_chuxian,self.sortingOrder + 2) Util.SetParticleSortLayer(self.fx_linglongbaojing_longchuxian,self.sortingOrder + 2) Util.SetParticleSortLayer(self.fx_linglongbaojing_kaiqi,self.sortingOrder + 2) for i = 1,#self.itemList do for j = 1,#self.itemList[i] do if self.itemList[i][j].effect then Util.SetParticleSortLayer(self.itemList[i][j].effect,self.sortingOrder + i) end end end end function LingLongBaoJingPanel:SetTime() if self.timer then self.timer:Stop() self.timer = nil end local time = ActivityGiftManager.GetTaskEndTime(ActivityTypeDef.lingLongBaoJing) local remainTime = time - GetTimeStamp() self.time.text = "活动倒计时:"..TimeToDHMS(remainTime) self.timer = Timer.New(function() remainTime = remainTime - 1 self.time.text = "活动倒计时:"..TimeToDHMS(remainTime) if remainTime <= 0 then self:ClosePanel() end end,1,-1,false) self.timer:Start() end --赋值 function LingLongBaoJingPanel:RefreshTreasureType() data = LingLongBaoJingManager.GetRewardList() for k,v in pairs(data) do if v.typeIndex == 2 and v.address == 1 then else self.itemList[v.typeIndex][v.address].itemView.sprite = Util.LoadSprite(GetSpriteNameByItemId(v.reward[1])) end Util.AddOnceClick(self.itemList[v.typeIndex][v.address].itemPos.gameObject, function() UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,v.reward[1]) end) self:RefreshTreasureTypeState(0,data) end self:RefreshTreasureMaskByType(1,true) self:RefreshTreasureMaskByType(2,false) end --刷新状态 function LingLongBaoJingPanel:RefreshTreasureTypeState(typeIndex,_data) --只重置_data local tempData = {} if typeIndex == 0 then tempData = _data --重置typeIndex对应的圈 else data = LingLongBaoJingManager.GetRewardList() tempData = data end for k,v in pairs(tempData) do if (v.typeIndex == typeIndex) or typeIndex == 0 then if v.state == 0 then self.itemList[v.typeIndex][v.address].get.gameObject:SetActive(false) else self.itemList[v.typeIndex][v.address].get.gameObject:SetActive(true) end end end end --外圈遮罩设置 function LingLongBaoJingPanel:RefreshTreasureMaskByType(typeIndex,value) for k,v in pairs(data) do if v.typeIndex == typeIndex then self.itemList[v.typeIndex][v.address].mask.gameObject:SetActive(value) end end end ---界面关闭时调用(用于子类重写) function LingLongBaoJingPanel:OnClose() --self.parent.tabbox.gameObject:SetActive(true) self.fx_linglongbaojing_chuxian.gameObject:SetActive(false) self.gameObject:SetActive(false) if self.thread then coroutine.stop(self.thread) self.thread=nil end if self.Btncoroutine then coroutine.stop(self.Btncoroutine) self.Btncoroutine=nil end if self.turnEffect then self.turnEffect:Stop() self.turnEffect = nil end if self.timer then self.timer:Stop() self.timer = nil end end ---界面销毁时调用(用于子类重写) function LingLongBaoJingPanel:OnDestroy() self.itemList = {} self.spLoader:Destroy() end ---设置转盘滚动 1旋转类型 2探宝类型 3服务器给的探宝后位置 function LingLongBaoJingPanel:SetTableTurnEffect(turnType,treasureType,pos,func) if turnType==TableTurnType.Normal then --默认旋转 self:TurnEffectReset(0.5,treasureType) self.turnEffect:Start() elseif turnType==TableTurnType.Expedite then --抽奖旋转 至指定位置 self:DelayMaskWithBool(true) self.thread = coroutine.start(function() self:TurnEffectReset(0.05,treasureType) coroutine.wait(2)--2 self:TurnEffectReset(0.2,treasureType) coroutine.wait(0.8)--0.8 self:TurnEffectReset(0.4,treasureType,true,pos,function()--当效果播放完毕后 从管理器取得数据 local timer=Timer.New(function() self:DelayMaskWithBool(false) if func then func() end end,0.5,1,true) timer:Start() end) end) end end ---转盘滚动特效重设 1移动速度,值越小越快 2是否停止 3停止位置 function LingLongBaoJingPanel:TurnEffectReset(turnSpeed,treasureType,isStop,pos,func) self.turnEffect:Reset(function() if curTurnPos > #self.itemList[treasureType] then curTurnPos = 1 end if curTurnPos == 1 then self.itemList[treasureType][#self.itemList[treasureType]].selectKuang.gameObject:SetActive(false) else self.itemList[treasureType][curTurnPos - 1].selectKuang.gameObject:SetActive(false) end self.itemList[treasureType][curTurnPos].selectKuang.gameObject:SetActive(true) if isStop then if pos == curTurnPos then--如果停到对应位置 self.turnEffect:Stop()--暂停跑马灯 if func then--回调 func() end end end curTurnPos = curTurnPos + 1 end,turnSpeed,-1,true) self.turnEffect:Start() end ---设置道具拥有显示 1道具id 2探宝类型 function LingLongBaoJingPanel:SetPropShow() self.propImage.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(self.costId)) local count = BagManager.GetItemCountById(self.costId) local singleCount = (a * 1^3 + b * 1^2 + c * 1 ^1 + d * 1^0) local color if singleCount <= count then self.enough = true color = "FFA000" else self.enough = false color = "FF0000" end self.propText.text = string.format("%s",color,singleCount) end -- function LingLongBaoJingPanel:CreatBox() -- self:RefreshLuckyValue() -- end -- ---刷新幸运值 -- function LingLongBaoJingPanel:RefreshLuckyValue() -- configs = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",self.actId) -- local list = {} -- for k,v in ipairs(configs) do -- table.insert(list,v.Values[1][1]) -- end -- table.sort(list,function(a,b) return a < b end) -- local pos = self:CalutePos1(self.rewardBox,list) -- for i = 1,5 do -- local v3 = self.rewardBoxList[i].go:GetComponent("RectTransform").anchoredPosition3D -- v3.x = pos[i] -- self.rewardBoxList[i].go:GetComponent("RectTransform").anchoredPosition3D = v3 -- self.rewardBoxList[i].value.text = configs[i].Values[1][1] -- self.rewardBoxList[i].redPoint.gameObject:SetActive(false) -- if i < 5 then -- self.rewardBoxList[i].Num.text = configs[i].Reward[1][2] -- self.rewardBoxList[i].icon.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(configs[i].Reward[1][1])) -- end -- end -- self.luckySlider.minValue = 0 -- self.luckySlider.maxValue = configs[#configs].Values[1][1] -- end -- function LingLongBaoJingPanel:CalutePos1(parent,list) -- local pos = {} -- local wi = parent.transform.rect.width -- for i = 1,#list do -- local pos1 = wi *(list[i]/list[#list]) -- table.insert(pos,pos1) -- end -- return pos -- end ---延时遮罩 1按时间 function LingLongBaoJingPanel:DelayMaskWithTime(delayTime) self.mask.gameObject:SetActive(true) local closeMask=Timer.New(function() self.mask.gameObject:SetActive(false) end,delayTime,1,true) closeMask:Start() end ---延时遮罩 1按bool function LingLongBaoJingPanel:DelayMaskWithBool(b) self.mask.gameObject:SetActive(b) end return LingLongBaoJingPanel