UIWorldBossRewardView.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. local UIWorldBossRewardView = require("UIWorldBoss/UIWorldBossRewardView_Generate")
  2. local ExecuteSequenceData = require('ExecuteSequenceData')
  3. local SSR_EFFECT_NAME = 'FX_UI_ChallengeReward_01'
  4. local SSR_EFFECT_SCALE = Vector3(80, 80, 80)
  5. local TicketInAnimTime = nil
  6. local TicketOpenAnimTime = nil
  7. local IsOpenReward1 = nil
  8. local IsOpenReward2 = nil
  9. local IsOpenReward3 = nil
  10. local RewardType = {
  11. SSR = 1,
  12. SR = 2,
  13. R = 3,
  14. }
  15. function UIWorldBossRewardView:OnAwake(data)
  16. self.controller = require("UIWorldBoss/UIWorldBossRewardCtr"):new()
  17. self.controller:Init(self)
  18. self.controller:SetData(data)
  19. end
  20. function UIWorldBossRewardView:AddEventListener()
  21. end
  22. function UIWorldBossRewardView:FillContent(data, uiBase)
  23. self.uiBase = uiBase
  24. local gameObject = self.uiBase:GetRoot()
  25. if gameObject ~= nil then
  26. self.gameObject = gameObject
  27. self.transform = gameObject.transform
  28. end
  29. self:InitGenerate(self.transform, data)
  30. self:Init()
  31. end
  32. function UIWorldBossRewardView:Init()
  33. self.controller:InitData()
  34. self:InitAnimTime()
  35. self.clickMask:SetActive(true)
  36. self.btnBack:SetActive(false)
  37. self.ticket1.animator.keepAnimatorControllerStateOnDisable = true
  38. self.ticket2.animator.keepAnimatorControllerStateOnDisable = true
  39. self.ticket3.animator.keepAnimatorControllerStateOnDisable = true
  40. self.ticket1.animator:Play('TicketKeep')
  41. self.ticket2.animator:Play('TicketKeep')
  42. self.ticket3.animator:Play('TicketKeep')
  43. self:RefreshRewardList(self.rewardSSR, self.controller:GetWorldBossRewardsByType(RewardType.SSR))
  44. self:RefreshRewardList(self.rewardSR, self.controller:GetWorldBossRewardsByType(RewardType.SR))
  45. self:RefreshRewardList(self.rewardR, self.controller:GetWorldBossRewardsByType(RewardType.R))
  46. self:RefreshVip()
  47. local hasSSR = false
  48. local rewardList = self.controller:GetWorldBossRewardList()
  49. for _, rewardType in pairs(rewardList) do
  50. if rewardType == RewardType.SSR then
  51. hasSSR = true
  52. break
  53. end
  54. end
  55. if hasSSR then
  56. if not self.ssrEffects then
  57. if not self.ssrEffectSeqId then
  58. self.ssrEffectSeqId = ManagerContainer.ResMgr:LuaLoadAssets(Enum.ResourceType.GameObject, Constants.UIEffectPath, {SSR_EFFECT_NAME}, self, self.SSREffectCompleted)
  59. if ManagerContainer.ResMgr:SeqIdEquals(self.ssrEffectSeqId, 0) then
  60. self.ssrEffectSeqId = nil
  61. self:SSREffectCompleted()
  62. end
  63. end
  64. end
  65. else
  66. self:DisposeSSREffect()
  67. end
  68. end
  69. function UIWorldBossRewardView:RemoveEventListener()
  70. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  71. end
  72. function UIWorldBossRewardView:AddUIEventListener()
  73. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  74. self.uiBase:AddButtonUniqueEventListener(self.btnBack.button, self, self.OnClickBtnBack)
  75. self.uiBase:AddButtonUniqueEventListener(self.ticket1.button, self, self.OnClickBtnTicket, 1)
  76. self.uiBase:AddButtonUniqueEventListener(self.ticket2.button, self, self.OnClickBtnTicket, 2)
  77. self.uiBase:AddButtonUniqueEventListener(self.ticket3.button, self, self.OnClickBtnTicket, 3)
  78. end
  79. function UIWorldBossRewardView:OnHide()
  80. end
  81. function UIWorldBossRewardView:OnShow(data)
  82. self.controller:SetData(data)
  83. end
  84. function UIWorldBossRewardView:OnClose()
  85. end
  86. function UIWorldBossRewardView:OnDispose()
  87. if self.popGotCloseTimer then
  88. self.popGotCloseTimer:Stop()
  89. self.popGotCloseTimer = nil
  90. end
  91. if self.executeSequenceData then
  92. ManagerContainer.ExecuteSequenceMgr:Exit(self.executeSequenceData)
  93. self.executeSequenceData = nil
  94. end
  95. self:DisposeSSREffect()
  96. self.controller:OnDispose()
  97. end
  98. function UIWorldBossRewardView:OnPageInEnd()
  99. self.super.OnPageInEnd(self)
  100. self.ticket1.animator:Play('TicketIn')
  101. self.ticket2.animator:Play('TicketIn')
  102. self.ticket3.animator:Play('TicketIn')
  103. self:ResetExecuteSequenceData()
  104. self:SetClickMaskState(true)
  105. self.executeSequenceData:AppendInterval(TicketInAnimTime)
  106. self.executeSequenceData:AppendFunc(false, self, self.SetClickMaskState, false)
  107. ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
  108. end
  109. function UIWorldBossRewardView:OnPageOutEnd()
  110. self.super.OnPageOutEnd(self)
  111. end
  112. function UIWorldBossRewardView:InitAnimTime()
  113. if TicketInAnimTime and TicketOpenAnimTime then
  114. return
  115. end
  116. TicketInAnimTime = 1
  117. TicketOpenAnimTime = 0.3
  118. local clips = self.ticket1.animator.runtimeAnimatorController.animationClips
  119. for i = 0, clips.Length - 1 do
  120. local clip = clips[i]
  121. if clip then
  122. local clipName = clip.name
  123. if clipName == 'TicketIn' then
  124. TicketInAnimTime = clip.length
  125. elseif clipName == 'TicketOpen' then
  126. TicketOpenAnimTime = clip.length
  127. end
  128. end
  129. end
  130. end
  131. function UIWorldBossRewardView:SetClickMaskState(state)
  132. self.clickMask:SetActive(state)
  133. end
  134. function UIWorldBossRewardView:ResetExecuteSequenceData()
  135. if self.executeSequenceData then
  136. ManagerContainer.ExecuteSequenceMgr:Exit(self.executeSequenceData)
  137. self.executeSequenceData:Reset()
  138. else
  139. self.executeSequenceData = ExecuteSequenceData:new()
  140. end
  141. end
  142. function UIWorldBossRewardView:RefreshRewardList(listLua, datas)
  143. if not listLua then return end
  144. if datas and type(datas[1]) == 'number' then
  145. datas = {datas}
  146. end
  147. local data
  148. for i = 1, 4 do
  149. local itemlua = listLua['iconSmallItem' .. i]
  150. data = datas and datas[i] or nil
  151. if data then
  152. itemlua:SetActive(true)
  153. CommonUtil.UpdateItemPrefab(self, itemlua, data, Enum.ItemIEnterType.Bag, self, self.ShowItemTips)
  154. else
  155. itemlua:SetActive(false)
  156. end
  157. end
  158. end
  159. function UIWorldBossRewardView:ShowItemTips(button, params)
  160. local data = params[0]
  161. ManagerContainer.LuaUIMgr:OpenTips(data)
  162. end
  163. function UIWorldBossRewardView:OnClickBtnBack()
  164. self:UIClose(self)
  165. end
  166. function UIWorldBossRewardView:OnClickBtnTicket(_, params)
  167. local rewardType = self.controller:GetCurVaildRewardType()
  168. if not rewardType then return end
  169. local id = params[0]
  170. if id == 1 then
  171. if IsOpenReward1 then return end
  172. IsOpenReward1 = true
  173. self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
  174. self.ticket1.animator:Play('TicketOpen')
  175. self:RefreshTicketView(self.ticket1, rewardType)
  176. self:ResetExecuteSequenceData()
  177. self:SetClickMaskState(true)
  178. self.executeSequenceData:AppendInterval(TicketOpenAnimTime)
  179. self.executeSequenceData:AppendFunc(false, self, self.OpenPopGotView, rewardType)
  180. self.executeSequenceData:AppendUIListener(Enum.UIPageName.UIPOPGot, UIEventNames.UI_PAGE_OUT_END_NTF)
  181. self.executeSequenceData:AppendFunc(false, self, self.RewardShowComplete)
  182. ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
  183. elseif id == 2 then
  184. if IsOpenReward2 then return end
  185. IsOpenReward2 = true
  186. self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
  187. self.ticket2.animator:Play('TicketOpen')
  188. self:RefreshTicketView(self.ticket2, rewardType)
  189. self:ResetExecuteSequenceData()
  190. self:SetClickMaskState(true)
  191. self.executeSequenceData:AppendInterval(TicketOpenAnimTime)
  192. self.executeSequenceData:AppendFunc(false, self, self.OpenPopGotView, rewardType)
  193. self.executeSequenceData:AppendUIListener(Enum.UIPageName.UIPOPGot, UIEventNames.UI_PAGE_OUT_END_NTF)
  194. self.executeSequenceData:AppendFunc(false, self, self.RewardShowComplete)
  195. ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
  196. elseif id == 3 then
  197. if IsOpenReward3 then return end
  198. IsOpenReward3 = true
  199. self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
  200. self.ticket3.animator:Play('TicketOpen')
  201. self:RefreshTicketView(self.ticket3, rewardType)
  202. self:ResetExecuteSequenceData()
  203. self:SetClickMaskState(true)
  204. self.executeSequenceData:AppendInterval(TicketOpenAnimTime)
  205. self.executeSequenceData:AppendFunc(false, self, self.OpenPopGotView, rewardType)
  206. self.executeSequenceData:AppendUIListener(Enum.UIPageName.UIPOPGot, UIEventNames.UI_PAGE_OUT_END_NTF)
  207. self.executeSequenceData:AppendFunc(false, self, self.RewardShowComplete)
  208. ManagerContainer.ExecuteSequenceMgr:Execute(self.executeSequenceData)
  209. end
  210. end
  211. function UIWorldBossRewardView:OpenPopGotView(rewardType)
  212. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot, {rewards = self.controller:GetWorldBossRewardsByType(rewardType)})
  213. if self.popGotCloseTimer then
  214. self.popGotCloseTimer.time = 3
  215. self.popGotCloseTimer.loop = 1
  216. else
  217. self.popGotCloseTimer = Timer.New(function()
  218. if ManagerContainer.LuaUIMgr:HasOpenPage(Enum.UIPageName.UITips) then
  219. ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UITips)
  220. end
  221. ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIPOPGot)
  222. end, 3)
  223. end
  224. if not self.popGotCloseTimer.running then
  225. self.popGotCloseTimer:Start()
  226. end
  227. end
  228. function UIWorldBossRewardView:RewardShowComplete()
  229. self:SetClickMaskState(false)
  230. if self.popGotCloseTimer then
  231. self.popGotCloseTimer:Stop()
  232. end
  233. local hasNext = self.controller:OffsetNextVaildRewardType()
  234. if not hasNext then
  235. self:RefreshOpenNum(nil)
  236. end
  237. self.btnBack:SetActive(not hasNext)
  238. end
  239. function UIWorldBossRewardView:RefreshTicketView(ticket, rewardType)
  240. ticket.sSR:SetActive(rewardType == RewardType.SSR)
  241. ticket.sR:SetActive(rewardType == RewardType.SR)
  242. ticket.r:SetActive(rewardType == RewardType.R)
  243. end
  244. function UIWorldBossRewardView:RefreshVip()
  245. -- local vipCfg = self.controller:GetVipCfg()
  246. -- if vipCfg and vipCfg.Lv > 0 then
  247. -- self.noVip:SetActive(false)
  248. -- self.vip:SetActive(true)
  249. -- self.vip.icon.image.enabled = false
  250. -- self.vip.icon.image.sprite = nil
  251. -- CommonUtil.LoadIcon(self, vipCfg.SmallIcon, function(sprite)
  252. -- if sprite then
  253. -- self.vip.icon.image.enabled = true
  254. -- self.vip.icon.image.sprite = sprite
  255. -- end
  256. -- end)
  257. -- else
  258. -- self.noVip:SetActive(true)
  259. -- self.vip:SetActive(false)
  260. -- end
  261. -- self:RefreshOpenNum(self.controller:GetWorldBossRemainNum())
  262. self.noVip:SetActive(false)
  263. self.vip:SetActive(false)
  264. end
  265. function UIWorldBossRewardView:RefreshOpenNum(openNum)
  266. -- if not openNum then
  267. -- self.noVip:SetActive(false)
  268. -- self.vip:SetActive(false)
  269. -- return
  270. -- end
  271. -- self.noVip.timeTxt.text.text = string.formatbykey('WorldBossDraw', tostring(openNum))
  272. -- self.vip.timeTxt.text.text = string.formatbykey('WorldBossDraw', tostring(openNum))
  273. end
  274. function UIWorldBossRewardView:SSREffectCompleted()
  275. self.ssrEffectSeqId = nil
  276. local ssrEffect = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIEffectPath, SSR_EFFECT_NAME)
  277. if not ssrEffect then
  278. return
  279. end
  280. if not self.ssrEffects then
  281. self.ssrEffects = {}
  282. end
  283. ssrEffect.transform:SetParent(self.ticket1.effect.transform)
  284. ssrEffect.transform.localPosition = Vector3.zero
  285. ssrEffect.transform.localRotation = Quaternion.identity
  286. ssrEffect.transform.localScale = SSR_EFFECT_SCALE
  287. ssrEffect:SetActive(true)
  288. self.ssrEffects[#self.ssrEffects + 1] = ssrEffect
  289. ssrEffect = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIEffectPath, SSR_EFFECT_NAME)
  290. if not ssrEffect then
  291. return
  292. end
  293. ssrEffect.transform:SetParent(self.ticket2.effect.transform)
  294. ssrEffect.transform.localPosition = Vector3.zero
  295. ssrEffect.transform.localRotation = Quaternion.identity
  296. ssrEffect.transform.localScale = SSR_EFFECT_SCALE
  297. ssrEffect:SetActive(true)
  298. self.ssrEffects[#self.ssrEffects + 1] = ssrEffect
  299. ssrEffect = ManagerContainer.ResMgr:GetGoFromPool(Constants.UIEffectPath, SSR_EFFECT_NAME)
  300. if not ssrEffect then
  301. return
  302. end
  303. ssrEffect.transform:SetParent(self.ticket3.effect.transform)
  304. ssrEffect.transform.localPosition = Vector3.zero
  305. ssrEffect.transform.localRotation = Quaternion.identity
  306. ssrEffect.transform.localScale = SSR_EFFECT_SCALE
  307. ssrEffect:SetActive(true)
  308. self.ssrEffects[#self.ssrEffects + 1] = ssrEffect
  309. end
  310. function UIWorldBossRewardView:DisposeSSREffect()
  311. if self.ssrEffectSeqId then
  312. ManagerContainer.ResMgr:UnloadAssetBySeqId(self.ssrEffectSeqId)
  313. self.ssrEffectSeqId = nil
  314. end
  315. if self.ssrEffects then
  316. for _, ssrEffect in pairs(self.ssrEffects) do
  317. if ssrEffect then
  318. ssrEffect.transform.localScale = Vector3.one
  319. ManagerContainer.ResMgr:RecycleGO(Constants.UIEffectPath, SSR_EFFECT_NAME, ssrEffect.gameObject)
  320. end
  321. end
  322. self.ssrEffects = nil
  323. end
  324. end
  325. return UIWorldBossRewardView