UIRoleChangeJobView.lua 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. local UIRoleChangeJobView = require("UIRoleMain/UIRoleChangeJobView_Generate")
  2. local RoleViewSystem = require("RoleViewSystem")
  3. local PreviewSystem = require("PreviewSystem")
  4. local roleViewSystem = nil
  5. local previewSystem = nil
  6. local oldJobId
  7. local nextJobDatas
  8. local pageToggleData = {}
  9. local isLeader = true
  10. local curIdx
  11. local curModel
  12. local WeightVals = {
  13. 150,250,250,250,150
  14. }
  15. local totalWeight
  16. local isMax = false
  17. function UIRoleChangeJobView:OnAwake(data)
  18. self.controller = require("UIRoleMain/UIRoleChangeJobCtr")
  19. self.controller:Init(self)
  20. self.controller:SetData(data)
  21. end
  22. function UIRoleChangeJobView:AddEventListener()
  23. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HERO_JOB_CHANGE_SUCCESS, function(id, isReplace)
  24. if not isReplace then
  25. self:RefreshSuccess()
  26. end
  27. end)
  28. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.JOB_CHANGE_SUCCESS_OVER, function(isReplace)
  29. if not isReplace then
  30. self:CloseSelf()
  31. end
  32. end)
  33. end
  34. function UIRoleChangeJobView:FillContent(data, uiBase)
  35. self.uiBase = uiBase
  36. local gameObject = self.uiBase:GetRoot()
  37. if gameObject ~= nil then
  38. self.gameObject = gameObject
  39. self.transform = gameObject.transform
  40. end
  41. self:InitGenerate(self.transform, data)
  42. self:Init()
  43. end
  44. function UIRoleChangeJobView:Init()
  45. self:Refresh()
  46. end
  47. function UIRoleChangeJobView:Refresh()
  48. if not roleViewSystem then
  49. roleViewSystem = RoleViewSystem:new()
  50. end
  51. curIdx = 1
  52. isLeader = self.controller:IsLeader()
  53. self.boardImage:SetActive(true)
  54. self.btnChangeJob:SetActive(true)
  55. oldJobId = self.controller:GetHeroCurJobId()
  56. local jobData
  57. if isLeader then
  58. jobData = ManagerContainer.CfgMgr:GetJobDataById(oldJobId)
  59. self.boardImage:SetActive(jobData.JobType > 0)
  60. self.btnChangeJob:SetActive(jobData.JobType > 0)
  61. else
  62. jobData = ManagerContainer.CfgMgr:GetPartnerDataById(oldJobId)
  63. end
  64. if jobData.JobStage >= GlobalConfig.Instance:GetConfigIntValue(103) then
  65. self.jobMax:SetActive(true)
  66. self.changeJob:SetActive(false)
  67. self.dscBox:SetActive(false)
  68. self.btnChange:SetActive(false)
  69. self.btnChange2:SetActive(false)
  70. isMax = true
  71. return
  72. else
  73. self.changeJob:SetActive(true)
  74. self.jobMax:SetActive(false)
  75. self.dscBox:SetActive(true)
  76. self.btnChange:SetActive(true)
  77. self.btnChange2:SetActive(false)
  78. end
  79. nextJobDatas = self.controller:GetNextJobDatas(oldJobId)
  80. self:RefreshNextJobsToggle()
  81. if not previewSystem then
  82. previewSystem = PreviewSystem:new("Transfer", 512, 512)
  83. previewSystem:SetView(Vector3(-0.116, 1.649, 2.5), Quaternion.Euler(12.174, -182.628, 0.085))
  84. end
  85. if isLeader then
  86. if nextJobDatas then
  87. local nextJob = nextJobDatas[1]
  88. if nextJob ~= nil then
  89. local jobStage = nextJob.JobStage
  90. if jobStage == 1 then
  91. totalWeight = 0
  92. local minNum = math.min(#nextJobDatas, #WeightVals)
  93. for i = 1, minNum do
  94. totalWeight = totalWeight + WeightVals[i]
  95. end
  96. math.randomseed(os.time())
  97. local rdm = math.random(0, totalWeight)
  98. local curWeight = 0
  99. for i = 1, minNum do
  100. curWeight = curWeight + WeightVals[i]
  101. if rdm <= curWeight then
  102. curIdx = i
  103. return
  104. end
  105. end
  106. end
  107. end
  108. end
  109. end
  110. end
  111. function UIRoleChangeJobView:RefreshNextJobsToggle()
  112. local idx = 0
  113. if nextJobDatas then
  114. idx = #nextJobDatas
  115. for i = 1, idx do
  116. local item = self["job"..i]
  117. item:SetActive(true)
  118. local jobData = nextJobDatas[i]
  119. CommonUtil.LoadIcon(self, jobData.JobIcon, function (sprite)
  120. item.jobIcon.image.sprite = sprite
  121. end)
  122. item.jobName.text.text = I18N.T(jobData.JobName)
  123. end
  124. end
  125. for i = idx + 1, 5 do
  126. self["job"..i]:SetActive(false)
  127. end
  128. end
  129. function UIRoleChangeJobView:SelectNextJob(index)
  130. if isMax then return end
  131. curIdx = index
  132. self.controller:SetIdx(index)
  133. self:RefreshPreview()
  134. self:RefreshNextJobConds()
  135. end
  136. function UIRoleChangeJobView:Recycle()
  137. if curModel ~= nil then
  138. curModel:SetActive(false)
  139. previewSystem:RemoveGo(curModel)
  140. roleViewSystem:Recycle()
  141. curModel = nil
  142. end
  143. end
  144. function UIRoleChangeJobView:RefreshPreview()
  145. local jobData = nextJobDatas[curIdx]
  146. self.desc.uILocalizeScript:SetContent(jobData.Desc)
  147. self:Recycle()
  148. if isLeader then
  149. self:RefreshDefaultRoleView(Enum.RoleInEnvType.RoleMainView)
  150. else
  151. self:RefreshPartnerView(Enum.RoleInEnvType.RoleMainView, jobData.ParterId)
  152. end
  153. self.model.rawImage.texture = previewSystem:GetRenderTexture()
  154. end
  155. function UIRoleChangeJobView:RefreshSuccess()
  156. local curCfgData = nextJobDatas[curIdx]
  157. self:Recycle(curCfgData.ParterId)
  158. local data = {2, previewSystem, isLeader, roleViewSystem, oldJobId, isLeader and curCfgData.Id or curCfgData.ParterId}
  159. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UITransPerform, data, self.uiData.id)
  160. end
  161. function UIRoleChangeJobView:CloseSucceed()
  162. ManagerContainer.LuaUIMgr:OpenSourceUI(self, self.controller:GetData())
  163. end
  164. function UIRoleChangeJobView:RefreshOldRoleView(roleInEnvType)
  165. local userData = ManagerContainer.DataMgr.UserData
  166. local jobId = oldJobId
  167. local roleId = CommonUtil.JobIdToRoleId(jobId, userData:GetSex())
  168. self:RefreshRoleView(roleInEnvType, roleId, nil, nil)
  169. end
  170. function UIRoleChangeJobView:RefreshDefaultRoleView(roleInEnvType)
  171. local userData = ManagerContainer.DataMgr.UserData
  172. local jobData = nextJobDatas[curIdx]
  173. local jobId = jobData.Id
  174. local roleId = CommonUtil.JobIdToRoleId(jobId, userData:GetSex())
  175. self:RefreshRoleView(roleInEnvType, roleId, nil, nil)
  176. end
  177. function UIRoleChangeJobView:RefreshPartnerView(roleInEnvType, partnerCfgId)
  178. if partnerCfgId == nil then return nil end
  179. return roleViewSystem:RefreshView(roleInEnvType, partnerCfgId, nil, nil, self, self.LoadModelCB)
  180. end
  181. function UIRoleChangeJobView:RefreshNextJobConds()
  182. self.scrollView.loopVerticalScrollRect:ClearCells()
  183. if not nextJobDatas or not nextJobDatas[curIdx] then
  184. self.btnChange:SetActive(false)
  185. self.btnChange2:SetActive(false)
  186. return
  187. end
  188. local beforeId = nextJobDatas[curIdx].BeforeJobId
  189. if beforeId == 0 then
  190. self.btnChange:SetActive(false)
  191. self.btnChange2:SetActive(false)
  192. return
  193. end
  194. local uid = self.controller:GetData()
  195. local jobData
  196. if isLeader then
  197. jobData = ManagerContainer.CfgMgr:GetJobDataById(beforeId)
  198. else
  199. jobData = ManagerContainer.CfgMgr:GetPartnerDataById(beforeId)
  200. end
  201. CommonUtil.LoopGridViewEleCreate(self, self.scrollView.loopVerticalScrollRect, self.content.gridLayoutGroup, jobData.ChangeCond, 0, function (itemLua, idx)
  202. local condId = jobData.ChangeCond[idx + 1]
  203. local task = ManagerContainer.DataMgr.TaskDataNew:GetChangeJobTaskData(uid, condId)
  204. if task ~= nil then
  205. local data = {condId = condId, tasks = task}
  206. CommonUtil.UpdateItemPrefab(self, itemLua, data)
  207. end
  208. itemLua:SetActive(task ~= nil)
  209. end)
  210. local itemCosts = jobData.ItemCost
  211. local show = false
  212. if itemCosts then
  213. for i = 1, #itemCosts do
  214. local itemCost = itemCosts[i]
  215. if itemCost then
  216. local itemCfgId = itemCost[1]
  217. local costNum = itemCost[2]
  218. local itemCfgData = ManagerContainer.CfgMgr:GetItemById(itemCfgId)
  219. if itemCfgData then
  220. self.btnChange2.ic.image.enabled = false
  221. self.btnChange2.ic.image.sprite = nil
  222. CommonUtil.LoadIcon(self, itemCfgData.MiniIcon, function(sprite)
  223. if sprite then
  224. self.btnChange2.ic.image.sprite = sprite
  225. self.btnChange2.ic.image.enabled = true
  226. end
  227. end)
  228. local ownNum = CommonUtil.GetOwnResCountByItemId(itemCfgId)
  229. local content = (tostring(ownNum) .. '/' .. tostring(costNum))
  230. if ownNum < costNum then
  231. content = string.format(Constant.PinkColorText, content)
  232. end
  233. self.btnChange2.cost.text.text = content
  234. show = true
  235. end
  236. end
  237. end
  238. end
  239. self.btnChange:SetActive(not show)
  240. self.btnChange2:SetActive(show)
  241. end
  242. function UIRoleChangeJobView:RefreshRoleView(roleInEnvType, roleId, viewData, extGoesShowData)
  243. roleViewSystem:RefreshView(roleInEnvType, roleId, viewData, extGoesShowData, self, self.LoadModelCB)
  244. end
  245. function UIRoleChangeJobView:LoadModelCB(model)
  246. curModel = model
  247. if previewSystem then
  248. previewSystem:UpdateGo(model)
  249. end
  250. curModel:SetActive(true)
  251. end
  252. function UIRoleChangeJobView:RemoveEventListener()
  253. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  254. end
  255. function UIRoleChangeJobView:CloseSelf()
  256. ManagerContainer.LuaUIMgr:OpenSourceUI(self, self.controller:GetData())
  257. end
  258. function UIRoleChangeJobView:RefreshNoticeUI()
  259. local jobData = nextJobDatas[curIdx]
  260. --self.dscBox.jobName.uILocalizeScript:SetContent(jobData.Name)
  261. --self.noticeUI:SetActive(true)
  262. local data
  263. if isLeader then
  264. data = {"ChangeJob", {I18N.T(jobData.JobName)}, jobData, self, self.ChangeSure}
  265. else
  266. data = {"ChangeJob1", {I18N.T(jobData.JobName)}, jobData, self, self.ChangeSure}
  267. end
  268. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  269. end
  270. function UIRoleChangeJobView:CloseSureUI()
  271. self.noticeUI:SetActive(false)
  272. end
  273. function UIRoleChangeJobView:SendChange()
  274. if not self:CheckChangeJobCont() then
  275. return
  276. end
  277. self:RefreshNoticeUI()
  278. end
  279. function UIRoleChangeJobView:SendChange2()
  280. if not self:CheckChangeJobCont() then
  281. return
  282. end
  283. self:RefreshNoticeUI()
  284. end
  285. function UIRoleChangeJobView:CheckChangeJobCont()
  286. local beforeId = nextJobDatas[curIdx].BeforeJobId
  287. if beforeId == 0 then return false end
  288. local uid = self.controller:GetData()
  289. local jobData
  290. if isLeader then
  291. jobData = ManagerContainer.CfgMgr:GetJobDataById(beforeId)
  292. else
  293. jobData = ManagerContainer.CfgMgr:GetPartnerDataById(beforeId)
  294. end
  295. local changeConds = jobData.ChangeCond
  296. if changeConds then
  297. for i = 1, #changeConds do
  298. local changeCond = changeConds[i]
  299. if changeCond then
  300. local task = ManagerContainer.DataMgr.TaskDataNew:GetChangeJobTaskData(uid, changeCond)
  301. if task then
  302. if task.state == Enum.TaskStateType.NoCompeleted then
  303. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('ConditionOut')
  304. return false
  305. end
  306. end
  307. end
  308. end
  309. end
  310. local itemCosts = jobData.ItemCost
  311. if itemCosts then
  312. for i = 1, #itemCosts do
  313. local itemCost = itemCosts[i]
  314. if itemCost then
  315. local itemCfgId = itemCost[1]
  316. local costNum = itemCost[2]
  317. if CommonUtil.ResLackErrorNotice(itemCfgId, costNum) then
  318. return false
  319. end
  320. end
  321. end
  322. end
  323. return true
  324. end
  325. function UIRoleChangeJobView:ChangeSure()
  326. if not self:CheckChangeJobCont() then
  327. return
  328. end
  329. local jobData = nextJobDatas[curIdx]
  330. local jobId = isLeader and jobData.Id or jobData.ParterId
  331. self.controller:SendChangeJobReq(jobId)
  332. end
  333. function UIRoleChangeJobView:AddUIEventListener()
  334. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  335. CommonUtil.CreateToggleMouduleOnlyBtns(self, pageToggleData, self.group, curIdx, self.SelectNextJob)
  336. self.uiBase:AddButtonEventListener(self.btnBack.button, self, self.CloseSelf)
  337. --self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.CloseSureUI)
  338. self.uiBase:AddButtonEventListener(self.btnChange.button, self, self.SendChange)
  339. self.uiBase:AddButtonEventListener(self.btnChange2.button, self, self.SendChange2)
  340. --self.uiBase:AddButtonEventListener(self.btnSure.button, self, self.ChangeSure)
  341. --self.uiBase:AddButtonEventListener(self.btnCancle.button, self, self.CloseSureUI)
  342. self.uiBase:AddButtonEventListener(self.btnSkill.button, self, self.OnClickSkillBtn)
  343. self.uiBase:AddButtonEventListener(self.btnTest.button, self, self.RefreshSuccess)
  344. self.uiBase:AddButtonEventListener(self.btnChangeJob.button, self, self.OnChangeSameStageJob)
  345. self.model.uIEventTriggerListener.onDrag = function()
  346. local deltaX = self.model.uIEventTriggerListener.currentEventData.delta.x
  347. curModel.transform:Rotate(Vector3.New(0, deltaX > 0 and -7 or 7, 0))
  348. end
  349. end
  350. function UIRoleChangeJobView:OnHide()
  351. end
  352. function UIRoleChangeJobView:OnShow(data)
  353. self.controller:SetData(data)
  354. self:Refresh()
  355. self:SelectNextJob(curIdx)
  356. end
  357. function UIRoleChangeJobView:OnClose()
  358. pageToggleData = nil
  359. if self.loadSystem then
  360. self.loadSystem:Dispose()
  361. end
  362. self.loadSystem = nil
  363. DG.Tweening.DOTween.Kill(self.transform)
  364. self.scrollView.loopVerticalScrollRect:ClearCells()
  365. self.model.uIEventTriggerListener.onDrag = nil
  366. pageToggleData = nil
  367. curModel = nil
  368. if previewSystem then
  369. previewSystem:Dispose(true)
  370. end
  371. previewSystem = nil
  372. if roleViewSystem then
  373. roleViewSystem:Dispose()
  374. end
  375. roleViewSystem = nil
  376. end
  377. function UIRoleChangeJobView:OnDispose()
  378. self.controller:OnDispose()
  379. end
  380. function UIRoleChangeJobView:OnClickSkillBtn()
  381. local heroId = self.controller:GetData()
  382. local curJobData = nextJobDatas[curIdx]
  383. if curJobData then
  384. local id = isLeader and curJobData.Id or curJobData.ParterId
  385. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISkillPreview, {heroId = heroId, id = id})
  386. else
  387. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('FunctionLock')
  388. end
  389. end
  390. function UIRoleChangeJobView:OnChangeSameStageJob()
  391. local canChanged = false
  392. if isLeader then
  393. local jobData = ManagerContainer.CfgMgr:GetJobDataById(oldJobId)
  394. canChanged = jobData.JobStage > 0
  395. else
  396. local jobData = ManagerContainer.CfgMgr:GetPartnerDataById(oldJobId)
  397. canChanged = jobData.JobStage > 1
  398. end
  399. if not canChanged then
  400. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ChangeJobDscTxt_5")
  401. return
  402. end
  403. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRoleChangeJobTips, self.controller:GetData(), self.uiData.id)
  404. end
  405. return UIRoleChangeJobView