KLUICareerTalentPanel.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. ---@class KLUICareerTalentPanel:UIKmlLuaPanelBase
  2. ---@field view KLUICareerTalentPanelView
  3. local KLUICareerTalentPanel = class(UIKmlLuaPanelBase)
  4. local this =KLUICareerTalentPanel
  5. ---创建时调用一次
  6. function this:Init()
  7. self.SkillDataList = {}
  8. self.SkillItemList = {}
  9. ---最大兑换次数
  10. self.maxNum = InfoManager.masterTalentInfo:GetTalentMaxCount(EMasterTalentType.CAREER)
  11. ---剩余兑换次数
  12. self.surplusNum = 0
  13. ---当前经验
  14. self.nowExp = 0
  15. ---最大经验
  16. self.maxExp = 0
  17. ---当前天赋等级
  18. self.nowLevel = 0
  19. ---点数
  20. self.points = {}
  21. self.nowSeries = 0
  22. self.severSeries = 0
  23. GUI:DataListInitData(self.view.SkillDataList,function()
  24. return self:SkillDataListItemCountFunc()
  25. end,function(realIndex)
  26. return self:SkillDataListItemGetFunc(realIndex)
  27. end,function(realIndex, kmlcontrol)
  28. return self:SkillDataListItemInitFunc(realIndex, kmlcontrol)
  29. end, function(realIndex, kmlcontrol)
  30. return self:SkillDataListItemUpdateFunc(realIndex, kmlcontrol)
  31. end)
  32. self:GetAllTalentInfo()
  33. self:SetLeftButton()
  34. self:GetMaxExp()
  35. end
  36. ---获取天赋信息
  37. function this:GetAllTalentInfo()
  38. self.AllTalentInfoList = {}
  39. local cfg = SL:GetConfigTable("cfg_master_protalent")
  40. ---@param v cfg_master_protalent_column
  41. for i, v in pairs(cfg) do
  42. --筛选自己职业或者全职业(0为全职业)
  43. if table.contains(v.career,SL:MeData_GetCareer().baseCareer) or table.contains(v.career,0) then
  44. if not self.AllTalentInfoList[v.series] then
  45. self.AllTalentInfoList[v.series] = {}
  46. end
  47. if not self.AllTalentInfoList[v.series][v.tier] then
  48. self.AllTalentInfoList[v.series][v.tier] = {}
  49. end
  50. table.insert(self.AllTalentInfoList[v.series][v.tier],v)
  51. end
  52. end
  53. for i, v in pairs(self.AllTalentInfoList) do
  54. for z, q in pairs(v) do
  55. table.sort(q,function(a, b)
  56. return a.place < b.place
  57. end)
  58. end
  59. end
  60. end
  61. ---设置左侧按钮信息
  62. function this:SetLeftButton()
  63. self.FactionsCfg = InfoManager.masterTalentInfo:GetFactionsCfg(1)
  64. GUI:Image_loadTexture(self.view.LeftButton1_Icon,self.FactionsCfg[1].iconUi,"Atlas/UIMasterTalent.spriteatlas")
  65. GUI:SetImageNativeSize(self.view.LeftButton1_Icon)
  66. GUI:Image_loadTexture(self.view.LeftButton1_Title,self.FactionsCfg[1].textUi,"Atlas/UIMasterTalent.spriteatlas")
  67. GUI:Button_loadTextureNormal(self.view.LeftButton1,"D_noselect","Atlas/UIMasterTalent.spriteatlas")
  68. GUI:SetActive(self.view.LeftButton1_EnableText,false)
  69. GUI:Image_loadTexture(self.view.LeftButton2_Icon,self.FactionsCfg[2].iconUi,"Atlas/UIMasterTalent.spriteatlas")
  70. GUI:SetImageNativeSize(self.view.LeftButton2_Icon)
  71. GUI:Image_loadTexture(self.view.LeftButton2_Title,self.FactionsCfg[2].textUi,"Atlas/UIMasterTalent.spriteatlas")
  72. GUI:Button_loadTextureNormal(self.view.LeftButton2,"D_noselect","Atlas/UIMasterTalent.spriteatlas")
  73. GUI:SetActive(self.view.LeftButton2_EnableText,false)
  74. end
  75. ---注册UI事件和服务器消息
  76. function this:RegistEvents()
  77. GUI:AddOnClickEvent(self.view.LeftButton1,self,self.OnClickSwitchTalent,1)
  78. GUI:AddOnClickEvent(self.view.LeftButton2,self,self.OnClickSwitchTalent,2)
  79. GUI:AddOnClickEvent(self.view.ResetButton,self,self.OnClickResetButton)
  80. GUI:AddOnClickEvent(self.view.ExchangeExpButton,self,self.OnClickExchangeExpButton)
  81. GUI:AddOnClickEvent(self.view.LeftButton1_Enable,self,self.OnClickLeftButtonEnable,1)
  82. GUI:AddOnClickEvent(self.view.LeftButton2_Enable,self,self.OnClickLeftButtonEnable,2)
  83. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_EXCHANGE_MASTER_EXP,self.RES_EXCHANGE_MASTER_EXP,self)
  84. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_OPEN_MASTER_TYPE,self.RES_OPEN_MASTER_TYPE,self)
  85. SL:RegisterLUAEvent(LUA_EVENT_MASTER_RED_DOT_CHANGE, self.LUA_EVENT_MASTER_RED_DOT_CHANGE, self)
  86. SL:RegisterLUAEvent(LUA_EVENT_MASTER_SKILL_DATA_CHANGE, self.RES_MASTER_CHANGE_INFO, self)
  87. SL:RegisterLUAEvent(LUA_EVENT_MASTER_DATA_CHANGE, self.RES_MASTER_INFO, self)
  88. end
  89. ---启用按钮
  90. function this:OnClickLeftButtonEnable(control,eventData)
  91. if self.isFree then
  92. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_OPEN_MASTER_TYPE,{series = self.FactionsCfg[eventData].series,type = EMasterTalentType.CAREER})
  93. return
  94. end
  95. local isFirst = false
  96. ---没有系列或者服务器发的系列数0为第一次启用
  97. if not self.severSeries or self.severSeries == 0 then
  98. isFirst = true
  99. end
  100. GUI:UIPanel_Open("dev/outui/MasterTalent/Panel/KLUIMasterTalentCareerSwitch/KLUIMasterTalentCareerSwitchPanel",_,_,
  101. {isFirst = isFirst,series = self.FactionsCfg[eventData].series,type = EMasterTalentType.CAREER})
  102. end
  103. ---点击重置
  104. function this:OnClickResetButton()
  105. GUI:UIPanel_Open("dev/outui/MasterTalent/Panel/KLUIMasterTalentWashUp/KLUIMasterTalentWashUpPanel",_,_,
  106. {
  107. type = EMasterTalentType.CAREER,
  108. series = self.nowSeries
  109. })
  110. end
  111. ---点击兑换经验
  112. function this:OnClickExchangeExpButton()
  113. GUI:UIPanel_Open("dev/outui/MasterTalent/Panel/KLUIMasterTalentExchangeExp/KLUIMasterTalentExchangeExpPanel",_,_,
  114. {type = EMasterTalentType.CAREER,maxNum = self.maxNum,count = self.surplusNum})
  115. end
  116. function this:OnClickSwitchTalent(_,eventData)
  117. local selectSeries = eventData
  118. if selectSeries == 0 then
  119. selectSeries = 1
  120. end
  121. if self.nowSeries == selectSeries then
  122. self:SetPointText()
  123. return
  124. end
  125. self.nowSeries = selectSeries
  126. self.SkillDataList = self.AllTalentInfoList[self.FactionsCfg[self.nowSeries].series]
  127. GUI:DataListUpdateData(self.view.SkillDataList)
  128. if self.nowSeries == 1 then
  129. GUI:Button_loadTextureNormal(self.view.LeftButton1,"D_select","Atlas/UIMasterTalent.spriteatlas")
  130. GUI:Button_loadTextureNormal(self.view.LeftButton2,"D_noselect","Atlas/UIMasterTalent.spriteatlas")
  131. elseif self.nowSeries == 2 then
  132. GUI:Button_loadTextureNormal(self.view.LeftButton2,"D_select","Atlas/UIMasterTalent.spriteatlas")
  133. GUI:Button_loadTextureNormal(self.view.LeftButton1,"D_noselect","Atlas/UIMasterTalent.spriteatlas")
  134. end
  135. self:SetPointText()
  136. end
  137. ---设置选中按钮的文本和按钮显隐
  138. function this:SetSelectSeriesButton()
  139. if self.severSeries == 0 then
  140. GUI:SetActive(self.view.LeftButton1_Enable,true)
  141. GUI:SetActive(self.view.LeftButton1_EnableText,false)
  142. GUI:SetActive(self.view.LeftButton2_Enable,true)
  143. GUI:SetActive(self.view.LeftButton2_EnableText,false)
  144. return
  145. end
  146. GUI:SetActive(self.view.LeftButton1_Enable,self.severSeries == 2)
  147. GUI:SetActive(self.view.LeftButton1_EnableText,self.severSeries == 1)
  148. GUI:SetActive(self.view.LeftButton2_Enable,self.severSeries == 1)
  149. GUI:SetActive(self.view.LeftButton2_EnableText,self.severSeries == 2)
  150. end
  151. ---兑换经验红点改变
  152. function this:LUA_EVENT_MASTER_RED_DOT_CHANGE()
  153. GUI:SetActive(self.view.ExchangeExpRedDot,InfoManager.masterTalentInfo.RedDataList[EMasterTalentType.CAREER])
  154. end
  155. ---响应:大师信息
  156. ---{type = 类型,
  157. ---series = 系列,
  158. ---points = 天赋点数,
  159. ---exchangedExpTimes = 已兑换次数,
  160. ---level = 等级,
  161. ---exp= 当前经验,
  162. ---isFree = 是否免费,
  163. ---talent = 天赋信息有多个{{id = 配置id, level, series系列},{id = 配置id, level, series系列}}}
  164. function this:RES_MASTER_INFO(id,message)
  165. if message and message["type"] == EMasterTalentType.CAREER then
  166. self.severSeries = message["series"]
  167. self.isFree = message["isFree"]
  168. self.surplusNum = message["exchangedExpTimes"]
  169. self.nowLevel = message["level"]
  170. self.nowExp = message["exp"]
  171. local seriesPoints = message["seriesPoints"]
  172. self:RefreshPointInfo(seriesPoints)
  173. self:GetMaxExp()
  174. self:OnClickSwitchTalent(_,self.severSeries)
  175. GUI:DataListUpdateData(self.view.SkillDataList)
  176. self:SetSelectSeriesButton()
  177. end
  178. end
  179. ---响应:兑换大师经验 回包 类型 等级与经验 次数
  180. function this:RES_EXCHANGE_MASTER_EXP(id,message)
  181. if message then
  182. self.surplusNum = message["exchangedExpTimes"]
  183. self.nowLevel = message["level"]
  184. self.nowExp = message["exp"]
  185. local seriesPoints = message["seriesPoints"]
  186. self:RefreshPointInfo(seriesPoints)
  187. self:SetPointText()
  188. self:GetMaxExp()
  189. GUI:DataListUpdateData(self.view.SkillDataList)
  190. end
  191. end
  192. ---响应:大师变化信息
  193. function this:RES_MASTER_CHANGE_INFO(id,message)
  194. if message then
  195. local seriesPoints = message["seriesPoints"]
  196. self:RefreshPointInfo(seriesPoints)
  197. self:SetPointText()
  198. GUI:DataListUpdateData(self.view.SkillDataList)
  199. end
  200. end
  201. ---响应:启用大师系列 回 : type series:选中启用的系列
  202. function this:RES_OPEN_MASTER_TYPE(id,message)
  203. if message and message["type"] == EMasterTalentType.CAREER then
  204. self.severSeries = message["series"]
  205. self:OnClickSwitchTalent(_,self.severSeries)
  206. self:SetSelectSeriesButton()
  207. end
  208. end
  209. ---刷新天赋点数据
  210. function this:RefreshPointInfo(seriesPoints)
  211. for i, v in pairs(seriesPoints) do
  212. local series = tonumber(v["series"])
  213. local points = tonumber(v["points"])
  214. if not self.points[series] then
  215. self.points[series] = 0
  216. end
  217. self.points[series] = points
  218. end
  219. end
  220. ---设置天赋点数文本
  221. function this:SetPointText()
  222. GUI:Text_setString(self.view.PointText,tostring(self.points[self.nowSeries] or 0))
  223. end
  224. ---设置等级和经验
  225. function this:SetLvAndExp()
  226. self:LUA_EVENT_MASTER_RED_DOT_CHANGE()
  227. GUI:Text_setString(self.view.Lv,tostring(self.nowLevel))
  228. if self.isMaxLevel then
  229. GUI:SetLoadingbar_startper(self.view.loadingbar,0)
  230. GUI:Text_setString(self.view.ExpText,"0/0")
  231. return
  232. end
  233. local value = 0
  234. if self.nowExp > 0 then
  235. value = Mathf.Ceil(self.nowExp/self.maxExp*100)
  236. end
  237. GUI:SetLoadingbar_startper(self.view.loadingbar,value)
  238. GUI:Text_setString(self.view.ExpText,self.nowExp.."/"..self.maxExp)
  239. end
  240. ---获取最大经验值
  241. function this:GetMaxExp()
  242. self.isMaxLevel = true
  243. local cfg = InfoManager.masterTalentInfo:GetProLevelCfg(self.nowLevel)
  244. if cfg and cfg.exp > 0 then--未满级
  245. self.isMaxLevel = false
  246. self.maxExp = cfg.exp
  247. end
  248. GUI:SetActive(self.view.ExchangeExpButton,not self.isMaxLevel)
  249. self:SetLvAndExp()
  250. end
  251. --------------------------------天赋列-------------------------------------------------------
  252. function this:SkillDataListItemCountFunc()
  253. return #self.SkillDataList
  254. end
  255. function this:SkillDataListItemGetFunc(realIndex)
  256. local item = GUI:UIPanel_Open("dev/outui/MasterTalent/Item/KLUIMasterTalentColumn/KLUIMasterTalentColumnItem",
  257. self.view.SkillDataList, self, {}, true)
  258. self.SkillItemList[item.view.root] = item
  259. return item.view.root
  260. end
  261. function this:SkillDataListItemInitFunc(realIndex, kmlcontrol)
  262. end
  263. function this:SkillDataListItemUpdateFunc(realIndex, kmlcontrol)
  264. local data = self.SkillDataList[realIndex + 1]
  265. local item = self.SkillItemList[kmlcontrol]
  266. item:SetSkillData(data,EMasterTalentType.CAREER)
  267. end
  268. ------------------------------------------------------------------------------------------------
  269. ---创建或者刷新界面数据时调用
  270. function this:Refresh()
  271. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_MASTER_INFO,{type = EMasterTalentType.CAREER})
  272. end
  273. function this:Close()
  274. end
  275. return this