| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- local UIWorldBossRewardView = require("UIWorldBoss/UIWorldBossRewardView_Generate")
- local ExecuteSequenceData = require('ExecuteSequenceData')
- local SSR_EFFECT_NAME = 'FX_UI_ChallengeReward_01'
- local SSR_EFFECT_SCALE = Vector3(80, 80, 80)
- local TicketInAnimTime = nil
- local TicketOpenAnimTime = nil
- local IsOpenReward1 = nil
- local IsOpenReward2 = nil
- local IsOpenReward3 = nil
- local RewardType = {
- SSR = 1,
- SR = 2,
- R = 3,
- }
- function UIWorldBossRewardView:OnAwake(data)
- self.controller = require("UIWorldBoss/UIWorldBossRewardCtr"):new()
- self.controller:Init(self)
- self.controller:SetData(data)
- end
- function UIWorldBossRewardView:AddEventListener()
- end
- function UIWorldBossRewardView:FillContent(data, uiBase)
- self.uiBase = uiBase
- local gameObject = self.uiBase:GetRoot()
- if gameObject ~= nil then
- self.gameObject = gameObject
- self.transform = gameObject.transform
- end
- self:InitGenerate(self.transform, data)
- self:Init()
- end
- function UIWorldBossRewardView:Init()
- self.controller:InitData()
- self:InitAnimTime()
- self.clickMask:SetActive(true)
- self.btnBack:SetActive(false)
- self.ticket1.animator.keepAnimatorControllerStateOnDisable = true
- self.ticket2.animator.keepAnimatorControllerStateOnDisable = true
- self.ticket3.animator.keepAnimatorControllerStateOnDisable = true
- self.ticket1.animator:Play('TicketKeep')
- self.ticket2.animator:Play('TicketKeep')
- self.ticket3.animator:Play('TicketKeep')
- self:RefreshRewardList(self.rewardSSR, self.controller:GetWorldBossRewardsByType(RewardType.SSR))
- self:RefreshRewardList(self.rewardSR, self.controller:GetWorldBossRewardsByType(RewardType.SR))
- self:RefreshRewardList(self.rewardR, self.controller:GetWorldBossRewardsByType(RewardType.R))
- self:RefreshVip()
- local hasSSR = false
- local rewardList = self.controller:GetWorldBossRewardList()
- for _, rewardType in pairs(rewardList) do
- if rewardType == RewardType.SSR then
- hasSSR = true
- break
- end
- end
- if hasSSR then
- if not self.ssrEffects then
- if not self.ssrEffectSeqId then
- self.ssrEffectSeqId = ManagerContainer.ResMgr:LuaLoadAssets(Enum.ResourceType.GameObject, Constants.UIEffectPath, {SSR_EFFECT_NAME}, self, self.SSREffectCompleted)
- if ManagerContainer.ResMgr:SeqIdEquals(self.ssrEffectSeqId, 0) then
- self.ssrEffectSeqId = nil
- self:SSREffectCompleted()
- end
- end
- end
- else
- self:DisposeSSREffect()
- end
- end
- function UIWorldBossRewardView:RemoveEventListener()
- ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
- end
- function UIWorldBossRewardView:AddUIEventListener()
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
- self.uiBase:AddButtonUniqueEventListener(self.btnBack.button, self, self.OnClickBtnBack)
- self.uiBase:AddButtonUniqueEventListener(self.ticket1.button, self, self.OnClickBtnTicket, 1)
- self.uiBase:AddButtonUniqueEventListener(self.ticket2.button, self, self.OnClickBtnTicket, 2)
- self.uiBase:AddButtonUniqueEventListener(self.ticket3.button, self, self.OnClickBtnTicket, 3)
- end
- function UIWorldBossRewardView:OnHide()
- end
- function UIWorldBossRewardView:OnShow(data)
- self.controller:SetData(data)
- end
- function UIWorldBossRewardView:OnClose()
- end
- function UIWorldBossRewardView:OnDispose()
- if self.popGotCloseTimer then
- self.popGotCloseTimer:Stop()
- self.popGotCloseTimer = nil
- end
- if self.executeSequenceData then
- ManagerContainer.ExecuteSequenceMgr:Exit(self.executeSequenceData)
- self.executeSequenceData = nil
- end
- self:DisposeSSREffect()
- self.controller:OnDispose()
- end
- function UIWorldBossRewardView:OnPageInEnd()
- self.super.OnPageInEnd(self)
- self.ticket1.animator:Play('TicketIn')
- self.ticket2.animator:Play('TicketIn')
- self.ticket3.animator:Play('TicketIn')
- self:ResetExecuteSequenceData()
- self:SetClickMaskState(true)
- self.executeSequenceData:AppendInterval(TicketInAnimTime)
- self.executeSequenceData:AppendFunc(false, self, self.SetClickMaskState, false)
- ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
- end
- function UIWorldBossRewardView:OnPageOutEnd()
- self.super.OnPageOutEnd(self)
- end
- function UIWorldBossRewardView:InitAnimTime()
- if TicketInAnimTime and TicketOpenAnimTime then
- return
- end
- TicketInAnimTime = 1
- TicketOpenAnimTime = 0.3
- local clips = self.ticket1.animator.runtimeAnimatorController.animationClips
- for i = 0, clips.Length - 1 do
- local clip = clips[i]
- if clip then
- local clipName = clip.name
- if clipName == 'TicketIn' then
- TicketInAnimTime = clip.length
- elseif clipName == 'TicketOpen' then
- TicketOpenAnimTime = clip.length
- end
- end
- end
- end
- function UIWorldBossRewardView:SetClickMaskState(state)
- self.clickMask:SetActive(state)
- end
- function UIWorldBossRewardView:ResetExecuteSequenceData()
- if self.executeSequenceData then
- ManagerContainer.ExecuteSequenceMgr:Exit(self.executeSequenceData)
- self.executeSequenceData:Reset()
- else
- self.executeSequenceData = ExecuteSequenceData:new()
- end
- end
- function UIWorldBossRewardView:RefreshRewardList(listLua, datas)
- if not listLua then return end
- if datas and type(datas[1]) == 'number' then
- datas = {datas}
- end
- local data
- for i = 1, 4 do
- local itemlua = listLua['iconSmallItem' .. i]
- data = datas and datas[i] or nil
- if data then
- itemlua:SetActive(true)
- CommonUtil.UpdateItemPrefab(self, itemlua, data, Enum.ItemIEnterType.Bag, self, self.ShowItemTips)
- else
- itemlua:SetActive(false)
- end
- end
- end
- function UIWorldBossRewardView:ShowItemTips(button, params)
- local data = params[0]
- ManagerContainer.LuaUIMgr:OpenTips(data)
- end
- function UIWorldBossRewardView:OnClickBtnBack()
- self:UIClose(self)
- end
- function UIWorldBossRewardView:OnClickBtnTicket(_, params)
- local rewardType = self.controller:GetCurVaildRewardType()
- if not rewardType then return end
- local id = params[0]
- if id == 1 then
- if IsOpenReward1 then return end
- IsOpenReward1 = true
- self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
- self.ticket1.animator:Play('TicketOpen')
- self:RefreshTicketView(self.ticket1, rewardType)
- self:ResetExecuteSequenceData()
- self:SetClickMaskState(true)
- self.executeSequenceData:AppendInterval(TicketOpenAnimTime)
- self.executeSequenceData:AppendFunc(false, self, self.OpenPopGotView, rewardType)
- self.executeSequenceData:AppendUIListener(Enum.UIPageName.UIPOPGot, UIEventNames.UI_PAGE_OUT_END_NTF)
- self.executeSequenceData:AppendFunc(false, self, self.RewardShowComplete)
- ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
- elseif id == 2 then
- if IsOpenReward2 then return end
- IsOpenReward2 = true
- self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
- self.ticket2.animator:Play('TicketOpen')
- self:RefreshTicketView(self.ticket2, rewardType)
- self:ResetExecuteSequenceData()
- self:SetClickMaskState(true)
- self.executeSequenceData:AppendInterval(TicketOpenAnimTime)
- self.executeSequenceData:AppendFunc(false, self, self.OpenPopGotView, rewardType)
- self.executeSequenceData:AppendUIListener(Enum.UIPageName.UIPOPGot, UIEventNames.UI_PAGE_OUT_END_NTF)
- self.executeSequenceData:AppendFunc(false, self, self.RewardShowComplete)
- ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
- elseif id == 3 then
- if IsOpenReward3 then return end
- IsOpenReward3 = true
- self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
- self.ticket3.animator:Play('TicketOpen')
- self:RefreshTicketView(self.ticket3, rewardType)
- self:ResetExecuteSequenceData()
- self:SetClickMaskState(true)
- self.executeSequenceData:AppendInterval(TicketOpenAnimTime)
- self.executeSequenceData:AppendFunc(false, self, self.OpenPopGotView, rewardType)
- self.executeSequenceData:AppendUIListener(Enum.UIPageName.UIPOPGot, UIEventNames.UI_PAGE_OUT_END_NTF)
- self.executeSequenceData:AppendFunc(false, self, self.RewardShowComplete)
- ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
- end
- end
- function UIWorldBossRewardView:OpenPopGotView(rewardType)
- ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot, {rewards = self.controller:GetWorldBossRewardsByType(rewardType)})
- if self.popGotCloseTimer then
- self.popGotCloseTimer.time = 3
- self.popGotCloseTimer.loop = 1
- else
- self.popGotCloseTimer = Timer.New(function()
- if ManagerContainer.LuaUIMgr:HasOpenPage(Enum.UIPageName.UITips) then
- ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UITips)
- end
- ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIPOPGot)
- end, 3)
- end
- if not self.popGotCloseTimer.running then
- self.popGotCloseTimer:Start()
- end
- end
- function UIWorldBossRewardView:RewardShowComplete()
- self:SetClickMaskState(false)
- if self.popGotCloseTimer then
- self.popGotCloseTimer:Stop()
- end
- local hasNext = self.controller:OffsetNextVaildRewardType()
- if not hasNext then
- self:RefreshOpenNum(nil)
- end
- self.btnBack:SetActive(not hasNext)
- end
- function UIWorldBossRewardView:RefreshTicketView(ticket, rewardType)
- ticket.sSR:SetActive(rewardType == RewardType.SSR)
- ticket.sR:SetActive(rewardType == RewardType.SR)
- ticket.r:SetActive(rewardType == RewardType.R)
- end
- function UIWorldBossRewardView:RefreshVip()
- -- local vipCfg = self.controller:GetVipCfg()
- -- if vipCfg and vipCfg.Lv > 0 then
- -- self.noVip:SetActive(false)
- -- self.vip:SetActive(true)
- -- self.vip.icon.image.enabled = false
- -- self.vip.icon.image.sprite = nil
- -- CommonUtil.LoadIcon(self, vipCfg.SmallIcon, function(sprite)
- -- if sprite then
- -- self.vip.icon.image.enabled = true
- -- self.vip.icon.image.sprite = sprite
- -- end
- -- end)
- -- else
- -- self.noVip:SetActive(true)
- -- self.vip:SetActive(false)
- -- end
- -- self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
- self.noVip:SetActive(false)
- self.vip:SetActive(false)
- end
- function UIWorldBossRewardView:RefreshOpenNum(openNum)
- -- if not openNum then
- -- self.noVip:SetActive(false)
- -- self.vip:SetActive(false)
- -- return
- -- end
- -- self.noVip.timeTxt.text.text = string.formatbykey('WorldBossDraw', tostring(openNum))
- -- self.vip.timeTxt.text.text = string.formatbykey('WorldBossDraw', tostring(openNum))
- end
- function UIWorldBossRewardView:SSREffectCompleted()
- self.ssrEffectSeqId = nil
- local ssrEffect = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIEffectPath, SSR_EFFECT_NAME)
- if not ssrEffect then
- return
- end
- if not self.ssrEffects then
- self.ssrEffects = {}
- end
- ssrEffect.transform:SetParent(self.ticket1.effect.transform)
- ssrEffect.transform.localPosition = Vector3.zero
- ssrEffect.transform.localRotation = Quaternion.identity
- ssrEffect.transform.localScale = SSR_EFFECT_SCALE
- ssrEffect:SetActive(true)
- self.ssrEffects[#self.ssrEffects + 1] = ssrEffect
- ssrEffect = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIEffectPath, SSR_EFFECT_NAME)
- if not ssrEffect then
- return
- end
- ssrEffect.transform:SetParent(self.ticket2.effect.transform)
- ssrEffect.transform.localPosition = Vector3.zero
- ssrEffect.transform.localRotation = Quaternion.identity
- ssrEffect.transform.localScale = SSR_EFFECT_SCALE
- ssrEffect:SetActive(true)
- self.ssrEffects[#self.ssrEffects + 1] = ssrEffect
- ssrEffect = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIEffectPath, SSR_EFFECT_NAME)
- if not ssrEffect then
- return
- end
- ssrEffect.transform:SetParent(self.ticket3.effect.transform)
- ssrEffect.transform.localPosition = Vector3.zero
- ssrEffect.transform.localRotation = Quaternion.identity
- ssrEffect.transform.localScale = SSR_EFFECT_SCALE
- ssrEffect:SetActive(true)
- self.ssrEffects[#self.ssrEffects + 1] = ssrEffect
- end
- function UIWorldBossRewardView:DisposeSSREffect()
- if self.ssrEffectSeqId then
- ManagerContainer.ResMgr:UnloadAssetBySeqId(self.ssrEffectSeqId)
- self.ssrEffectSeqId = nil
- end
- if self.ssrEffects then
- for _, ssrEffect in pairs(self.ssrEffects) do
- if ssrEffect then
- ssrEffect.transform.localScale = Vector3.one
- ManagerContainer.ResMgr:RecycleGO(Constants.UIEffectPath, SSR_EFFECT_NAME, ssrEffect.gameObject)
- end
- end
- self.ssrEffects = nil
- end
- end
- return UIWorldBossRewardView
|