UIDojo2DView.lua 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. local UIDojo2DView = require("UIDojo/UIDojo2DView_Generate")
  2. local RoleListItemCtr = require("Common/RoleListItemCtr")
  3. local IconItemCtr = require("Common/IconItemCtr")
  4. function UIDojo2DView:OnAwake(data)
  5. self.controller = require("UIDojo/UIDojo2DCtr"):new()
  6. self.controller:Init(self)
  7. self.controller:SetData(data)
  8. end
  9. function UIDojo2DView:AddEventListener()
  10. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Refresh_Arena_Season_LeftTime,self,self.OnRefreshSeasonTime);
  11. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Refresh_Arena_Team_FightPower,self,self.UpdateTeamFighterPower);
  12. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Refresh_Arena_Data_Change,self,self.InitUIData);
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.EID_Refresh_Arena_Season_End,self,self.InitUIData);
  14. end
  15. function UIDojo2DView:FillContent(data, uiBase)
  16. self.uiBase = uiBase
  17. local gameObject = self.uiBase:GetRoot()
  18. if gameObject ~= nil then
  19. self.gameObject = gameObject
  20. self.transform = gameObject.transform
  21. end
  22. self:InitGenerate(self.transform, data)
  23. self:Init()
  24. end
  25. function UIDojo2DView:Init()
  26. self.instGoes = nil
  27. self.curSelectedUid = 0
  28. self.lastSelectedIdx = 0
  29. self:HideAllSelectedActorGO()
  30. self:InitUIData()
  31. self:LoadOtherUI()
  32. end
  33. function UIDojo2DView:LoadOtherUI()
  34. self.isLoading = true
  35. ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_Dojo_UIPart_Loaded,self,self.OnUIPartLoaded);
  36. local partResPaths = {"UIDojo/SelectedHero","UIDojo/Portrait"}
  37. local seqId = ManagerContainer.ResMgr:LoadAssetGameObjects(Constants.UIPath, ELoadType.OTHER, function(objs)
  38. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Dojo_UIPart_Loaded,objs)
  39. end, unpack(partResPaths))
  40. end
  41. function UIDojo2DView:OnUIPartLoaded(objs)
  42. ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_Dojo_UIPart_Loaded,self,self.OnUIPartLoaded);
  43. self.instGoes = {}
  44. self.isLoading = false
  45. local selectedPrefab = objs[0]
  46. local rolePrefab = objs[1]
  47. for i=1, 6 do
  48. local memberNode = self:GetTeamMemberGo(i)
  49. local go = UnityEngine.GameObject.Instantiate(rolePrefab)
  50. go:SetActive(true)
  51. local rectTransform = go:GetComponent(Enum.TypeInfo.RectTransform)
  52. rectTransform:SetParent(memberNode.transform, false);
  53. rectTransform.localRotation = Quaternion.identity;
  54. rectTransform.localScale = Vector3(1,1,1);
  55. rectTransform.anchorMin = Vector2 (0, 0);
  56. rectTransform.anchorMax = Vector2(1.0, 1.0);
  57. rectTransform.pivot = Vector2 (0.5, 0.5);
  58. rectTransform.anchoredPosition3D = Vector3(0,0,0);
  59. rectTransform.sizeDelta = Vector2(0,0);
  60. self.instGoes[#self.instGoes+1] = go
  61. memberNode.roleLua = CommonUtil.BindGridViewItem2Lua(self, "Portrait", go)
  62. end
  63. for i=1,4 do
  64. local charGo = self:GetBattleActorGo(i)
  65. local go = UnityEngine.GameObject.Instantiate(selectedPrefab)
  66. go:SetActive(true)
  67. local rectTransform = go:GetComponent(Enum.TypeInfo.RectTransform)
  68. rectTransform:SetParent(charGo.transform, false);
  69. rectTransform.localRotation = Quaternion.identity;
  70. rectTransform.localScale = Vector3(1,1,1);
  71. rectTransform.anchorMin = Vector2 (0, 0);
  72. rectTransform.anchorMax = Vector2(1.0, 1.0);
  73. rectTransform.pivot = Vector2 (0.5, 0.5);
  74. rectTransform.anchoredPosition3D = Vector3(0,0,0);
  75. rectTransform.sizeDelta = Vector2(0,0);
  76. self.instGoes[#self.instGoes+1] = go
  77. charGo.heroLua = CommonUtil.BindGridViewItem2Lua(self, "SelectedHero", go)
  78. end
  79. self:SetTeamData()
  80. end
  81. function UIDojo2DView:RemoveEventListener()
  82. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  83. end
  84. function UIDojo2DView:AddUIEventListener()
  85. self.uiBase:AddButtonEventListener(self.backBtn.button,self, self.OnClickBackBtn)
  86. self.uiBase:AddButtonEventListener(self.matchBtn.button,self, self.OnClickMatchBtn)
  87. self.uiBase:AddButtonEventListener(self.rankBtn.button,self, self.OnClickRankBtn)
  88. self.uiBase:AddButtonEventListener(self.shopBtn.button,self, self.OnClickShopBtn)
  89. self.uiBase:AddButtonEventListener(self.buyTimesBtn.button,self, self.OnClickBuyTimesBtn)
  90. self.uiBase:AddButtonEventListener(self.playRuleBtn.button, self, self.OnClickPlayRuleBtn)
  91. end
  92. function UIDojo2DView:OnHide()
  93. end
  94. function UIDojo2DView:OnShow(data)
  95. self.controller:SetData(data)
  96. end
  97. function UIDojo2DView:OnClose()
  98. for i=1, 6 do
  99. local go = self:GetTeamMemberGo(i)
  100. if go~= nil then
  101. local pos = go.rectTransform.anchoredPosition3D
  102. pos.y = 0
  103. go.rectTransform.anchoredPosition3D = pos
  104. end
  105. end
  106. AvatarRTMgr.Instance:Hide()
  107. end
  108. function UIDojo2DView:OnDispose()
  109. self:DestroyGOes()
  110. self.controller:OnDispose()
  111. end
  112. function UIDojo2DView:UpdateTeamFighterPower()
  113. local TotalPower = 0
  114. local battleActorIds = ManagerContainer.DataMgr.ArenaData:GetTeamActorIds()
  115. for i = 1, #battleActorIds do
  116. local Power = ManagerContainer.DataMgr.UserData:GetAsideFighterSvrPower(battleActorIds[i],false)
  117. if nil ~= Power and -1 ~= Power then
  118. TotalPower = TotalPower + Power
  119. local PetPower = ManagerContainer.DataMgr.UserData:GetAsideFighterSvrPower(battleActorIds[i],true)
  120. if nil ~= PetPower and -1 ~= PetPower then
  121. TotalPower = TotalPower + PetPower
  122. end
  123. else
  124. --local power
  125. Power = ManagerContainer.DataMgr.UserData:GetSlotFightPower(battleActorIds[i])
  126. TotalPower = TotalPower + Power
  127. end
  128. end
  129. self.fighterPowerText.text.text = TotalPower
  130. end
  131. function UIDojo2DView:OnRefreshSeasonTime(leftTime)
  132. if ManagerContainer.DataMgr.ArenaData:InSeason() then
  133. self.seasonEndTimeText.text.text = DateTimeUtil.convertSeconds2TimeStr(leftTime,false)
  134. self.seasonEndTimeText.lbl:SetActive(true)
  135. else
  136. self.nextSeasonTimeText.text.text = DateTimeUtil.convertSeconds2TimeStr(leftTime,false)
  137. self.seasonEndTimeText.text.text = I18N.T("DscSeasonResult6");
  138. self.seasonEndTimeText.lbl:SetActive(false)
  139. end
  140. end
  141. function UIDojo2DView:InitUIData()
  142. ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIDojoExit)
  143. self:UpdateDanInfo()
  144. self:UpdateTeamFighterPower()
  145. self:OnRefreshSeasonTime(ManagerContainer.DataMgr.ArenaData:GetLeftTime())
  146. self:SetSeasonNode()
  147. self:ShowCurRewardItem()
  148. end
  149. function UIDojo2DView:ShowCurRewardItem()
  150. local itemId = ManagerContainer.DataMgr.ArenaData:GetCurShowRewardItemId()
  151. if itemId == 0 then
  152. self.rewardItem:SetActive(false)
  153. self.rewardItemName:SetActive(false)
  154. else
  155. IconItemCtr:SetData(self,self.rewardItem,{cfgId = itemId},nil,self,self.OnClickRewardItem)
  156. local itemData = ManagerContainer.CfgMgr:GetItemById(itemId)
  157. if itemData~=nil then
  158. self.rewardItemName.text.text = itemData.Name
  159. end
  160. end
  161. end
  162. function UIDojo2DView:OnClickRewardItem()
  163. local dan = 1;
  164. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoReward, dan)
  165. end
  166. function UIDojo2DView:SetSeasonNode()
  167. if ManagerContainer.DataMgr.ArenaData:InSeason() then
  168. self.curSeasonNode:SetActive(true)
  169. self.nextSeasonNode:SetActive(false)
  170. else
  171. self.curSeasonNode:SetActive(false)
  172. self.nextSeasonNode:SetActive(true)
  173. end
  174. end
  175. function UIDojo2DView:UpdateDanInfo()
  176. local arenaData = ManagerContainer.DataMgr.ArenaData
  177. if arenaData.winRate == 0 then
  178. self.winRateText.text.text = "无"
  179. else
  180. self.winRateText.text.text = CommonUtil.GetPreciseDecimal(arenaData.winRate*100,0) .. "%"
  181. end
  182. if arenaData.nextDanScore > 1000000 then
  183. self.curRankScoreText.text.text = tostring(arenaData.danScore) .. "/--"
  184. else
  185. self.curRankScoreText.text.text = tostring(arenaData.danScore) .. "/" .. tostring(arenaData.nextDanScore)
  186. end
  187. if arenaData.nextDanScore > 0 then
  188. self.scoreSlider.slider.value = arenaData.danScore / arenaData.nextDanScore
  189. else
  190. self.scoreSlider.slider.value = 1
  191. end
  192. self.rankName.text.text = tostring(arenaData.danName)
  193. if arenaData.danIcon~= nil and arenaData.danIcon ~= "" then
  194. CommonUtil.LoadIcon(self, arenaData.danIcon, function (sprite)
  195. self.rankIcon.image.sprite = sprite
  196. end)
  197. end
  198. local maxCnt = 5
  199. if arenaData:GetLeftTimes() > 5 then
  200. maxCnt = arenaData:GetLeftTimes()
  201. end
  202. self.leftTimesText.text.text = tostring(arenaData:GetLeftTimes())
  203. self.leftRewardTimesText.text.text = I18N.SetLanguageValue("TodayRewardTimes", arenaData:GetLeftRewardTimes()) --"今日还可获得"..tostring(arenaData:GetLeftRewardTimes()).."次积分货币"
  204. --判断是否要显示段位升级
  205. local _lastDan, _ = CommonUtil.GetCurDunData(arenaData.lastDanScore);
  206. local _curDan, _ = CommonUtil.GetCurDunData(arenaData.danScore);
  207. if _lastDan ~= nil and _curDan ~= nil then
  208. if _lastDan.ArenaLevelId < _curDan.ArenaLevelId then
  209. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoBadgeUp);
  210. end
  211. end
  212. end
  213. function UIDojo2DView:OnClickShopBtn()
  214. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIShop, 2, self.uiData.id) --开启英灵殿商店
  215. end
  216. function UIDojo2DView:OnClickBackBtn()
  217. if AvatarRTMgr.Instance.IsLoading or self.isLoading then
  218. return
  219. end
  220. AvatarRTMgr.Instance:Hide()
  221. ManagerContainer.LuaUIMgr:OpenSourceUI(self)
  222. end
  223. function UIDojo2DView:OnClickMatchBtn()
  224. self.controller:SendMatch()
  225. end
  226. function UIDojo2DView:OnClickRankBtn()
  227. ManagerContainer.DataMgr.ArenaData:SendArenaRankReq(0,1)
  228. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoRank)
  229. end
  230. function UIDojo2DView:OnClickBuyTimesBtn()
  231. local costStr = GlobalConfig.Instance:GetConfigStrValue(109)
  232. local cost = 0
  233. if costStr~=nil and costStr~="" then
  234. local intVals = string.split(costStr,':')
  235. cost = intVals[2]
  236. end
  237. local BuyTimes = ManagerContainer.DataMgr.ArenaData:GetLeftBuyTimes()
  238. local fucIsCanBuy = function(singlecost,count)
  239. return self:IsCanBuyTimes(singlecost,count)
  240. end
  241. local fucBuyOk = function(count)
  242. self:SureBuyTimes(count)
  243. end
  244. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBuyTimes, {cost, BuyTimes ,fucIsCanBuy,fucBuyOk })
  245. end
  246. function UIDojo2DView:IsCanBuyTimes(singlecost,count)
  247. local AllCost = singlecost * count
  248. local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
  249. if Goldcount >= AllCost then
  250. return true
  251. end
  252. return false
  253. end
  254. function UIDojo2DView:SureBuyTimes(count)
  255. ManagerContainer.DataMgr.ArenaData:SendBuyTimesReq(count)
  256. end
  257. function UIDojo2DView:OnClickPlayRuleBtn()
  258. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', 'ValhallaPlayExplain'})
  259. end
  260. function UIDojo2DView:SetTeamData()
  261. local teamDatas = self.controller:GetTeams()
  262. for i = 1, #teamDatas do
  263. local go = self:GetTeamMemberGo(i)
  264. self:SetTeamMemberData(i,go,teamDatas[i])
  265. end
  266. local ourMembers = {}
  267. for i = 1, #teamDatas do
  268. if teamDatas[i].owned then
  269. local actor = ManagerContainer.LuaActorDataMgr:GetActorsById(teamDatas[i].uid,teamDatas[i].cfgId)
  270. if actor ~= nil then
  271. ourMembers[#ourMembers+1] = actor
  272. end
  273. end
  274. end
  275. AvatarRTMgr.Instance:LoadPreviewActors(ourMembers,self)
  276. end
  277. function UIDojo2DView:OnLoadCompleted()
  278. self:ShowBattleHeros()
  279. end
  280. function UIDojo2DView:SetTeamMemberData(idx,node,data)
  281. if node == nil or data == nil then
  282. return
  283. end
  284. RoleListItemCtr:SetData(self, node.roleLua.role, {idx, data.logicData, data.cfgData},self,self.OnClickHero)
  285. local _isBattle = ManagerContainer.DataMgr.ArenaData:IsInBattleTeam(data.uid);
  286. node.roleLua.selectedNode:SetActive(_isBattle)
  287. node.roleLua.role.labelUp:SetActive(_isBattle)
  288. node.roleLua.role.labelLead:SetActive(false)
  289. end
  290. function UIDojo2DView:SetBattleState(uid)
  291. local idx = self.controller:GetHeroIdx(uid)
  292. local go = self:GetTeamMemberGo(idx)
  293. if go == nil then
  294. return
  295. end
  296. local _isBattle = ManagerContainer.DataMgr.ArenaData:IsInBattleTeam(uid);
  297. go.roleLua.role.labelUp:SetActive(_isBattle)
  298. go.roleLua.selectedNode:SetActive(_isBattle)
  299. end
  300. function UIDojo2DView:OnClickHero(btn,params)
  301. local idx = params[0]
  302. local uid = params[1]
  303. local heroData = self.controller:GetHeroData(uid)
  304. if heroData == nil then
  305. return
  306. end
  307. if heroData.owned == false then
  308. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ArenaChangePartnerTips2")
  309. return
  310. end
  311. if ManagerContainer.DataMgr.ArenaData:IsInBattleTeam(uid) then
  312. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ArenaChangePartnerTips1")
  313. return
  314. end
  315. if ManagerContainer.DataMgr.ArenaData:CurMemberCnt() >= 4 then
  316. self:SelectedHero(idx,uid)
  317. else
  318. ManagerContainer.DataMgr.ArenaData:OnBattle(uid)
  319. self:SetBattleState(uid)
  320. self:ShowBattleHeros()
  321. end
  322. end
  323. function UIDojo2DView:SelectedHero(idx,uid)
  324. if self.lastSelectedIdx ~= idx then
  325. if self.lastSelectedIdx ~= nil then
  326. local go = self:GetTeamMemberGo(self.lastSelectedIdx)
  327. if go ~= nil then
  328. local pos = go.rectTransform.anchoredPosition3D
  329. pos.y = 0
  330. LuaBattleBridge.BeginTweenRecTransformPos(go,0.1,pos)
  331. end
  332. end
  333. local curGo = self:GetTeamMemberGo(idx)
  334. if curGo ~= nil then
  335. local pos = curGo.rectTransform.anchoredPosition3D
  336. pos.y = 30
  337. LuaBattleBridge.BeginTweenRecTransformPos(curGo,0.1,pos)
  338. end
  339. self.curSelectedUid = uid
  340. self.lastSelectedIdx = idx
  341. self:ShowReplaceBtn(true)
  342. else
  343. local curGo = self:GetTeamMemberGo(self.lastSelectedIdx)
  344. if curGo ~= nil then
  345. local pos = curGo.rectTransform.anchoredPosition3D
  346. pos.y = 0
  347. LuaBattleBridge.BeginTweenRecTransformPos(curGo,0.1,pos)
  348. end
  349. self:ShowReplaceBtn(false)
  350. self.lastSelectedIdx = 0
  351. end
  352. end
  353. function UIDojo2DView:ShowBattleHeros()
  354. local battleActorIds = ManagerContainer.DataMgr.ArenaData:GetTeamActorIds()
  355. if battleActorIds~= nil then
  356. for i = 1, #battleActorIds do
  357. local actorGo = self:GetBattleActorGo(i)
  358. self:SetBattleHeroData(battleActorIds[i],actorGo)
  359. end
  360. end
  361. end
  362. function UIDojo2DView:ShowReplaceBtn(vis)
  363. local battleActorIds = ManagerContainer.DataMgr.ArenaData:GetTeamActorIds()
  364. if battleActorIds~= nil then
  365. for i = 1, #battleActorIds do
  366. local actorGo = self:GetBattleActorGo(i)
  367. actorGo.heroLua.replaceBtn:SetActive(vis)
  368. end
  369. end
  370. end
  371. function UIDojo2DView:SetBattleHeroData(uid,node)
  372. local heroData = self.controller:GetHeroData(uid)
  373. if heroData == nil or node == nil then
  374. return
  375. end
  376. if heroData.mainRole then
  377. node.heroLua.heroName.text.text = ManagerContainer.DataMgr.UserData:GetUserNickname()
  378. else
  379. node.heroLua.heroName.text.text = I18N.T(heroData.cfgData.Name)
  380. end
  381. node.heroLua.heroLv.text.text = tostring(heroData.logicData.baseLevel)
  382. CommonUtil.LoadIcon(self, heroData.cfgData.JobIcon2, function (sprite)
  383. node.heroLua.jobIcon.image.sprite = sprite
  384. end)
  385. node.heroLua.heroImg.rawImage.texture = AvatarRTMgr.Instance:GetActorRT(uid)
  386. node.heroLua.replaceBtn:SetActive(false)
  387. self.uiBase:AddButtonUniqueEventListener(node.heroLua.replaceBtn.button, self, self.OnClickReplaceBtn, uid)
  388. node.heroLua.heroImg:SetActive(true)
  389. node:SetActive(true)
  390. end
  391. function UIDojo2DView:OnClickReplaceBtn(btn,param)
  392. local uid = param[0]
  393. if self.curSelectedUid ~= uid then
  394. ManagerContainer.DataMgr.ArenaData:ReplaceBattleActorId(uid,self.curSelectedUid)
  395. self:ShowBattleHeros()
  396. self:RestorePos(self.curSelectedUid)
  397. self:SetBattleState(self.curSelectedUid)
  398. self:SetBattleState(uid)
  399. self.curSelectedUid = 0
  400. end
  401. end
  402. function UIDojo2DView:RestorePos(uid)
  403. local idx = self.controller:GetHeroIdx(uid)
  404. local curGo = self:GetTeamMemberGo(idx)
  405. if curGo ~= nil then
  406. local pos = curGo.rectTransform.anchoredPosition3D
  407. pos.y = 0
  408. LuaBattleBridge.BeginTweenRecTransformPos(curGo,0.1,pos)
  409. end
  410. end
  411. function UIDojo2DView:GetTeamMemberGo(idx)
  412. if idx == 1 then
  413. return self.hero1
  414. elseif idx == 2 then
  415. return self.hero2
  416. elseif idx == 3 then
  417. return self.hero3
  418. elseif idx == 4 then
  419. return self.hero4
  420. elseif idx == 5 then
  421. return self.hero5
  422. elseif idx == 6 then
  423. return self.hero6
  424. end
  425. return nil
  426. end
  427. function UIDojo2DView:GetBattleActorGo(idx)
  428. if idx == 1 then
  429. return self.selectedHero1
  430. elseif idx == 2 then
  431. return self.selectedHero2
  432. elseif idx == 3 then
  433. return self.selectedHero3
  434. else
  435. return self.selectedHero4
  436. end
  437. end
  438. function UIDojo2DView:HideAllSelectedActorGO()
  439. for i = 1, 4 do
  440. local actorGo = self:GetBattleActorGo(i)
  441. actorGo:SetActive(false)
  442. end
  443. end
  444. function UIDojo2DView:DestroyGOes()
  445. if self.instGoes == nil then
  446. return
  447. end
  448. CommonUtil.ClearGridViewItem(self, "Portrait")
  449. CommonUtil.ClearGridViewItem(self, "SelectedHero")
  450. for i = 1, #self.instGoes do
  451. CommonUtil.DestroyGO(self.instGoes[i])
  452. end
  453. self.instGoes = nil
  454. end
  455. return UIDojo2DView