UIRoleChangeJobTipsView.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. local UIRoleChangeJobTipsView = require("UIRoleMain/UIRoleChangeJobTipsView_Generate")
  2. local RoleViewSystem = require("RoleViewSystem")
  3. local PreviewSystem = require("PreviewSystem")
  4. local roleViewSystem = nil
  5. local previewSystem = nil
  6. local oldJobId
  7. local jobDatas
  8. local pageToggleData = {}
  9. local isLeader = true
  10. local curIdx
  11. local curModel
  12. local canTransfer = false
  13. local needCost = false
  14. local enoughCost = true
  15. local costKey
  16. local costNum = 0
  17. function UIRoleChangeJobTipsView:OnAwake(data)
  18. self.controller = require("UIRoleMain/UIRoleChangeJobTipsCtr"):new()
  19. self.controller:Init(self)
  20. self.controller:SetData(data)
  21. end
  22. function UIRoleChangeJobTipsView:AddEventListener()
  23. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  24. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HERO_JOB_CHANGE_SUCCESS, function(id, isReplace)
  25. if isReplace then
  26. self:RefreshSuccess()
  27. end
  28. end)
  29. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.JOB_CHANGE_SUCCESS_OVER, function(isReplace)
  30. if isReplace then
  31. --self:CloseSelf()
  32. self:ClearToggles()
  33. self:Init(true)
  34. pageToggleData = {}
  35. CommonUtil.CreateToggleMouduleOnlyBtns(self, pageToggleData, self.content, curIdx, self.SelectSameStageJob)
  36. end
  37. end)
  38. end
  39. function UIRoleChangeJobTipsView:FillContent(data, uiBase)
  40. self.uiBase = uiBase
  41. local gameObject = self.uiBase:GetRoot()
  42. if gameObject ~= nil then
  43. self.gameObject = gameObject
  44. self.transform = gameObject.transform
  45. end
  46. self:InitGenerate(self.transform, data)
  47. self:Init()
  48. end
  49. function UIRoleChangeJobTipsView:Init(ignoreRandom)
  50. isLeader = self.controller:IsLeader()
  51. oldJobId = self.controller:GetHeroCurJobId()
  52. jobDatas = self.controller:GetSameStageJobDatas(oldJobId)
  53. if not ignoreRandom then
  54. curIdx = math.floor(math.random(1, #jobDatas))
  55. if isLeader then
  56. if jobDatas[curIdx].Id == oldJobId then
  57. curIdx = curIdx ~= 1 and 1 or curIdx + 1
  58. end
  59. else
  60. if jobDatas[curIdx].ParterId == oldJobId then
  61. curIdx = curIdx ~= 1 and 1 or 2
  62. end
  63. end
  64. end
  65. self:RefreshSameStageJobsToggle()
  66. if not previewSystem then
  67. previewSystem = PreviewSystem:new("Transfer", 512, 512)
  68. previewSystem:SetView(Vector3(-0.116, 1.649, 2.5), Quaternion.Euler(12.174, -182.628, 0.085))
  69. end
  70. if not roleViewSystem then
  71. roleViewSystem = RoleViewSystem:new()
  72. end
  73. self:RefreshCost()
  74. end
  75. function UIRoleChangeJobTipsView:RefreshCost()
  76. local cost = self.controller:GetCurChangeCost()
  77. if cost == true then
  78. needCost = false
  79. enoughCost = true
  80. self.btnChangeJob.image:SetActive(false)
  81. self.btnChangeJob.numcost.text.text = I18N.T("Free")
  82. else
  83. self.btnChangeJob.image:SetActive(true)
  84. costKey = tonumber(cost[1])
  85. costNum = tonumber(cost[2])
  86. local cfgData = ManagerContainer.CfgMgr:GetItemById(costKey)
  87. if cfgData then
  88. CommonUtil.LoadIcon(self, cfgData.Icon, function (sprite)
  89. self.btnChangeJob.image.image.sprite = sprite
  90. end)
  91. end
  92. local ownRes = CommonUtil.GetOwnResCountByItemId(costKey)
  93. self.btnChangeJob.numcost.text.text = costNum
  94. if ownRes < costNum then
  95. CommonUtil.SetTextColor(self.btnChangeJob.numcost.text, Constant.RedColorText);
  96. end
  97. needCost = true
  98. enoughCost = ownRes >= costNum
  99. end
  100. end
  101. function UIRoleChangeJobTipsView:RefreshSameStageJobsToggle()
  102. self.toggles = {}
  103. for i = 1, #jobDatas do
  104. local go = UnityEngine.GameObject.Instantiate(self.roleJobToggleItem.gameObject)
  105. go.transform:SetParent(self.content.transform)
  106. go.transform.localPosition = Vector3.zero
  107. go.transform.localRotation = Quaternion.identity
  108. go.transform.localScale = Vector3.one
  109. go:SetActive(true)
  110. local itemlua = CommonUtil.BindGridViewItem2Lua(self, self.roleJobToggleItem.prefabName, go)
  111. CommonUtil.LoadIcon(self, jobDatas[i].JobIcon, function (sprite)
  112. itemlua.jobIcon.image.sprite = sprite
  113. end, itemlua, "jobicon")
  114. itemlua.jobName.text.text = I18N.T(jobDatas[i].JobName)
  115. itemlua.toggle.group = self.content.toggleGroup
  116. itemlua.toggle.isOn = i == 1
  117. self.toggles[#self.toggles + 1] = itemlua
  118. end
  119. if #jobDatas > 6 then
  120. self.content.horizontalLayoutGroup.childAlignment = UnityEngine.TextAnchor.MiddleLeft
  121. self.content.rectTransform.anchorMin = Vector2 (0, 0.5);
  122. self.content.rectTransform.anchorMax = Vector2 (0, 0.5);
  123. self.content.rectTransform.pivot = Vector2 (0, 0.5);
  124. else
  125. self.content.horizontalLayoutGroup.childAlignment = UnityEngine.TextAnchor.MiddleCenter
  126. self.content.rectTransform.anchorMin = Vector2 (0.5, 0.5);
  127. self.content.rectTransform.anchorMax = Vector2 (0.5, 0.5);
  128. self.content.rectTransform.pivot = Vector2 (0.5, 0.5);
  129. end
  130. local pos = Vector3.zero
  131. pos.x = -curIdx * 128
  132. self.content.rectTransform.anchoredPosition = pos
  133. end
  134. function UIRoleChangeJobTipsView:SelectSameStageJob(index)
  135. curIdx = index
  136. self.controller:SetIdx(index)
  137. self:RefreshPreview()
  138. if isLeader then
  139. self.btnChangeJob:SetActive(jobDatas[curIdx].Id ~= oldJobId)
  140. self.desTxt:SetActive(jobDatas[curIdx].Id == oldJobId)
  141. else
  142. self.btnChangeJob:SetActive(jobDatas[curIdx].ParterId ~= oldJobId)
  143. self.desTxt:SetActive(jobDatas[curIdx].ParterId == oldJobId)
  144. end
  145. end
  146. function UIRoleChangeJobTipsView:Recycle(parterId)
  147. if curModel ~= nil then
  148. curModel:SetActive(false)
  149. previewSystem:RemoveGo(curModel)
  150. roleViewSystem:Recycle()
  151. curModel = nil
  152. end
  153. end
  154. function UIRoleChangeJobTipsView:RefreshPreview()
  155. local jobData = jobDatas[curIdx]
  156. self.desc.uILocalizeScript:SetContent(jobData.Desc)
  157. self:Recycle(jobData.ParterId)
  158. if isLeader then
  159. self:RefreshDefaultRoleView(Enum.RoleInEnvType.RoleMainView)
  160. else
  161. self:RefreshPartnerView(Enum.RoleInEnvType.RoleMainView, jobData.ParterId)
  162. end
  163. self.model.rawImage.texture = previewSystem:GetRenderTexture()
  164. end
  165. function UIRoleChangeJobTipsView:RefreshSuccess()
  166. local curCfgData = jobDatas[curIdx]
  167. self:Recycle(curCfgData.ParterId)
  168. local data = {3, previewSystem, isLeader, roleViewSystem, oldJobId, isLeader and curCfgData.Id or curCfgData.ParterId}
  169. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UITransPerform, data, self.uiData.id)
  170. end
  171. function UIRoleChangeJobTipsView:RefreshOldRoleView(roleInEnvType)
  172. local userData = ManagerContainer.DataMgr.UserData
  173. local jobId = oldJobId
  174. local roleId = CommonUtil.JobIdToRoleId(jobId, userData:GetSex())
  175. local viewData = CommonUtil.TableClone(userData:GetViewData())
  176. self:RefreshRoleView(roleInEnvType, roleId, nil, nil)
  177. end
  178. function UIRoleChangeJobTipsView:RefreshDefaultRoleView(roleInEnvType)
  179. local userData = ManagerContainer.DataMgr.UserData
  180. local jobData = jobDatas[curIdx]
  181. local jobId = jobData.Id
  182. local roleId = CommonUtil.JobIdToRoleId(jobId, userData:GetSex())
  183. local viewData = CommonUtil.TableClone(userData:GetViewData())
  184. self:RefreshRoleView(roleInEnvType, roleId, nil, nil)
  185. end
  186. function UIRoleChangeJobTipsView:RefreshPartnerView(roleInEnvType, partnerCfgId)
  187. if partnerCfgId == nil then return nil end
  188. return roleViewSystem:RefreshView(roleInEnvType, partnerCfgId, nil, nil, self, self.LoadModelCB)
  189. end
  190. function UIRoleChangeJobTipsView:RefreshRoleView(roleInEnvType, roleId, viewData, extGoesShowData)
  191. roleViewSystem:RefreshView(roleInEnvType, roleId, viewData, extGoesShowData, self, self.LoadModelCB)
  192. end
  193. function UIRoleChangeJobTipsView:LoadModelCB(model)
  194. curModel = model
  195. if previewSystem then
  196. previewSystem:UpdateGo(model)
  197. end
  198. curModel.transform.position = Vector3.zero
  199. curModel:SetActive(true)
  200. end
  201. function UIRoleChangeJobTipsView:RemoveEventListener()
  202. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  203. end
  204. function UIRoleChangeJobTipsView:AddUIEventListener()
  205. CommonUtil.CreateToggleMouduleOnlyBtns(self, pageToggleData, self.content, curIdx, self.SelectSameStageJob)
  206. self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.OnCloseClick)
  207. self.uiBase:AddButtonEventListener(self.btnSkill.button, self, self.OnClickSkillBtn)
  208. self.uiBase:AddButtonEventListener(self.btnChangeJob.button, self, self.OnChangeClick)
  209. end
  210. function UIRoleChangeJobTipsView:OnCloseClick()
  211. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRoleMain1, self.controller:GetData())
  212. self:UIClose()
  213. end
  214. function UIRoleChangeJobTipsView:OnClickSkillBtn()
  215. local heroId = self.controller:GetData()
  216. local curJobData = jobDatas[curIdx]
  217. if curJobData then
  218. local id = isLeader and curJobData.Id or curJobData.ParterId
  219. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISkillPreview, {heroId = heroId, id = id})
  220. else
  221. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('FunctionLock')
  222. end
  223. end
  224. function UIRoleChangeJobTipsView:OnChangeClick()
  225. if needCost then
  226. if not enoughCost then
  227. --ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(812)
  228. --return
  229. else
  230. local cfgData = ManagerContainer.CfgMgr:GetItemById(costKey)
  231. if cfgData then
  232. local jobData = jobDatas[curIdx]
  233. local data
  234. if isLeader then
  235. data = {"ChangeJob2", {I18N.T(cfgData.Name).."x"..costNum, I18N.T(jobData.JobName)}, jobData, self, self.ChangeSure}
  236. else
  237. data = {"ChangeJob2", {I18N.T(cfgData.Name).."x"..costNum, I18N.T(jobData.JobName)}, jobData, self, self.ChangeSure}
  238. end
  239. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  240. return
  241. end
  242. end
  243. else
  244. local jobData = jobDatas[curIdx]
  245. local data
  246. if isLeader then
  247. data = {"ChangeJob3", {I18N.T(jobData.JobName)}, jobData, self, self.ChangeSure}
  248. else
  249. data = {"ChangeJob3", {I18N.T(jobData.JobName)}, jobData, self, self.ChangeSure}
  250. end
  251. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  252. return
  253. end
  254. self:ChangeSure()
  255. end
  256. function UIRoleChangeJobTipsView:ChangeSure()
  257. local jobData = jobDatas[curIdx]
  258. local jobId = isLeader and jobData.Id or jobData.ParterId
  259. self.controller:SendChangeJobReq(jobId)
  260. end
  261. function UIRoleChangeJobTipsView:CloseSelf()
  262. self:UIClose()
  263. end
  264. function UIRoleChangeJobTipsView:OnHide()
  265. end
  266. function UIRoleChangeJobTipsView:OnShow(data)
  267. self.controller:SetData(data)
  268. end
  269. function UIRoleChangeJobTipsView:ClearToggles()
  270. for _, v in pairs(self.toggles) do
  271. v.transform.parent = nil
  272. UnityEngine.GameObject.Destroy(v.gameObject)
  273. v:GenerateDestroy()
  274. v.uiParticle = nil
  275. v.gameObject = nil
  276. v.transform = nil
  277. end
  278. self.toggles = nil
  279. end
  280. function UIRoleChangeJobTipsView:OnClose()
  281. pageToggleData = nil
  282. self:ClearToggles()
  283. if self.loadSystem then
  284. self.loadSystem:Dispose()
  285. end
  286. self.loadSystem = nil
  287. DG.Tweening.DOTween.Kill(self.transform)
  288. self.model.uIEventTriggerListener.onDrag = nil
  289. pageToggleData = nil
  290. curModel = nil
  291. if previewSystem then
  292. previewSystem:Dispose(true)
  293. end
  294. previewSystem = nil
  295. if roleViewSystem then
  296. roleViewSystem:Dispose()
  297. end
  298. roleViewSystem = nil
  299. end
  300. function UIRoleChangeJobTipsView:OnDispose()
  301. self.controller:OnDispose()
  302. end
  303. return UIRoleChangeJobTipsView