UIEvilView.lua 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. local UIEvilView = require("UISkillExpBattle/UIEvilView_Generate")
  2. local IconItemCtr = require("Common/IconItemCtr")
  3. local SLOT_INTERVAL_TIME = 0.1
  4. local SLOT_CLOSE_TIME = 0.2
  5. local SLOT_OPEN_TIME = 0.5
  6. function UIEvilView:OnAwake(data)
  7. self.controller = require("UISkillExpBattle/UIEvilCtr"):new()
  8. self.controller:Init(self)
  9. self.controller:SetData(data)
  10. end
  11. function UIEvilView:AddEventListener()
  12. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Refresh_SkillExpBattle_SlotData,self,self.RefreshSlotsData)
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Evil_Refresh_SlotCDTime,self,self.RefreshSlotCDTime)
  14. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Evil_Confirm_Challenge,self,self.OnConfirmChanllenge)
  15. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Challenge_Evil_Ok,self,self.OnChallengeEvilOk)
  16. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_ROLE_EVIL_EXP_CHANGED,self,self.RefreshEvilExp)
  17. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_ROLE_EVIL_Level_CHANGED,self,self.RefreshEvilLevelUp)
  18. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_CLOSE_POPGOT_PAGE,self,self.OnClosePopGotPage)
  19. end
  20. function UIEvilView: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. self.successNode:SetActive(false)
  30. end
  31. function UIEvilView:Init()
  32. self.skillState = false
  33. self:RefreshData()
  34. end
  35. function UIEvilView:RemoveEventListener()
  36. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  37. end
  38. function UIEvilView:AddUIEventListener()
  39. self.uiBase:AddButtonEventListener(self.closeBtn.button,self, self.OnClickClose)
  40. self.uiBase:AddButtonEventListener(self.refreshBtn.button,self, self.OnClickRefresh)
  41. self.uiBase:AddButtonEventListener(self.playRuleBtn.button, self, self.OnClickPlayRuleBtn)
  42. self.uiBase:AddButtonEventListener(self.coinIcon.button, self, self.OnClickViewCoinIcon)
  43. self.uiBase:AddButtonEventListener(self.btnInOut.button, self, self.RefreshSkillNoticeState)
  44. self.uiBase:AddButtonEventListener(self.btnGoto.button, self, self.OnGotoSkillSetting)
  45. end
  46. function UIEvilView:OnHide()
  47. end
  48. function UIEvilView:OnShow(data)
  49. self.controller:SetData(data)
  50. self:RefreshSkillGoTo()
  51. end
  52. function UIEvilView:OnClose()
  53. self.rewards = nil
  54. self.levelUpRewards = nil
  55. self:ClearTimer()
  56. self:DisposeBossInfoTimers()
  57. end
  58. function UIEvilView:OnDispose()
  59. self.controller:OnDispose()
  60. end
  61. function UIEvilView:OnChallengeEvilOk(rewards)
  62. self.rewards = rewards
  63. self.successNode:SetActive(true)
  64. local skeleton = self.battleShow.skeletonGraphic
  65. skeleton.Skeleton:SetToSetupPose();
  66. skeleton.AnimationState:ClearTracks();
  67. skeleton.AnimationState:SetAnimation(0, self.battleShow.skeletonGraphic.startingAnimation, false);
  68. self:ClearTimer()
  69. self.hideNodeTimer = ManagerContainer.LuaTimerMgr:AddTimer(3000, 1, self, self.HideSuccessNode, nil)
  70. end
  71. function UIEvilView:HideSuccessNode()
  72. self.successNode:SetActive(false)
  73. self:ClearTimer()
  74. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot, {rewards = self.rewards})
  75. end
  76. function UIEvilView:RefreshEvilLevelUp(rewards)
  77. self.levelUpRewards = rewards
  78. end
  79. function UIEvilView:OnClosePopGotPage()
  80. if self.levelUpRewards ~= nil then
  81. local cb = function()
  82. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot,{rewards = self.levelUpRewards,title="EvilLevelUpBouns"})
  83. self.levelUpRewards = nil
  84. end
  85. RegisterDelayStep(cb)
  86. end
  87. self:RefreshSkillGoTo()
  88. end
  89. function UIEvilView:OnClickViewCoinIcon()
  90. ManagerContainer.LuaUIMgr:ShowMinTips("UISkillExpBattleInfo_1")
  91. end
  92. function UIEvilView:ClearTimer()
  93. if self.hideNodeTimer ~= nil then
  94. ManagerContainer.LuaTimerMgr:RemoveTimer(self.hideNodeTimer)
  95. self.hideNodeTimer = nil
  96. end
  97. end
  98. function UIEvilView:RefreshData()
  99. self:RefreshSlotsData()
  100. self:RefreshEvilExp()
  101. self:RefreshSkillGoTo()
  102. end
  103. function UIEvilView:RefreshSlotsData()
  104. local slotsData = self.controller:GetSlotData()
  105. local delayTime = 0
  106. for i=1, #slotsData do
  107. if self:SetBossInfo(i,self:GetBossGo(i),slotsData[i], delayTime) then
  108. delayTime = delayTime + SLOT_INTERVAL_TIME
  109. end
  110. end
  111. if self.controller:IsFreeForever() then
  112. self.usedRefreshCntTxt.text.text = string.formatbykey('EvilFreeTimesTip01')
  113. self.costTxt.text.text = string.formatbykey('Free')
  114. self.costTxt.text.color = Color.white
  115. self.costIcon:SetActive(false)
  116. else
  117. local leftFreeCnt = self.controller:LeftFreeCnt()
  118. self.usedRefreshCntTxt.text.text = string.formatbykey('EvilFreeTimesTip02',self.controller:LeftFreeCnt())
  119. if leftFreeCnt > 0 then
  120. self.costTxt.text.text = string.formatbykey('Free')
  121. self.costTxt.text.color = Color.white
  122. else
  123. self.costTxt.text.text = tostring(self.controller:RefreshCost())
  124. if ManagerContainer.DataMgr.UserData:GetCurrency(Enum.ItemType.Diamond) >= self.controller:RefreshCost() then
  125. self.costTxt.text.color = Color.white
  126. else
  127. self.costTxt.text.color = Color.pink
  128. end
  129. end
  130. self.costIcon:SetActive(leftFreeCnt == 0)
  131. end
  132. if self.controller:GetEvilLevel() == self.controller:GetMaxLevel() then
  133. self.tipsNode.tipsTxt.text.text = string.formatbykey("EvilLevelMax",self.controller:GetMaxLevel())
  134. else
  135. self.tipsNode.tipsTxt.text.text = string.formatbykey("EvilLevelUp",self.controller:NextLevelChallengedCount(),self.controller:GetEvilLevel()+1)
  136. end
  137. end
  138. function UIEvilView:SetBossInfo(idx, node, bossData, delayTime)
  139. if not node then
  140. return false
  141. end
  142. if not bossData then
  143. node:SetActive(false)
  144. return false
  145. end
  146. node:SetActive(true)
  147. if not bossData:GetChangeState() then
  148. if not self:IsBossInfoTimeringByIdx(idx) then
  149. self:StopBossInfoTimer(idx)
  150. self:RefreshBossInfo(idx)
  151. return false
  152. end
  153. end
  154. bossData:SetChangeState(false)
  155. self:StopBossInfoTimer(idx)
  156. local delayTimer = nil
  157. if self.delayCloseTimers then
  158. delayTimer = self.delayCloseTimers[idx]
  159. else
  160. self.delayCloseTimers = {}
  161. end
  162. if not delayTimer then
  163. delayTimer = Timer.New(function ()
  164. self:PlayBossInfoCloseAnim(idx)
  165. end, delayTime, 1)
  166. self.delayCloseTimers[idx] = delayTimer
  167. else
  168. delayTimer.loop = 1
  169. delayTimer.time = delayTime
  170. delayTimer.duration = delayTime
  171. end
  172. if not delayTimer.running then
  173. delayTimer:Start()
  174. end
  175. return true
  176. end
  177. function UIEvilView:PlayBossInfoCloseAnim(idx)
  178. local node = self:GetBossGo(idx)
  179. if not node then return end
  180. node.animator:Play("UIEvilRefresh", -1)
  181. node.animator:Update(0)
  182. local delayTimer = nil
  183. if self.delayOpenTimers then
  184. delayTimer = self.delayOpenTimers[idx]
  185. else
  186. self.delayOpenTimers = {}
  187. end
  188. if not delayTimer then
  189. delayTimer = Timer.New(function ()
  190. self:RefreshBossInfo(idx)
  191. self:PlayBossInfoOpenAnim(idx)
  192. end, SLOT_CLOSE_TIME, 1)
  193. self.delayOpenTimers[idx] = delayTimer
  194. else
  195. delayTimer.loop = 1
  196. delayTimer.time = SLOT_CLOSE_TIME
  197. delayTimer.duration = SLOT_CLOSE_TIME
  198. end
  199. if not delayTimer.running then
  200. delayTimer:Start()
  201. end
  202. end
  203. function UIEvilView:PlayBossInfoOpenAnim(idx)
  204. local delayTimer = nil
  205. if self.delayStopTimers then
  206. delayTimer = self.delayStopTimers[idx]
  207. else
  208. self.delayStopTimers = {}
  209. end
  210. if not delayTimer then
  211. delayTimer = Timer.New(function ()
  212. self:StopBossInfoTimer(idx)
  213. end, SLOT_OPEN_TIME, 1)
  214. self.delayStopTimers[idx] = delayTimer
  215. else
  216. delayTimer.loop = 1
  217. delayTimer.time = SLOT_OPEN_TIME
  218. delayTimer.duration = SLOT_OPEN_TIME
  219. end
  220. if not delayTimer.running then
  221. delayTimer:Start()
  222. end
  223. end
  224. function UIEvilView:IsBossInfoTimering()
  225. if self.delayCloseTimers then
  226. for _, delayTimer in pairs(self.delayCloseTimers) do
  227. if delayTimer and delayTimer.running then
  228. return true
  229. end
  230. end
  231. end
  232. if self.delayOpenTimers then
  233. for _, delayTimer in pairs(self.delayOpenTimers) do
  234. if delayTimer and delayTimer.running then
  235. return true
  236. end
  237. end
  238. end
  239. if self.delayStopTimers then
  240. for _, delayTimer in pairs(self.delayStopTimers) do
  241. if delayTimer and delayTimer.running then
  242. return true
  243. end
  244. end
  245. end
  246. return false
  247. end
  248. function UIEvilView:DisposeBossInfoTimers()
  249. if self.delayCloseTimers then
  250. for _, delayTimer in pairs(self.delayCloseTimers) do
  251. if delayTimer and delayTimer.running then
  252. delayTimer:Stop()
  253. end
  254. end
  255. self.delayCloseTimers = nil
  256. end
  257. if self.delayOpenTimers then
  258. for _, delayTimer in pairs(self.delayOpenTimers) do
  259. if delayTimer and delayTimer.running then
  260. delayTimer:Stop()
  261. end
  262. end
  263. self.delayOpenTimers = nil
  264. end
  265. if self.delayStopTimers then
  266. for _, delayTimer in pairs(self.delayStopTimers) do
  267. if delayTimer and delayTimer.running then
  268. delayTimer:Stop()
  269. end
  270. end
  271. self.delayStopTimers = nil
  272. end
  273. end
  274. function UIEvilView:IsBossInfoTimeringByIdx(idx)
  275. local delayTimer = nil
  276. if self.delayTimers then
  277. delayTimer = self.delayTimers[idx]
  278. if delayTimer and delayTimer.running then
  279. return true
  280. end
  281. end
  282. if self.delayOpenTimers then
  283. delayTimer = self.delayOpenTimers[idx]
  284. if delayTimer and delayTimer.running then
  285. return true
  286. end
  287. end
  288. if self.delayStopTimers then
  289. delayTimer = self.delayStopTimers[idx]
  290. if delayTimer and delayTimer.running then
  291. return true
  292. end
  293. end
  294. return false
  295. end
  296. function UIEvilView:StopBossInfoTimer(idx)
  297. local node = self:GetBossGo(idx)
  298. if node then
  299. node.animator:Play("UIEvilKeep", -1)
  300. node.animator:Update(0)
  301. end
  302. local delayTimer = nil
  303. if self.delayTimers then
  304. delayTimer = self.delayTimers[idx]
  305. if delayTimer and delayTimer.running then
  306. delayTimer:Stop()
  307. end
  308. end
  309. if self.delayOpenTimers then
  310. delayTimer = self.delayOpenTimers[idx]
  311. if delayTimer and delayTimer.running then
  312. delayTimer:Stop()
  313. end
  314. end
  315. if self.delayStopTimers then
  316. delayTimer = self.delayStopTimers[idx]
  317. if delayTimer and delayTimer.running then
  318. delayTimer:Stop()
  319. end
  320. end
  321. end
  322. function UIEvilView:RefreshBossInfo(idx)
  323. local node = self:GetBossGo(idx)
  324. if not node then return end
  325. local bossData = self.controller:GetSlotDataByIdx(idx)
  326. if not bossData then
  327. node:SetActive(false)
  328. return
  329. end
  330. node:SetActive(true)
  331. local qualityBg = self.controller:GetQuialityBg(bossData.bossQuality)
  332. if qualityBg ~= nil and qualityBg ~= "" then
  333. CommonUtil.LoadIcon(self, qualityBg, function (sprite)
  334. node.shadow.image.sprite = sprite
  335. end)
  336. else
  337. node.shadow.image.sprite = nil
  338. end
  339. node.titleImg.image.sprite = node.titleImg.switchSprite.sprites[bossData.bossQuality-1]
  340. node.bossName.text.text = bossData.bossName
  341. CommonUtil.LoadIcon(self, bossData.bossIcon, function (sprite)
  342. node.bossNode.bossImg.image.sprite = sprite
  343. end)
  344. if bossData:IsBossDead() then
  345. node.passedNode:SetActive(true)
  346. node.challengeBtn:SetActive(false)
  347. else
  348. node.passedNode:SetActive(false)
  349. node.challengeBtn:SetActive(true)
  350. end
  351. self:RefreshSlotCDTime(idx,bossData:GetLeftCDTime())
  352. node.costVal.text.text = tostring(self.controller:GetCost())
  353. if self.controller:GetCost() <= self.controller:GetCurrentEvilExp() then
  354. node.costVal.text.color = Color.white
  355. else
  356. node.costVal.text.color = Color.pink
  357. end
  358. self.uiBase:AddButtonUniqueEventListener(node.challengeBtn.button, self, self.OnClickChallengeBoss, idx)
  359. IconItemCtr:SetData(self,node.rewardItem,{cfgId = Enum.ItemType.SkillExp, num = bossData.rewardEvilExp},Enum.ItemIEnterType.Bag,self,self.OnClickReward)
  360. end
  361. function UIEvilView:OnClickReward(btn,params)
  362. local itemData = params[0]
  363. ManagerContainer.LuaUIMgr:OpenTips(itemData)
  364. end
  365. function UIEvilView:RefreshSlotCDTime(slotId,cdTime)
  366. local slotGo = self:GetBossGo(slotId)
  367. if slotGo == nil then
  368. return
  369. end
  370. slotGo.cdNode.cdTxt.text.text = FormatTime2(cdTime)
  371. slotGo.cdNode:SetActive(cdTime > 0)
  372. end
  373. function UIEvilView:RefreshEvilExp()
  374. self.evilValTxt.text.text = self.controller:GetCurrentEvilExp() .. "/" .. self.controller:GetMaxEvilExp()
  375. if self.controller:GetCurrentEvilExp() >= self.controller:GetCost() then
  376. self.evilValTxt.text.color = Color.white
  377. else
  378. self.evilValTxt.text.color = Color.pink
  379. end
  380. end
  381. function UIEvilView:OnClickChallengeBoss(btn,params)
  382. if self:IsBossInfoTimering() then
  383. return
  384. end
  385. local slotIdx = params[0]
  386. local slotData = self.controller:GetSlotDataByIdx(slotIdx)
  387. if slotData ~= nil then
  388. self.controller:SendChallengeBoss(slotIdx,slotData.bossId)
  389. end
  390. end
  391. function UIEvilView:OnClickRefresh()
  392. if self:IsBossInfoTimering() then
  393. return
  394. end
  395. if self.controller:IsFreeForever() or self.controller:LeftFreeCnt() > 0 then
  396. self.controller:RefreshReq()
  397. else
  398. if ManagerContainer.DataMgr.UserData:GetCurrency(Enum.ItemType.Diamond) < self.controller:RefreshCost() then
  399. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(282)
  400. else
  401. ManagerContainer.LuaUIMgr:ShowMessageBox("EvilRefreshRefreshCD",{self.controller:RefreshCost()},nil, self, self.OnConfirmRefreshRefresh)
  402. end
  403. end
  404. end
  405. function UIEvilView:OnConfirmRefreshRefresh()
  406. self.controller:RefreshReq()
  407. end
  408. function UIEvilView:OnClickClose()
  409. ManagerContainer.LuaUIMgr:OpenSourceUI(self)
  410. end
  411. function UIEvilView:OnClickPlayRuleBtn()
  412. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', 'EvilGuildPlayExplain'})
  413. end
  414. function UIEvilView:GetBossGo(idx)
  415. if idx == 1 then
  416. return self.bossNode1
  417. elseif idx == 2 then
  418. return self.bossNode2
  419. elseif idx == 3 then
  420. return self.bossNode3
  421. elseif idx == 4 then
  422. return self.bossNode4
  423. end
  424. return nil
  425. end
  426. function UIEvilView:RefreshSkillGoTo()
  427. local lvCnt = CommonUtil.GetAllSlotSkillCanUpNum(true)
  428. if not self.lastCnt then
  429. self.lastCnt = 0
  430. end
  431. self.light:SetActive(lvCnt > 0)
  432. --self.btnGoto.button.enabled = lvCnt > 0
  433. self.text1.uILocalizeScript:SetContentAndValues("SkillUpCount", {lvCnt})
  434. if lvCnt > self.lastCnt then
  435. self.lastCnt = lvCnt
  436. self:RefreshSkillNoticeState(nil, nil, true)
  437. end
  438. end
  439. function UIEvilView:RefreshSkillNoticeState(button, params, out)
  440. if not out then
  441. self.skillState = not self.skillState
  442. else
  443. self.skillState = true
  444. end
  445. self.bgGoto.animator:Play(self.skillState and "UIGotoIn" or "UIGotoOut")
  446. end
  447. function UIEvilView:OnGotoSkillSetting()
  448. local id = CommonUtil.GetHeroIdBySlotSkillLowerLv(true)
  449. if id == 0 then
  450. id = 1
  451. end
  452. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISkillSettings, {id})
  453. end
  454. return UIEvilView