UIClimbingTowerView.lua 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988
  1. local UIClimbingTowerView = require("UIClimbingTower/UIClimbingTowerView_Generate")
  2. local PreviewSystem = require "PreviewSystem"
  3. local RoleViewSystem = require "RoleViewSystem"
  4. local IconItemCtr = require "Common.IconItemCtr"
  5. local previewSystem
  6. local moveState = false
  7. local LastmoveState = false
  8. function UIClimbingTowerView:OnAwake(data)
  9. self.controller = require("UIClimbingTower/UIClimbingTowerCtr"):new()
  10. self.controller:Init(self)
  11. self.controller:SetData(data)
  12. end
  13. function UIClimbingTowerView:AddEventListener()
  14. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name,UIEventNames.EID_REFRESH_CLIMBINGTOWER_DATA,self,self.UpdateLevelsData)
  15. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name,UIEventNames.REFRESH_CLIMBINGTOWER_DAYREWARD,self,self.GetPopGot)
  16. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name,UIEventNames.EID_CHANGE_TOWER_SHOW_REFRESH,self,self.ShowChange)
  17. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name,UIEventNames.EID_REFRESH_PEAKTOWER_WIN_DATA,self,self.UpdatePeakTowerDataAfterWin)
  18. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name,UIEventNames.EID_Refresh_ClimbingTower_FriendInfo,self,self.RefreshClimbingTowerFriendInfo)
  19. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_TOWER_LEVEL_MIN_FIGHT_POWER_ACK, self.OnFightPowerAck,self)
  20. end
  21. function UIClimbingTowerView:GetPopGot(data)
  22. if not data then
  23. return
  24. end
  25. local rewards = {}
  26. for i = 1, #data do
  27. table.insert(rewards,{cfgId = data[i].key,num = data[i].value})
  28. end
  29. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot,{rewards = rewards})
  30. end
  31. function UIClimbingTowerView:FillContent(data, uiBase)
  32. self.uiBase = uiBase
  33. local gameObject = self.uiBase:GetRoot()
  34. if gameObject ~= nil then
  35. self.gameObject = gameObject
  36. self.transform = gameObject.transform
  37. end
  38. self:InitGenerate(self.transform, data)
  39. self:Init()
  40. end
  41. function UIClimbingTowerView:Init()
  42. self.initedOver = false
  43. self.otherType = nil
  44. self.uIGoto:SetActive(true)
  45. self.text2.uILocalizeScript:SetContent("GoToLvlUp")
  46. self.text1.uILocalizeScript:SetContentAndValues("LvlUpNum", {0})
  47. self:OnHeroLvChanged()
  48. --会跳往主角界面
  49. if ManagerContainer.LuaUIMgr:HasOpenPage(Enum.UIPageName.UIMain) == false then
  50. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIMain)
  51. end
  52. --打开限时礼包
  53. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.LIMIT_RECHARGE_OPEN_UI_NTF)
  54. -- --适配宽度
  55. -- if nil ~= self.scrollview and nil ~= self.scrollview.content and nil ~= self.scrollview.content.gridLayoutGroup then
  56. -- local rectTrans = self.scrollview.content:GetComponent(Enum.TypeInfo.RectTransform)
  57. -- if nil ~= rectTrans then
  58. -- self.scrollview.content.gridLayoutGroup.cellSize = Vector2(rectTrans.rect.width, self.scrollview.content.gridLayoutGroup.cellSize.y)
  59. -- end
  60. -- end
  61. -- self:InitGrid()
  62. self.cover:SetActive(true)
  63. self.cover.animator:Play("CoverKeep")
  64. --保护机制 5秒后关闭云
  65. if self.cloudTimer then
  66. self.cloudTimer:Stop()
  67. end
  68. if not self.cloudTimer then
  69. self.cloudTimer = Timer.New(slot(self.CloudOut, self), 1)
  70. end
  71. if not self.cloudTimer.running then
  72. self.cloudTimer:Start()
  73. end
  74. self:Refresh()
  75. if not self.queryTimer then
  76. self.queryTimer = FrameTimer.New(slot(self.QueryDatas, self), 1)
  77. end
  78. if not self.queryTimer.running then
  79. self.queryTimer:Start()
  80. end
  81. end
  82. function UIClimbingTowerView:QueryDatas()
  83. local type = self.controller:GetCurTowerType()
  84. self.controller:SendTowerInfoReq(type)
  85. end
  86. function UIClimbingTowerView:Refresh()
  87. local type = self.controller:GetCurTowerType()
  88. if type == Enum.UnlimitTowerType.PeakTower then
  89. self.rewardLoopGridMap = {}
  90. self.scrollItemGoes = {}
  91. self.roleSystemMap = {}
  92. self.previewSystemMap = {}
  93. self.scrollview.loopListView.mOnSnapItemFinished = function(loopListView, loopListViewItem)
  94. return self:OnSnapItemFinished(loopListView, loopListViewItem)
  95. end
  96. self.boardTitle.uILocalizeScript:SetContent("TopTowerTitle")
  97. elseif type == Enum.UnlimitTowerType.ClimbingTower then
  98. self.boardTitle.uILocalizeScript:SetContent("TitleClimbingTower")
  99. end
  100. local isShowTop_Lock = (self.controller:FindLevelIsPassed() == true and type == Enum.UnlimitTowerType.ClimbingTower)
  101. self.btnTowerTop:SetActive(type == Enum.UnlimitTowerType.ClimbingTower)
  102. self.btnTowerTop_lock:SetActive(not isShowTop_Lock)
  103. self.btnTower:SetActive(type == Enum.UnlimitTowerType.PeakTower)
  104. self.btnStatistics:SetActive(type == Enum.UnlimitTowerType.ClimbingTower)
  105. end
  106. function UIClimbingTowerView:InitGrid()
  107. self.scrollview.loopListView:InitListView(0, function(gridView, itemIndex)
  108. return self:GetItemByRowColumn(gridView, itemIndex)
  109. end, nil)
  110. end
  111. function UIClimbingTowerView:RemoveEventListener()
  112. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  113. end
  114. function UIClimbingTowerView:AddUIEventListener()
  115. self.uiBase:AddButtonEventListener(self.closeBtn.button,self,self.OnClickClose)
  116. self.uiBase:AddButtonEventListener(self.rankBtn.button,self,self.OnClickRank)
  117. self.uiBase:AddButtonEventListener(self.playRuleBtn.button, self, self.OnClickPlayRuleBtn)
  118. self.uiBase:AddButtonEventListener(self.btnStatistics.button,self,self.OnClickBtnStatistics)
  119. --角色升级动画弹出播放
  120. self.uiBase:AddButtonEventListener(self.btnInOut.button,self,self.OnPlayChangeShowState)
  121. -- 前往角色界面
  122. self.uiBase:AddButtonEventListener(self.btnGoto.button,self,self.OnShowRoleWnd)
  123. self.uiBase:AddButtonEventListener(self.btnTower.button, self, self.ShowTowerMode)
  124. self.uiBase:AddButtonEventListener(self.btnTowerTop.button, self, self.ShowTowerMode)
  125. self.uiBase:AddButtonEventListener(self.btnPresent.button, self, self.OnBtnPresentClick)
  126. self.uiBase:AddButtonEventListener(self.towerBgBtn.button,self,self.CloseModeNode)
  127. end
  128. function UIClimbingTowerView:OnSnapItemFinished(loopListView, loopListViewItem)
  129. for _,v in pairs(self.scrollItemGoes) do
  130. local instanceId = v.gameObject:GetInstanceID()
  131. if v.gameObject.activeSelf then
  132. self.previewSystemMap[instanceId]:RemoveGo(v.gameObject)
  133. end
  134. end
  135. end
  136. function UIClimbingTowerView:ShowChange(needChange)
  137. self:Clear()
  138. self.cover:SetActive(true)
  139. self:InitGrid()
  140. --保护机制 5秒后关闭云
  141. if not self.cloudTimer then
  142. self.cloudTimer = Timer.New(slot(self.CloudOut, self), 1)
  143. end
  144. if not self.cloudTimer.running then
  145. self.cloudTimer:Start()
  146. end
  147. if needChange and self.otherType then
  148. self.controller:ChangeToOtherType()
  149. self.otherType = nil
  150. end
  151. self:Refresh()
  152. end
  153. function UIClimbingTowerView:CloudOut()
  154. self.cover.animator:Play("CoverOut")
  155. end
  156. function UIClimbingTowerView:OnBtnTowerClick()
  157. --ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('ClimbingTowerClickTips')
  158. self.otherType = 1 - self.controller:GetCurTowerType()
  159. local needQuery = self.controller:SendTowerInfoReq(self.otherType)
  160. if not needQuery then
  161. self:ShowChange(true)
  162. self:UpdateLevelsData()
  163. end
  164. end
  165. function UIClimbingTowerView:OnBtnPresentClick()
  166. local server_time = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  167. local servertime = type(server_time) == "number" and server_time or #server_time
  168. local dayRewardTime = ManagerContainer.DataMgr.TowerDataMgr:GetDayRewardTime()
  169. if dayRewardTime < servertime then
  170. local curlevel = ManagerContainer.DataMgr.TowerDataMgr:GetCurChallengeLevel() - 1
  171. local curRewardData,nextRewardData,NoReward = self:GetRewardDataBylv(curlevel)
  172. local tipsKey = ""
  173. local data = nil
  174. if NoReward then
  175. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("PresentErrorTips2")
  176. return
  177. end
  178. if nextRewardData then
  179. tipsKey = "ClimbingTowerDayRewardTips1"
  180. data = {curRewardData[2],nextRewardData[1] - curlevel,nextRewardData[2]}
  181. else
  182. tipsKey = "ClimbingTowerDayRewardTips2"
  183. data = {curRewardData[2]}
  184. end
  185. ManagerContainer.LuaUIMgr:ShowMessageBox(tipsKey,data,nil,self,self.OnSureGetDayReward)
  186. else
  187. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("PresentErrorTips1")
  188. end
  189. end
  190. function UIClimbingTowerView:OnSureGetDayReward()
  191. ManagerContainer.DataMgr.TowerDataMgr:OnClimbingTowerDayRewardREQ()
  192. end
  193. function UIClimbingTowerView:GetRewardDataBylv(lv)
  194. local str = GlobalConfig.Instance:GetConfigStrValue(357)
  195. local tab = CommonUtil.DeserializeGlobalStrToNumberTable(str)
  196. if tab then
  197. for i = 1, #tab do
  198. local curData = tab[i]
  199. local nextData = tab[i + 1]
  200. if nextData then
  201. if lv < curData[1] then
  202. return {0,0},curData,true
  203. elseif curData[1] <= lv and lv < nextData[1] then
  204. return curData,nextData
  205. end
  206. else
  207. return curData,nil
  208. end
  209. end
  210. end
  211. end
  212. --角色升级后 升级动画弹出播放
  213. function UIClimbingTowerView:OnHeroLvChanged()
  214. local nCount,nId = self:GetLeveUpNum()
  215. if nCount > 0 then
  216. moveState = true
  217. if nil ~= self.light then
  218. self.light:SetActive(true)
  219. end
  220. else
  221. if nil ~= self.light then
  222. self.light:SetActive(false)
  223. end
  224. end
  225. self:OnPlayChangeShow(nCount)
  226. end
  227. --获取上阵角色可升级数量
  228. function UIClimbingTowerView:GetLeveUpNum()
  229. local nBattlePatnerNum = 0
  230. local nPartnerId = -1
  231. --可上阵伙伴
  232. local tbBattlePartner = self:GetSortPartner()
  233. for i = 1, #tbBattlePartner do
  234. --是否可升级
  235. local lvUpState = ManagerContainer.RedPointMgr.HeroRPCtr:GetPartnerLvUpRPStatusById(tbBattlePartner[i].id)
  236. if lvUpState then
  237. if nPartnerId == -1 then
  238. nPartnerId = tbBattlePartner[i].id
  239. end
  240. nBattlePatnerNum = nBattlePatnerNum + 1
  241. end
  242. end
  243. return nBattlePatnerNum , nPartnerId
  244. end
  245. function UIClimbingTowerView:GetSortPartner()
  246. local partnerDatas = ManagerContainer.DataMgr.PartnerData:GetPartnersDataByInBattle()
  247. local sortedPartnerDatas = {}
  248. for _,v in pairs(partnerDatas) do
  249. sortedPartnerDatas[#sortedPartnerDatas + 1] = v
  250. end
  251. table.sort(sortedPartnerDatas, function (a, b)
  252. if a.owned and b.owned then
  253. return a.post < b.post
  254. else
  255. if a.owned and not b.owned then
  256. return true
  257. elseif not a.owned and b.owned then
  258. return false
  259. else
  260. return a.post < b.post
  261. end
  262. end
  263. end)
  264. return sortedPartnerDatas
  265. end
  266. --按钮点击 角色升级动画弹出播放
  267. function UIClimbingTowerView:OnPlayChangeShowState()
  268. moveState = not moveState
  269. self:OnPlayChangeShow()
  270. end
  271. --展示升级动画弹出播放
  272. function UIClimbingTowerView:OnPlayChangeShow(nCount)
  273. if nil == self.text1 or nil == self.bgGoto then
  274. return
  275. end
  276. if nil ~= nCount then
  277. self.text1.uILocalizeScript:SetContentAndValues("LvlUpNum", {nCount})
  278. end
  279. if LastmoveState ~= moveState then
  280. if moveState then
  281. self.bgGoto.animator:CrossFade("UIGotoIn", 0.1)
  282. else
  283. self.bgGoto.animator:CrossFade("UIGotoOut", 0.1)
  284. end
  285. LastmoveState = moveState
  286. end
  287. end
  288. -- 前往角色界面
  289. function UIClimbingTowerView:OnShowRoleWnd()
  290. local ncount,nId = self:GetLeveUpNum()
  291. if nId == -1 then
  292. nId = nil
  293. end
  294. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UIMAINVIEW_CHANGE_NOTICE, Enum.MainViewPageType.Role, nId)
  295. end
  296. function UIClimbingTowerView:OnHide()
  297. end
  298. function UIClimbingTowerView:OnShow(data)
  299. self.controller:SetData(data)
  300. self:UpdateLevelsData()
  301. end
  302. function UIClimbingTowerView:Clear()
  303. self.initedOver = false
  304. if self.queryTimer then
  305. self.queryTimer:Stop()
  306. self.queryTimer = nil
  307. end
  308. if self.cloudTimer then
  309. self.cloudTimer:Stop()
  310. self.cloudTimer = nil
  311. end
  312. if self.peakRefreshTimer then
  313. self.peakRefreshTimer:Stop()
  314. self.peakRefreshTimer = nil
  315. end
  316. local type = self.controller:GetCurTowerType()
  317. if type == Enum.UnlimitTowerType.PeakTower then
  318. if self.scrollItemGoes then
  319. self.scrollItemGoes = nil
  320. end
  321. if self.rewardLoopGridMap then
  322. for _, v in pairs(self.rewardLoopGridMap) do
  323. v:Dispose()
  324. end
  325. self.rewardLoopGridMap = nil
  326. end
  327. if self.previewSystemMap then
  328. for _, v in pairs(self.previewSystemMap) do
  329. v:Dispose()
  330. end
  331. self.previewSystemMap = nil
  332. end
  333. if self.roleSystemMap then
  334. for _, v in pairs(self.roleSystemMap) do
  335. v:Dispose()
  336. end
  337. self.rewardLoopGridMap = nil
  338. end
  339. end
  340. self.scrollview.loopListView:Dispose()
  341. end
  342. function UIClimbingTowerView:OnClose()
  343. self:Clear()
  344. self.cover:SetActive(false)
  345. end
  346. function UIClimbingTowerView:OnDispose()
  347. end
  348. function UIClimbingTowerView:RefreshClimbingTowerFriendInfo(levelIds)
  349. self.scrollview.loopListView:RefreshAllShownItem()
  350. end
  351. function UIClimbingTowerView:FindItemGo(levelId)
  352. if self.scrollview.content == nil then
  353. return nil
  354. end
  355. return self.scrollview.content.transform:Find(tostring(levelId))
  356. end
  357. function UIClimbingTowerView:UpdateLevelsData()
  358. self.controller:RefreshTowerDatas()
  359. local loopListView = self.scrollview.loopListView
  360. local length = self.controller:GetShowDataLength()
  361. local curTowerFloorIdx = self.controller:GetCurTowerFloorIdx()
  362. local type = self.controller:GetCurTowerType()
  363. if type == Enum.UnlimitTowerType.PeakTower then
  364. if curTowerFloorIdx < length then
  365. length = math.min(curTowerFloorIdx + 5, length)
  366. if curTowerFloorIdx <= 2 then
  367. curTowerFloorIdx = 1
  368. else
  369. curTowerFloorIdx = curTowerFloorIdx - 1
  370. end
  371. else
  372. curTowerFloorIdx = length - 2
  373. end
  374. self.peakStep = 0
  375. loopListView:SetListItemCount(length, false)
  376. self.scrollview.loopListView:MovePanelToItemIndex(curTowerFloorIdx - 1, 0)
  377. if not self.peakRefreshTimer then
  378. self.peakRefreshTimer = FrameTimer.New(slot(self.RefreshPeakTowerItems, self), 10, 3)
  379. end
  380. if not self.peakRefreshTimer.running then
  381. self.peakRefreshTimer:Start()
  382. end
  383. elseif type == Enum.UnlimitTowerType.ClimbingTower then
  384. if curTowerFloorIdx <= 2 then
  385. curTowerFloorIdx = 1
  386. else
  387. curTowerFloorIdx = curTowerFloorIdx - 1
  388. end
  389. loopListView:SetListItemCount(length, false)
  390. if curTowerFloorIdx > 1 then
  391. loopListView:MovePanelToItemIndex(curTowerFloorIdx - 1, 0)
  392. end
  393. end
  394. self.initedOver = true
  395. -- self.cover.animator:Play("CoverOut")
  396. end
  397. function UIClimbingTowerView:RefreshPeakTowerItems()
  398. self.peakStep = self.peakStep + 1
  399. local length = self.controller:GetShowDataLength()
  400. for i = 1, length do
  401. self:RefreshTopPeakItemByIdx(nil, i)
  402. end
  403. if self.peakStep >= 3 then
  404. self.peakStep = -1
  405. end
  406. end
  407. function UIClimbingTowerView:SetNpcInfo(levelNode,npcImg,natureImg,npc,Level)
  408. --怪物等級為爬塔層數 * 2
  409. levelNode.text.text = tostring(Level * 2)
  410. CommonUtil.LoadIcon(self, npc.npcImg, function (sprite)
  411. npcImg.image.sprite = sprite
  412. npcImg.image:SetNativeSize()
  413. if npc.offset~= nil then
  414. npcImg.rectTransform.anchoredPosition = npc.offset
  415. end
  416. end)
  417. CommonUtil.LoadIcon(self, npc.natureIcon, function (sprite)
  418. natureImg.image.sprite = sprite
  419. end)
  420. end
  421. function UIClimbingTowerView:GetItemByRowColumn(gridView, itemIndex, row, column)
  422. local length = self.controller:GetShowDataLength();
  423. if (itemIndex < 0 or itemIndex >=length) then
  424. return nil
  425. end
  426. local type = self.controller:GetCurTowerType()
  427. if type == Enum.UnlimitTowerType.ClimbingTower then
  428. return self:RefreshClimbingTowerItem(gridView, itemIndex)
  429. elseif type == Enum.UnlimitTowerType.PeakTower then
  430. return self:RefreshPeakTowerItem(gridView, itemIndex)
  431. end
  432. return nil
  433. end
  434. function UIClimbingTowerView:RefreshClimbingTowerItem(gridView, idx)
  435. local levelData = self.controller:GetShowDataByIdx(idx)
  436. local item = gridView:NewListViewItem("ClimbingTowerLevelItem")
  437. local levelLua = CommonUtil.BindGridViewItem2Lua(self, "ClimbingTowerLevelItem", item.gameObject)
  438. levelLua.gameObject.name = levelData.levelId
  439. levelLua.levelNum.text.text = "第"..levelData.levelId.."层"
  440. levelLua.passedNode:SetActive(levelData.hasPassed)
  441. levelLua.challengeBtn:SetActive(levelData.levelId == self.controller:GetCurTowerFloorIdx())
  442. levelLua.friendNode:SetActive(levelData:HasFriend())
  443. levelLua.newLevelNode:SetActive(levelData.levelId > self.controller:GetCurTowerFloorIdx())
  444. levelLua.bottomNode:SetActive(levelData.levelId <= self.controller:GetCurTowerFloorIdx())
  445. if nil ~= levelData.CardUnlock and "" ~= levelData.CardUnlock then
  446. levelLua.unLock.unlocktext.uILocalizeScript:SetContent(levelData.CardUnlock)
  447. levelLua.unLock:SetActive(true)
  448. else
  449. levelLua.unLock:SetActive(false)
  450. end
  451. if levelData.hasPassed then
  452. levelLua.npcList:SetActive(false)
  453. else
  454. levelLua.npcList:SetActive(true)
  455. for i=1, #levelData.npcs do
  456. local npc = levelData.npcs[i]
  457. if npc.npcImg ~= nil then
  458. if i == 1 then
  459. self:SetNpcInfo(levelLua.npcList.npcLevel1,levelLua.npcList.npc1,levelLua.npcList.natureIcon1,npc,levelData.levelId)
  460. elseif i == 2 then
  461. self:SetNpcInfo(levelLua.npcList.npcLevel2,levelLua.npcList.npc2,levelLua.npcList.natureIcon2,npc,levelData.levelId)
  462. elseif i == 3 then
  463. self:SetNpcInfo(levelLua.npcList.npcLevel3,levelLua.npcList.npc3,levelLua.npcList.natureIcon3,npc,levelData.levelId)
  464. elseif i == 4 then
  465. self:SetNpcInfo(levelLua.npcList.npcLevel4,levelLua.npcList.npc4,levelLua.npcList.natureIcon4,npc,levelData.levelId)
  466. end
  467. end
  468. end
  469. end
  470. self:HideAllItems(levelLua)
  471. if levelData.specialReward ~= nil then
  472. for i =1, #levelData.specialReward do
  473. self:SetSpecialData(self:GetItemGo(levelLua,i),levelData.specialReward[i][1],levelData.specialReward[i][2])
  474. end
  475. levelLua.bonusNode:SetActive(true)
  476. else
  477. levelLua.bonusNode:SetActive(false)
  478. end
  479. self.uiBase:AddButtonUniqueEventListener(levelLua.levelInfoBtn.button, self, self.OnClickViewLevelInfo, levelData.levelId)
  480. self.uiBase:AddButtonUniqueEventListener(levelLua.challengeBtn.button, self, self.OnClickChallengeBtn, levelData.levelId)
  481. self.uiBase:AddButtonUniqueEventListener(levelLua.friendNode.button, self, self.OnClickFriendBtn, levelData.levelId)
  482. return item
  483. end
  484. function UIClimbingTowerView:UpdatePeakTowerDataAfterWin(idx)
  485. self.controller:RefreshTowerDatas()
  486. local loopListView = self.scrollview.loopListView
  487. local length = self.controller:GetShowDataLength()
  488. local curTowerFloorIdx = self.controller:GetCurTowerFloorIdx()
  489. local type = self.controller:GetCurTowerType()
  490. if type == Enum.UnlimitTowerType.PeakTower then
  491. if curTowerFloorIdx < length then
  492. length = math.min(curTowerFloorIdx + 5, length)
  493. end
  494. end
  495. self.peakStep = -1
  496. loopListView:SetListItemCount(length, false)
  497. loopListView:RefreshAllShownItem()
  498. end
  499. function UIClimbingTowerView:RefreshPeakTowerItem(gridView, idx)
  500. local showData = self.controller:GetShowDataByIdx(idx)
  501. local item = gridView:NewListViewItem("ClimbingTowerTopItem")
  502. local itemlua = CommonUtil.BindGridViewItem2Lua(self, "ClimbingTowerTopItem", item.gameObject)
  503. local instanceId = item.gameObject:GetInstanceID()
  504. local curTowerFloorIdx = self.controller:GetCurTowerFloorIdx()
  505. local curState = curTowerFloorIdx > showData.floorIdx
  506. local selfUid = ManagerContainer.DataMgr.UserData:GetUserRoleId()
  507. local userData = showData:GetRoleInfo()
  508. local isRobot = userData.isRobot
  509. if not self.scrollItemGoes[instanceId] then
  510. self.scrollItemGoes[instanceId] = itemlua
  511. end
  512. item.gameObject.name = showData.floorIdx
  513. if not userData.inited then
  514. itemlua.playerNode:SetActive(false)
  515. itemlua.challengeBtn:SetActive(false)
  516. itemlua.btnBuy:SetActive(false)
  517. itemlua.rewards:SetActive(false)
  518. itemlua.passedNode:SetActive(false)
  519. itemlua.cover:SetActive(true)
  520. itemlua.btnBuy:SetActive(false)
  521. itemlua.challengeBtn:SetActive(false)
  522. itemlua.levelNum.text.text = I18N.SetLanguageValue("TopTowerLevel", showData.floorIdx)
  523. itemlua.btnMessage:SetActive(false)
  524. return item
  525. end
  526. itemlua.playerNode:SetActive(not curState)
  527. itemlua.challengeBtn:SetActive(not curState)
  528. itemlua.btnBuy:SetActive(not curState)
  529. itemlua.rewards:SetActive(not curState)
  530. itemlua.passedNode:SetActive(curState)
  531. itemlua.nametext.text.text = userData.nickName
  532. itemlua.cover:SetActive(curTowerFloorIdx < showData.floorIdx)
  533. itemlua.btnBuy:SetActive(curTowerFloorIdx == showData.floorIdx)
  534. itemlua.challengeBtn:SetActive(curTowerFloorIdx == showData.floorIdx)
  535. itemlua.levelNum.text.text = I18N.SetLanguageValue("TopTowerLevel", showData.floorIdx)
  536. itemlua.btnMessage:SetActive(not isRobot and selfUid ~= userData.uid)
  537. if self.peakStep == -1 then
  538. self:RefreshTopPeakItemByIdx(itemlua, showData.floorIdx)
  539. end
  540. return item
  541. end
  542. function UIClimbingTowerView:RefreshTopPeakItemByIdx(itemlua, idx)
  543. if not itemlua then
  544. itemlua = self:GetTopPeakItemByIdx(idx)
  545. end
  546. if not itemlua then return end
  547. local showData = self.controller:GetShowDataByIdx(idx - 1)
  548. local instanceId = itemlua.gameObject:GetInstanceID()
  549. if not showData then return end
  550. local heroData = showData:GetRoleHeroData()
  551. local curTowerFloorIdx = self.controller:GetCurTowerFloorIdx()
  552. local curState = curTowerFloorIdx > showData.floorIdx
  553. local userData = showData:GetRoleInfo()
  554. if not curState then
  555. if self.peakStep == -1 or self.peakStep == 2 then
  556. if not self.roleSystemMap[instanceId] then
  557. self.roleSystemMap[instanceId] = RoleViewSystem:new()
  558. end
  559. if not self.previewSystemMap[instanceId] then
  560. self.previewSystemMap[instanceId] = PreviewSystem:new("Preview", 256, 256)
  561. self.previewSystemMap[instanceId]:SetView(Vector3(-0.116, 1.649, 2.5), Quaternion.Euler(12.174, -182.628, 0.085))
  562. end
  563. itemlua.pos:SetActive(true)
  564. local selectZone = userData.selectZone
  565. if selectZone == 0 then
  566. local serverData = ManagerContainer.LuaGameMgr.serverData
  567. selectZone = serverData and serverData.id or 0
  568. end
  569. itemlua.servertext.text.text = I18N.SetLanguageValue("TopTowerServer", selectZone-1)--ManagerContainer.LuaGameMgr.serverData.name--
  570. itemlua.atknum.text.text = userData.fightPower
  571. self.roleSystemMap[instanceId]:CancelCreate()
  572. self.previewSystemMap[instanceId]:RemoveAllGo()
  573. self.roleSystemMap[instanceId]:SetHeroId(instanceId)
  574. self.roleSystemMap[instanceId]:RefreshView(Enum.RoleInEnvType.RoleMainView, userData.roleCfgId, userData.viewData, heroData and heroData.extGoesShowData or nil, self, self.LoadModelCB)
  575. itemlua.roleModel.rawImage.texture = self.previewSystemMap[instanceId]:GetRenderTexture()
  576. end
  577. if self.peakStep == -1 or self.peakStep == 3 then
  578. local loopGridView = itemlua.scrollView.loopGridView
  579. if not self.rewardLoopGridMap[instanceId] then
  580. self.rewardLoopGridMap[instanceId] = loopGridView
  581. end
  582. if not itemlua.initedLoop then
  583. loopGridView:InitGridView(0, function(gridView, itemIndex, row, column)
  584. return self:GetRewardItemByRowColumn(gridView, itemIndex, row, column)
  585. end, nil)
  586. itemlua.initedLoop = true
  587. end
  588. local cfgData = ManagerContainer.CfgMgr:GetTopTowerRewardCfgDataByLv(showData.floorIdx)
  589. self.curPeakTowerItemRewardData = cfgData and cfgData.RewardItems or nil
  590. local rewardLength = cfgData and #cfgData.RewardItems or 0
  591. loopGridView:RefreshListByIndex(rewardLength, 0)
  592. local cost = cfgData and cfgData.BuyRoadCost or nil
  593. itemlua.btnBuy.icon.image.enabled = false
  594. if cost and cost[1] then
  595. local key = cost[1][1]
  596. local val = cost[1][2]
  597. local ownNum = CommonUtil.GetOwnResCountByItemId(key)
  598. local costCfgData = ManagerContainer.CfgMgr:GetItemById(key)
  599. if costCfgData.Icon and costCfgData.Icon ~= '' then
  600. CommonUtil.LoadIcon(self, costCfgData.Icon, function (sprite)
  601. itemlua.btnBuy.icon.image.sprite = sprite
  602. itemlua.btnBuy.icon.image.enabled = true
  603. end, 'ItemIcon'..idx)
  604. end
  605. if ownNum < val then
  606. itemlua.btnBuy.num.text.text = string.format(Constant.PinkColorText, val)
  607. else
  608. itemlua.btnBuy.num.text.text = val
  609. end
  610. self.uiBase:AddButtonUniqueEventListener(itemlua.btnBuy.button, self, self.OnPeakTowerBuyClick, showData.floorIdx, val)
  611. end
  612. self.uiBase:AddButtonUniqueEventListener(itemlua.challengeBtn.button, self, self.OnPeakTowerChallengeClick, showData.floorIdx)
  613. self.uiBase:AddButtonUniqueEventListener(itemlua.btnMessage.button, self, self.OnCheckFightInfo, showData.floorIdx)
  614. end
  615. end
  616. end
  617. function UIClimbingTowerView:LoadModelCB(go, result, instanceId)
  618. if not go then return end
  619. if self.previewSystemMap[instanceId] and go ~= nil then
  620. go.name = instanceId
  621. self.scrollItemGoes[instanceId].pos:SetActive(false)
  622. self.scrollItemGoes[instanceId].roleModel:SetActive(true)
  623. self.previewSystemMap[instanceId]:UpdateGo(go)
  624. end
  625. go:SetActive(true)
  626. end
  627. function UIClimbingTowerView:GetTopPeakItemByIdx(idx)
  628. local item = self.scrollview.loopListView:GetShownItemByItemIndex(idx - 1)
  629. if item then
  630. local itemlua = CommonUtil.GetBindGridViewItem2Lua(self, "ClimbingTowerTopItem", item.gameObject)
  631. return itemlua
  632. end
  633. end
  634. function UIClimbingTowerView:OnPeakTowerBuyClick(button, params)
  635. self.curBuyIdx = params[0]
  636. local data = {"PeakTowerBuyTips", {params[1]}, nil, self, self.ConfirmBuy}
  637. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  638. end
  639. function UIClimbingTowerView:ConfirmBuy()
  640. if not self.curBuyIdx then return end
  641. self.controller:SendPeakTowerBuyReq(self.curBuyIdx)
  642. end
  643. function UIClimbingTowerView:OnPeakTowerChallengeClick(button, params)
  644. local floorIdx = params[0]
  645. self.controller:SendChallengeReq(floorIdx)
  646. end
  647. function UIClimbingTowerView:OnCheckFightInfo(button, params)
  648. local idx = params[0]
  649. self.controller:QueryCrossFightInfo(idx)
  650. end
  651. function UIClimbingTowerView:GetRewardItemByRowColumn(gridView, itemIndex, row, column)
  652. if not self.curPeakTowerItemRewardData then
  653. return nil
  654. end
  655. local showData = self.curPeakTowerItemRewardData[itemIndex + 1]
  656. if not showData then
  657. return nil
  658. end
  659. local item = gridView:NewListViewItem("IconSmallItem")
  660. local itemlua = CommonUtil.BindGridViewItem2Lua(self, "IconItem", item.gameObject)
  661. local data = {cfgId = showData[1], num = showData[2]}
  662. IconItemCtr:SetData(self, itemlua, data, Enum.ItemIEnterType.Bag, self, self.OnItemClick)
  663. return item
  664. end
  665. function UIClimbingTowerView:OnItemClick(button,params)
  666. ManagerContainer.LuaUIMgr:OpenTips(params[0])
  667. end
  668. function UIClimbingTowerView:SetSpecialData(itemlua,itemId,itemCnt)
  669. CommonUtil.SetRewardItemData(self,itemId,itemlua,itemCnt, self.OnClickItem)
  670. itemlua:SetActive(true)
  671. end
  672. function UIClimbingTowerView:GetItemGo(levelLua,idx)
  673. if idx == 1 then
  674. return levelLua.bonusNode.items.item1
  675. elseif idx ==2 then
  676. return levelLua.bonusNode.items.item2
  677. else
  678. return levelLua.bonusNode.items.item3
  679. end
  680. end
  681. function UIClimbingTowerView:HideAllItems(levelLua)
  682. for i = 1, 3 do
  683. local go = self:GetItemGo(levelLua,i)
  684. go:SetActive(false)
  685. end
  686. end
  687. function UIClimbingTowerView:OnClickItem(btn,params)
  688. local logicData = params[0]
  689. ManagerContainer.LuaUIMgr:OpenTips(logicData)
  690. end
  691. function UIClimbingTowerView:OnClickClose()
  692. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UIMAINVIEW_CHANGE_NOTICE, Enum.MainViewPageType.Town)
  693. ManagerContainer.LuaUIMgr:OpenSourceUI(self)
  694. end
  695. function UIClimbingTowerView:OnDragScrollView()
  696. self.controller:SendFriendPassTowerInfo()
  697. end
  698. function UIClimbingTowerView:OnFightPowerAck(data)
  699. local bIsOpen = true
  700. if self.controller == nil then return end
  701. if nil ~= data.min_tower_info then
  702. --LogError(Inspect(data.min_tower_info))
  703. local info = data.min_tower_info
  704. local levelInfo = self.controller:GetLevelInfo(info.tower_level)
  705. bIsOpen = tonumber(self.lastClickViewInfo) == tonumber(info.tower_level)
  706. if levelInfo ~= nil then
  707. levelInfo:SetLowestPlayerInfo(info.brief,info.fight_power,info.record_time,info.battle_time)
  708. end
  709. end
  710. if bIsOpen then
  711. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerLevelInfo,self.lastClickViewInfo)
  712. end
  713. end
  714. function UIClimbingTowerView:OnClickViewLevelInfo(btn,param)
  715. local levelId = param[0]
  716. self.lastClickViewInfo = levelId
  717. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_TOWER_LEVEL_MIN_FIGHT_POWER_REQ, {tower_level = levelId})
  718. end
  719. function UIClimbingTowerView:OnClickChallengeBtn(btn,param)
  720. local levelId = param[0]
  721. if levelId ~= self.controller:GetCurTowerFloorIdx() then
  722. return
  723. end
  724. self.controller:EnterBattle(levelId)
  725. end
  726. function UIClimbingTowerView:OnClickFriendBtn(btn,param)
  727. local levelId = param[0]
  728. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerFriendInfo,levelId)
  729. end
  730. function UIClimbingTowerView:OnClickRank()
  731. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerRank)
  732. end
  733. function UIClimbingTowerView:OnClickPlayRuleBtn()
  734. local type = self.controller:GetCurTowerType()
  735. if type == Enum.UnlimitTowerType.ClimbingTower then
  736. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', 'PracticeTowerPlayExplain'})
  737. elseif type == Enum.UnlimitTowerType.PeakTower then
  738. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', 'TopTowerRule'})
  739. end
  740. end
  741. function UIClimbingTowerView:OnClickBtnStatistics()
  742. if LuaBattleBridge.HasStatistics(BattleMode.Time,BattleSubMode.ClimbingTower) then
  743. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattleStatistics,{BattleMode.Time,BattleSubMode.ClimbingTower})
  744. else
  745. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("NullBattleInformation2")
  746. end
  747. end
  748. function UIClimbingTowerView:ShowTowerMode()
  749. -- local type = self.controller:GetCurTowerType()
  750. -- if type == Enum.UnlimitTowerType.ClimbingTower then
  751. -- elseif type == Enum.UnlimitTowerType.PeakTower then
  752. -- end
  753. local TDMgr = ManagerContainer.DataMgr.TowerDataMgr
  754. local tmode = TDMgr:GetTowerMode()
  755. self.towerModes:SetActive(true)
  756. self:RefTowerModeBtn(tmode)
  757. end
  758. function UIClimbingTowerView:RefTowerModeBtn(cmode)
  759. local curMode = cmode
  760. local AllMode = {0,1,2} ---0 c 1 P 2 W
  761. -- local emUnlockLevel = GlobalConfig.Instance:GetConfigIntValue(365)
  762. -- local curLevel = ManagerContainer.LuaBattleMgr:GetCurDiffLvID()
  763. -- if(curLevel >= emUnlockLevel)then
  764. -- table.insert(AllMode,2)
  765. -- end
  766. local needShowModeBtn = {}
  767. for _, v in ipairs(AllMode) do
  768. if v ~= curMode then
  769. table.insert(needShowModeBtn,v)
  770. end
  771. end
  772. self.modeNode.loopVerticalScrollRect:ClearCells()
  773. CommonUtil.LoopGridViewEleCreateNew(self,
  774. self.modeNode.loopVerticalScrollRect,
  775. self.content.verticalLayoutGroup,
  776. needShowModeBtn,
  777. 0,
  778. self,
  779. self.UpdateModeNode,
  780. nil, nil, 0);
  781. end
  782. function UIClimbingTowerView:UpdateModeNode(_itemLua, _idx,_data)
  783. if not _itemLua or not _data then return end
  784. CommonUtil.UpdateItemPrefab(self, _itemLua, _data, nil,self,self.OnClickTowerMode)
  785. end
  786. function UIClimbingTowerView:OnClickTowerMode(btn, data)
  787. -- LogError("点击 data = " ..Inspect(data))
  788. local mdata = data[0]
  789. local TDMgr = ManagerContainer.DataMgr.TowerDataMgr
  790. local tmode = TDMgr:GetTowerMode()
  791. if mdata < 2 then
  792. if tmode >= 2 then
  793. local type = self.controller:GetCurTowerType()
  794. if mdata ~= type then
  795. --self.controller:SetCurTowerType(1 - mdata)
  796. self:OnBtnTowerClick()
  797. else
  798. self.cover:SetActive(true)
  799. -- 保护机制 5秒后关闭云
  800. if not self.cloudTimer then
  801. self.cloudTimer = Timer.New(slot(self.CloudOut, self), 1)
  802. end
  803. if not self.cloudTimer.running then
  804. self.cloudTimer:Start()
  805. end
  806. end
  807. else
  808. self:OnBtnTowerClick()
  809. end
  810. else
  811. self.cover:SetActive(true)
  812. -- 保护机制 5秒后关闭云
  813. if not self.cloudTimer then
  814. self.cloudTimer = Timer.New(slot(self.CloudOut, self), 1)
  815. end
  816. if not self.cloudTimer.running then
  817. self.cloudTimer:Start()
  818. end
  819. end
  820. self.scrollview:SetActive(mdata ~= 2)
  821. TDMgr:SetTowerMode(mdata)
  822. self.towerModes:SetActive(false)
  823. end
  824. function UIClimbingTowerView:CloseModeNode()
  825. self.towerModes:SetActive(false)
  826. end
  827. function UIClimbingTowerView:RefWJNpcView()
  828. -- for i=1, #levelData.npcs do
  829. -- local npc = levelData.npcs[i]
  830. -- if npc.npcImg ~= nil then
  831. -- if i == 1 then
  832. -- self:SetNpcInfo(levelLua.npcList.npcLevel1,levelLua.npcList.npc1,levelLua.npcList.natureIcon1,npc,levelData.levelId)
  833. -- elseif i == 2 then
  834. -- self:SetNpcInfo(levelLua.npcList.npcLevel2,levelLua.npcList.npc2,levelLua.npcList.natureIcon2,npc,levelData.levelId)
  835. -- elseif i == 3 then
  836. -- self:SetNpcInfo(levelLua.npcList.npcLevel3,levelLua.npcList.npc3,levelLua.npcList.natureIcon3,npc,levelData.levelId)
  837. -- elseif i == 4 then
  838. -- self:SetNpcInfo(levelLua.npcList.npcLevel4,levelLua.npcList.npc4,levelLua.npcList.natureIcon4,npc,levelData.levelId)
  839. -- end
  840. -- end
  841. -- end
  842. end
  843. return UIClimbingTowerView