KLUISkillTalentPanel.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. ---@class KLUISkillTalentPanel:UIKmlLuaPanelBase
  2. ---@field view KLUISkillTalentPanelView
  3. local KLUISkillTalentPanel = class(UIKmlLuaPanelBase)
  4. local this =KLUISkillTalentPanel
  5. ---创建时调用一次
  6. function this:Init()
  7. self.SkillDataList = {}
  8. self.SkillItemList = {}
  9. ---最大兑换次数
  10. self.maxNum = InfoManager.masterTalentInfo:GetTalentMaxCount(EMasterTalentType.SKILL)
  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_skilltalent")
  40. ---@param v cfg_master_skilltalent_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.steps] then
  48. self.AllTalentInfoList[v.series][v.steps] = {}
  49. end
  50. table.insert(self.AllTalentInfoList[v.series][v.steps],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.row < b.row
  57. end)
  58. end
  59. end
  60. end
  61. ---设置左侧按钮信息
  62. function this:SetLeftButton()
  63. self.FactionsCfg = InfoManager.masterTalentInfo:GetFactionsCfg(2)
  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. --职业天赋系列
  92. local careerSeries = InfoManager.masterTalentInfo:GetNowTypeSelectSeries(EMasterTalentType.CAREER)
  93. if careerSeries == 0 then
  94. SL:CommonTipsMessage({stringTblID=216,
  95. ui = self,
  96. sureBtnText = "确定",
  97. cancelBtnText = "取消"})
  98. return
  99. end
  100. if careerSeries ~= eventData then
  101. SL:CommonTipsMessage({stringTblID=217,
  102. ui = self,
  103. sureBtnText = "确定",
  104. cancelBtnText = "取消",
  105. callback = function() self:EnableMater(eventData) end
  106. })
  107. return
  108. end
  109. self:EnableMater(eventData)
  110. end
  111. ---启用天赋
  112. function this:EnableMater(eventData)
  113. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_OPEN_MASTER_TYPE,{series = self.FactionsCfg[eventData].series,type = EMasterTalentType.SKILL})
  114. end
  115. ---点击重置
  116. function this:OnClickResetButton()
  117. GUI:UIPanel_Open("dev/outui/MasterTalent/Panel/KLUIMasterTalentWashUp/KLUIMasterTalentWashUpPanel",_,_,
  118. {
  119. type = EMasterTalentType.SKILL,
  120. series = self.nowSeries
  121. })
  122. end
  123. ---点击兑换经验
  124. function this:OnClickExchangeExpButton()
  125. GUI:UIPanel_Open("dev/outui/MasterTalent/Panel/KLUIMasterTalentExchangeExp/KLUIMasterTalentExchangeExpPanel",_,_,
  126. {type = EMasterTalentType.SKILL,maxNum = self.maxNum,count = self.surplusNum})
  127. end
  128. function this:OnClickSwitchTalent(_,eventData)
  129. local selectSeries = eventData
  130. if selectSeries == 0 then
  131. selectSeries = 1
  132. end
  133. if self.nowSeries == selectSeries then
  134. self:SetPointText()
  135. return
  136. end
  137. self.nowSeries = selectSeries
  138. self.SkillDataList = self.AllTalentInfoList[self.FactionsCfg[self.nowSeries].series]
  139. GUI:DataListUpdateData(self.view.SkillDataList)
  140. GUI:SetActive(self.view.LineList,true)
  141. if self.nowSeries == 1 then
  142. GUI:Button_loadTextureNormal(self.view.LeftButton1,"D_select","Atlas/UIMasterTalent.spriteatlas")
  143. GUI:Button_loadTextureNormal(self.view.LeftButton2,"D_noselect","Atlas/UIMasterTalent.spriteatlas")
  144. elseif self.nowSeries == 2 then
  145. GUI:Button_loadTextureNormal(self.view.LeftButton2,"D_select","Atlas/UIMasterTalent.spriteatlas")
  146. GUI:Button_loadTextureNormal(self.view.LeftButton1,"D_noselect","Atlas/UIMasterTalent.spriteatlas")
  147. end
  148. self:SetPointText()
  149. end
  150. ---设置选中按钮的文本和按钮显隐
  151. function this:SetSelectSeriesButton()
  152. if self.severSeries == 0 then
  153. GUI:SetActive(self.view.LeftButton1_Enable,true)
  154. GUI:SetActive(self.view.LeftButton1_EnableText,false)
  155. GUI:SetActive(self.view.LeftButton2_Enable,true)
  156. GUI:SetActive(self.view.LeftButton2_EnableText,false)
  157. return
  158. end
  159. GUI:SetActive(self.view.LeftButton1_Enable,self.severSeries == 2)
  160. GUI:SetActive(self.view.LeftButton1_EnableText,self.severSeries == 1)
  161. GUI:SetActive(self.view.LeftButton2_Enable,self.severSeries == 1)
  162. GUI:SetActive(self.view.LeftButton2_EnableText,self.severSeries == 2)
  163. end
  164. ---兑换经验红点改变
  165. function this:LUA_EVENT_MASTER_RED_DOT_CHANGE()
  166. GUI:SetActive(self.view.ExchangeExpRedDot,InfoManager.masterTalentInfo.RedDataList[EMasterTalentType.SKILL])
  167. end
  168. ---响应:大师信息
  169. ---{type = 类型,
  170. ---series = 系列,
  171. ---points = 天赋点数,
  172. ---exchangedExpTimes = 已兑换次数,
  173. ---level = 等级,
  174. ---exp= 当前经验,
  175. ---isFree = 是否免费,
  176. ---talent = 天赋信息有多个{{id = 配置id, level, series系列},{id = 配置id, level, series系列}}}
  177. function this:RES_MASTER_INFO(id,message)
  178. if message and message["type"] == EMasterTalentType.SKILL then
  179. self.severSeries = message["series"]
  180. self.isFree = message["isFree"]
  181. self.surplusNum = message["exchangedExpTimes"]
  182. self.nowLevel = message["level"]
  183. self.nowExp = message["exp"]
  184. local seriesPoints = message["seriesPoints"]
  185. self:RefreshPointInfo(seriesPoints)
  186. self:GetMaxExp()
  187. self:OnClickSwitchTalent(_,self.severSeries)
  188. GUI:DataListUpdateData(self.view.SkillDataList)
  189. self:SetSelectSeriesButton()
  190. end
  191. end
  192. ---响应:兑换大师经验 回包 类型 等级与经验 次数
  193. function this:RES_EXCHANGE_MASTER_EXP(id,message)
  194. if message then
  195. self.surplusNum = message["exchangedExpTimes"]
  196. self.nowLevel = message["level"]
  197. self.nowExp = message["exp"]
  198. local seriesPoints = message["seriesPoints"]
  199. self:RefreshPointInfo(seriesPoints)
  200. self:SetPointText()
  201. self:GetMaxExp()
  202. GUI:DataListUpdateData(self.view.SkillDataList)
  203. end
  204. end
  205. ---响应:大师变化信息
  206. function this:RES_MASTER_CHANGE_INFO(id,message)
  207. if message then
  208. local seriesPoints = message["seriesPoints"]
  209. self:RefreshPointInfo(seriesPoints)
  210. self:SetPointText()
  211. GUI:DataListUpdateData(self.view.SkillDataList)
  212. end
  213. end
  214. ---响应:启用大师系列 回 : type series:选中启用的系列
  215. function this:RES_OPEN_MASTER_TYPE(id,message)
  216. if message and message["type"] == EMasterTalentType.SKILL then
  217. self.severSeries = message["series"]
  218. self:OnClickSwitchTalent(_,self.severSeries)
  219. self:SetSelectSeriesButton()
  220. end
  221. end
  222. ---刷新天赋点数据
  223. function this:RefreshPointInfo(seriesPoints)
  224. for i, v in pairs(seriesPoints) do
  225. local series = tonumber(v["series"])
  226. local points = tonumber(v["points"])
  227. if not self.points[series] then
  228. self.points[series] = 0
  229. end
  230. self.points[series] = points
  231. end
  232. end
  233. ---设置天赋点数文本
  234. function this:SetPointText()
  235. GUI:Text_setString(self.view.PointText,tostring(self.points[self.nowSeries] or 0))
  236. end
  237. ---设置等级和经验
  238. function this:SetLvAndExp()
  239. self:LUA_EVENT_MASTER_RED_DOT_CHANGE()
  240. GUI:Text_setString(self.view.Lv,tostring(self.nowLevel))
  241. if self.isMaxLevel then
  242. GUI:SetLoadingbar_startper(self.view.loadingbar,0)
  243. GUI:Text_setString(self.view.ExpText,"0/0")
  244. return
  245. end
  246. local value = 0
  247. if self.nowExp > 0 then
  248. value = Mathf.Ceil(self.nowExp/self.maxExp*100)
  249. end
  250. GUI:SetLoadingbar_startper(self.view.loadingbar,value)
  251. GUI:Text_setString(self.view.ExpText,self.nowExp.."/"..self.maxExp)
  252. end
  253. ---获取最大经验值
  254. function this:GetMaxExp()
  255. self.isMaxLevel = true
  256. local cfg = InfoManager.masterTalentInfo:GetSkillLevelCfg(self.nowLevel)
  257. if cfg and cfg.exp > 0 then--未满级
  258. self.isMaxLevel = false
  259. self.maxExp = cfg.exp
  260. end
  261. GUI:SetActive(self.view.ExchangeExpButton,not self.isMaxLevel)
  262. self:SetLvAndExp()
  263. end
  264. --------------------------------天赋列-------------------------------------------------------
  265. function this:SkillDataListItemCountFunc()
  266. return #self.SkillDataList + 1
  267. end
  268. function this:SkillDataListItemGetFunc(realIndex)
  269. local item = GUI:UIPanel_Open("dev/outui/MasterTalent/Item/KLUIMasterTalentColumn/KLUIMasterTalentColumnItem",
  270. self.view.SkillDataList, self, {}, true)
  271. self.SkillItemList[item.view.root] = item
  272. return item.view.root
  273. end
  274. function this:SkillDataListItemInitFunc(realIndex, kmlcontrol)
  275. end
  276. function this:SkillDataListItemUpdateFunc(realIndex, kmlcontrol)
  277. local data = self.SkillDataList[realIndex]
  278. local item = self.SkillItemList[kmlcontrol]
  279. item:SetSkillData(data,EMasterTalentType.SKILL)
  280. end
  281. ------------------------------------------------------------------------------------------------
  282. ---创建或者刷新界面数据时调用
  283. function this:Refresh()
  284. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_MASTER_INFO,{type = EMasterTalentType.SKILL})
  285. end
  286. function this:Close()
  287. end
  288. return this