UISeasonIdolView.lua 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. local UISeasonIdolView = require("UISeason/UISeasonIdolView_Generate")
  2. local UIIdolRankItemCtr = require("Common/UIIdolRankItemCtr")
  3. local IconItemCtr = require("Common/IconItemCtr")
  4. local PreviewSystem = require "PreviewSystem"
  5. local RoleViewSystem = require "RoleViewSystem"
  6. local CreateActorSystem = require("CreateActorSystem")
  7. function UISeasonIdolView:OnAwake(data)
  8. self.controller = require("UISeason/UISeasonIdolCtr"):new()
  9. self.controller:Init(self)
  10. self.controller:SetData(data)
  11. end
  12. function UISeasonIdolView:AddEventListener()
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  14. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.REFRESH_DAYS_REWARD_INFO, self, self.InitReward)
  15. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.REFRESH_RANK_MODEL_INFO, self, self.InitModel)
  16. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.REFRESH_VOTE_VIEW_INFO, self, self.InitUI)
  17. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.ITEM_CHANGE, self, self.RefreshItem)
  18. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.REFRESH_SUPPORTTIPSVIEW, self, self.OnOpenSupportTips)
  19. end
  20. function UISeasonIdolView:FillContent(data, uiBase)
  21. self.uiBase = uiBase
  22. local gameObject = self.uiBase:GetRoot()
  23. if gameObject ~= nil then
  24. self.gameObject = gameObject
  25. self.transform = gameObject.transform
  26. end
  27. self:InitGenerate(self.transform, data)
  28. self:Init()
  29. end
  30. function UISeasonIdolView:Init()
  31. ManagerContainer.DataMgr.CompetitionData:SetUIJumpState(1) --设置UI平级界面状态
  32. ManagerContainer.DataMgr.IdolData:ClearVoteInfoUid()
  33. self:InitUI()
  34. self:InitRewardUI()
  35. self:InitReward()
  36. self:InitModel()
  37. end
  38. function UISeasonIdolView:InitRewardUI()
  39. local data = GlobalConfig.Instance:GetConfigStrValue(344)
  40. local list = CommonUtil.DeserializeGlobalStrToTable(data)
  41. if not self.rewardCfgData then
  42. self.rewardCfgData = {}
  43. end
  44. if list and #list > 0 then
  45. for i = 1, #list do
  46. if list[i] and #list[i] >= 9 then
  47. table.insert(self.rewardCfgData,{tonumber(list[i][8]),tonumber(list[i][9])})
  48. local data = {cfgId = self.rewardCfgData[i][1],num = self.rewardCfgData[i][2]}
  49. IconItemCtr:SetData(self, self["rewards"..i].iconSmallItem, data)
  50. local timerTxt = list[i][2]..":"..list[i][3].."-"..list[i][5]..":"..list[i][6]
  51. self["rewards"..i].timetext.text.text = timerTxt
  52. end
  53. end
  54. end
  55. end
  56. function UISeasonIdolView:OnOpenSupportTips(data)
  57. local voteInfoUid = ManagerContainer.DataMgr.IdolData:GetVoteInfoUid()
  58. if not voteInfoUid then
  59. return
  60. end
  61. ManagerContainer.DataMgr.IdolData:ClearVoteInfoUid()
  62. local cfgId = 238
  63. local maxNum = CommonUtil.GetOwnResCountByItemId(cfgId)
  64. local logicData = {rank = data.rank,score = data.score, uid = data.uid,enterType = 2}
  65. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIIdolSupportTips,{cfgId,self,self.OnSureSupport,logicData,maxNum})
  66. end
  67. function UISeasonIdolView:RefreshItem()
  68. local num = CommonUtil.GetOwnResCountByItemId(238) --荧光棒
  69. self.glowstick.number.text.text = CommonUtil.FormatNumber(num)
  70. end
  71. function UISeasonIdolView:InitUI()
  72. local num = CommonUtil.GetOwnResCountByItemId(238) --荧光棒
  73. self.glowstick.number.text.text = CommonUtil.FormatNumber(num)
  74. local selfTicket = ManagerContainer.DataMgr.CompetitionData:GetScore()
  75. local selfRank = ManagerContainer.DataMgr.CompetitionData:GetRank()
  76. local logicData = {rank = selfRank,score = selfTicket, uid = ManagerContainer.DataMgr.UserData:GetUserId(),enterType = 1}
  77. UIIdolRankItemCtr:SetData(self, self.selfRankItem, logicData,nil,self, self.OnClickSupportBtn)
  78. local redState = ManagerContainer.DataMgr.IdolData:GetRedState()
  79. self.btnIdolGift.giftShow:SetActive(redState)
  80. end
  81. function UISeasonIdolView:InitModel()
  82. if not self.roleSystemMap then
  83. self.roleSystemMap = {}
  84. end
  85. if not self.previewSystemMap then
  86. self.previewSystemMap = {}
  87. end
  88. local data = ManagerContainer.DataMgr.IdolData:GetShowDataList()
  89. for i = 1, 3 do
  90. local instanceId = self["playerNode"..i].gameObject:GetInstanceID()
  91. if data[i] then
  92. self["playerNode"..i].roleModel:SetActive(true)
  93. self["playerNode"..i].pos:SetActive(false)
  94. self["playerNode"..i].btnSupport.button.interactable = true
  95. CommonUtil.SetTotalChildrenGray(self["playerNode"..i].btnSupport,false)
  96. if not self.roleSystemMap[instanceId] then
  97. self.roleSystemMap[instanceId] = RoleViewSystem:new()
  98. end
  99. if not self.previewSystemMap[instanceId] then
  100. self.previewSystemMap[instanceId] = PreviewSystem:new("Preview", 256, 256)
  101. self.previewSystemMap[instanceId]:SetView(Vector3(-0.116, 1.649, 2.5), Quaternion.Euler(12.174, -182.628, 0.085))
  102. end
  103. self.roleSystemMap[instanceId]:CancelCreate()
  104. self.previewSystemMap[instanceId]:RemoveAllGo()
  105. self.roleSystemMap[instanceId]:SetHeroId(instanceId)
  106. self:RefreshRoleView(self.roleSystemMap[instanceId],data[i].roleCfgId, data[i].viewData, data[i].extGoesShowData)
  107. self["playerNode"..i].roleModel.rawImage.texture = self.previewSystemMap[instanceId]:GetRenderTexture()
  108. self["playerNode"..i].nametext.text.text = data[i].nickName
  109. self["playerNode"..i].hotVal.text.text = data[i].vote_list.score
  110. local logicData = {rank = i,score = data[i].vote_list.score, uid = data[i].vote_list.uid,enterType = 0}
  111. self.uiBase:AddButtonUniqueEventListener(self["playerNode"..i].btnSupport.button, self, self.OnClickSupportBtn,logicData)
  112. else
  113. self["playerNode"..i].roleModel:SetActive(false)
  114. self["playerNode"..i].pos:SetActive(true)
  115. self["playerNode"..i].nametext.text.text = I18N.SetLanguageValue('NoneRank')
  116. self["playerNode"..i].hotVal.text.text = I18N.SetLanguageValue('Nohot')
  117. self["playerNode"..i].btnSupport.button.interactable = false
  118. CommonUtil.SetTotalChildrenGray(self["playerNode"..i].btnSupport,true)
  119. end
  120. end
  121. end
  122. function UISeasonIdolView:RefreshRoleView(roleViewSystem,roleId,viewData,extGoesShowData)
  123. roleViewSystem:RefreshView(Enum.RoleInEnvType.RoleMainView, roleId, viewData, extGoesShowData, self, self.LoadModelCB)
  124. end
  125. function UISeasonIdolView:LoadModelCB(go, result, instanceId)
  126. if not go then return end
  127. if self.previewSystemMap[instanceId] and go ~= nil then
  128. go.name = instanceId
  129. self.previewSystemMap[instanceId]:UpdateGo(go)
  130. end
  131. go:SetActive(true)
  132. end
  133. function UISeasonIdolView:InitReward()
  134. local timeList = ManagerContainer.DataMgr.IdolData:GetRewardsTimeList()
  135. if not timeList then
  136. return
  137. end
  138. local curTimer = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  139. for i = 1, #timeList do
  140. local startTime = timeList[i][1]
  141. local endTime = timeList[i][2]
  142. local state = timeList[i][3]
  143. if state then
  144. self["rewards"..i].idolRewardsAnim.animator:Play("IdolRewardsReceived")
  145. else
  146. if curTimer >= startTime and curTimer <= endTime then
  147. self["rewards"..i].idolRewardsAnim.animator:Play("IdolRewardsAvailable")
  148. elseif curTimer > endTime then
  149. self["rewards"..i].idolRewardsAnim.animator:Play("IdolRewardsOverdue")
  150. end
  151. end
  152. end
  153. local endTime = timeList[2][2]
  154. if curTimer >= endTime then
  155. if self.updateTimer then
  156. self.updateTimer:Stop()
  157. self.updateTimer = nil
  158. end
  159. else
  160. self:SetUpdateTimer()
  161. end
  162. end
  163. function UISeasonIdolView:SetUpdateTimer()
  164. if self.updateTimer then
  165. self.updateTimer:Stop()
  166. self.updateTimer = nil
  167. end
  168. if not self.updateTimer then
  169. self.updateTimer = Timer.New(slot(self.InitReward, self), 60, -1)
  170. end
  171. if not self.updateTimer.running then
  172. self.updateTimer:Start()
  173. end
  174. end
  175. function UISeasonIdolView:OnClickOtherHeadBtn(button,params)
  176. local uid = params[0]
  177. local selfUid = ManagerContainer.DataMgr.UserData:GetUserId()
  178. if selfUid == uid then
  179. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ChatError1")
  180. return
  181. end
  182. ManagerContainer.LuaUIMgr:OpenRoleMessagePanel(uid)
  183. end
  184. function UISeasonIdolView:OnSeasonViewOpen()
  185. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  186. if not IsOver then
  187. ManagerContainer.DataMgr.CompetitionData:SetUIJumpState(0)
  188. ManagerContainer.DataMgr.CompetitionData:QueryCurCompetitionReq()
  189. else
  190. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  191. end
  192. self:OnClickCloseBtn()
  193. end
  194. function UISeasonIdolView:OnClickCloseBtn()
  195. ManagerContainer.LuaUIMgr:ClosePage(self.uiBase.PageId)
  196. if self.uiBase.MSourceUIID > 0 then
  197. ManagerContainer.LuaUIMgr:Open(self.uiBase.MSourceUIID)
  198. end
  199. end
  200. function UISeasonIdolView:RemoveEventListener()
  201. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  202. end
  203. function UISeasonIdolView:OnClickPlayRuleBtn()
  204. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', "AidouluSeasonPlayExplain"})
  205. end
  206. function UISeasonIdolView:OnClickSupportBtn(btn,param)
  207. if not ManagerContainer.DataMgr.CompetitionData:CanOpenSeasonUI() then
  208. return
  209. end
  210. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  211. if IsOver then
  212. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  213. return
  214. end
  215. local logicData = param[0]
  216. local uid = logicData.uid
  217. local cfgId = 238 --荧光棒
  218. local selfId = ManagerContainer.DataMgr.UserData:GetUserId()
  219. local maxNum = CommonUtil.GetOwnResCountByItemId(238)
  220. if uid == selfId then
  221. local selfTicket = ManagerContainer.DataMgr.CompetitionData:GetScore()
  222. local selfRank = ManagerContainer.DataMgr.CompetitionData:GetRank()
  223. local data = {rank = selfRank,score = selfTicket, uid = ManagerContainer.DataMgr.UserData:GetUserId(),enterType = 1}
  224. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIIdolSupportTips,{cfgId,self,self.OnSureSupport,data,maxNum})
  225. else
  226. ManagerContainer.DataMgr.IdolData:SendGetPlayerVoteRankReq(uid)
  227. end
  228. end
  229. function UISeasonIdolView:OnClickBuyBtn()
  230. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIShop, 1, self.uiData.id)
  231. end
  232. function UISeasonIdolView:OnSureSupport(logicData) --确认投票
  233. if not ManagerContainer.DataMgr.CompetitionData:CanOpenSeasonUI() then
  234. return
  235. end
  236. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  237. if IsOver then
  238. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  239. return
  240. end
  241. local num = logicData[1]
  242. local uid = logicData[2]
  243. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_ON_VOTE_REQ, { ticket_count = num,uid = uid})
  244. end
  245. function UISeasonIdolView:OnClickIdolFansBtn()
  246. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  247. if not IsOver then
  248. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIIdolMyFansTips)
  249. else
  250. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  251. end
  252. end
  253. function UISeasonIdolView:OnClickIdolGiftBtn()
  254. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  255. if not IsOver then
  256. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIIdolGiftTips)
  257. ManagerContainer.DataMgr.IdolData:SetRedState(false)
  258. self.btnIdolGift.giftShow:SetActive(false)
  259. else
  260. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  261. end
  262. end
  263. function UISeasonIdolView:OnClickIdolRankBtn()
  264. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  265. if not IsOver then
  266. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIIdolRank)
  267. else
  268. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  269. end
  270. end
  271. function UISeasonIdolView:OnClickIdolShopBtn()
  272. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  273. if not IsOver then
  274. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIIdolActivityShop)
  275. else
  276. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  277. end
  278. end
  279. function UISeasonIdolView:OnClickIOnlineRewardsBtn(btn,param)
  280. if not ManagerContainer.DataMgr.CompetitionData:CanOpenSeasonUI() then
  281. return
  282. end
  283. local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
  284. if IsOver then
  285. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("LabelOver")
  286. return
  287. end
  288. local enterType = param[0]
  289. local timeList = ManagerContainer.DataMgr.IdolData:GetRewardsTimeList()
  290. if not timeList then
  291. return
  292. end
  293. local curTimer = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  294. local startTime = timeList[enterType][1]
  295. local endTime = timeList[enterType][2]
  296. local state = timeList[enterType][3]
  297. if not state then
  298. if curTimer >= startTime and curTimer <= endTime then
  299. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_FANS_DAY_REWARD_REQ,{id = enterType})
  300. elseif curTimer > endTime then
  301. self["rewards"..enterType].idolRewardsAnim.animator:Play("IdolRewardsOverdue")
  302. else
  303. ManagerContainer.LuaUIMgr:OpenTips({cfgId = self.rewardCfgData[enterType][1]})
  304. end
  305. end
  306. end
  307. function UISeasonIdolView:AddUIEventListener()
  308. self.uiBase:AddButtonEventListener(self.btnSeason.button, self, self.OnSeasonViewOpen)
  309. self.uiBase:AddButtonEventListener(self.btnBack.button, self, self.OnClickCloseBtn)
  310. self.uiBase:AddButtonEventListener(self.btnPlayRule.button, self, self.OnClickPlayRuleBtn)
  311. self.uiBase:AddButtonEventListener(self.btnBuy.button, self, self.OnClickBuyBtn)
  312. self.uiBase:AddButtonEventListener(self.btnIdolFans.button, self, self.OnClickIdolFansBtn)
  313. self.uiBase:AddButtonEventListener(self.btnIdolGift.button, self, self.OnClickIdolGiftBtn)
  314. self.uiBase:AddButtonEventListener(self.btnIdolRank.button, self, self.OnClickIdolRankBtn)
  315. self.uiBase:AddButtonEventListener(self.btnIdolShop.button, self, self.OnClickIdolShopBtn)
  316. self.uiBase:AddButtonEventListener(self.rewards1.btnOnlineRewards.button, self, self.OnClickIOnlineRewardsBtn,1)
  317. self.uiBase:AddButtonEventListener(self.rewards2.btnOnlineRewards.button, self, self.OnClickIOnlineRewardsBtn,2)
  318. end
  319. function UISeasonIdolView:OnHide()
  320. end
  321. function UISeasonIdolView:OnShow(data)
  322. self.controller:SetData(data)
  323. ManagerContainer.DataMgr.IdolData:ClearVoteInfoUid()
  324. end
  325. function UISeasonIdolView:OnClose()
  326. ManagerContainer.DataMgr.IdolData:ClearVoteInfoUid()
  327. end
  328. function UISeasonIdolView:OnDispose()
  329. if self.previewSystemMap then
  330. for _, v in pairs(self.previewSystemMap) do
  331. v:Dispose()
  332. end
  333. self.previewSystemMap = nil
  334. end
  335. if self.roleSystemMap then
  336. for _, v in pairs(self.roleSystemMap) do
  337. v:Dispose()
  338. end
  339. self.roleSystemMap = nil
  340. end
  341. if self.updateTimer then
  342. self.updateTimer:Stop()
  343. self.updateTimer = nil
  344. end
  345. self.controller:OnDispose()
  346. ManagerContainer.DataMgr.IdolData:ClearTempPlayerBirefInfos()
  347. end
  348. return UISeasonIdolView