KLArchangelTalentPanel.lua 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. ---@class KLArchangelTalentPanel:UIKmlLuaPanelBase
  2. ---@field view KLArchangelTalentPanelView
  3. ---@field careerid number @当前角色的根职业
  4. ---@field talentTypeList cfg_equip_angelTalentGroup_column[]
  5. ---@field angelTalentList table<number,cfg_equip_angelTalent_column[]> @cfg_equip_angelTalent_column额外带当前等级
  6. ---@field angelTalentItem KLTalentItem[]
  7. ---@field nameItemList KLTalentNameItem[]
  8. ---@field masterRed
  9. local KLArchangelTalentPanel = class(UIKmlLuaPanelBase)
  10. local this = KLArchangelTalentPanel
  11. function this:AsyncLoadUI()
  12. end
  13. ---创建时调用一次
  14. function this:Init()
  15. self.angelTalentItem = {}
  16. self.nameItemList = {}
  17. self.alreadyIncrementId = -1
  18. self.careerid = SL:GetConfig("cfg_career", SL:GetMetaValue(EMetaVarGetKey.ME_CAREER_TAB_COLUMN).id, "id").baseCareer
  19. self.talentTypeList = SL:FindConfigs("cfg_equip_angelTalentGroup", "Career", self.careerid)
  20. GUI:DataListInitData(self.view.talentName_data, function()
  21. return #self.talentTypeList
  22. end, function(realIndex)
  23. return self:TalentNameGetItem(realIndex)
  24. end, function(realIndex, kmlcontrol)
  25. --return self:DataListItemInit(realIndex, kmlcontrol)
  26. end, function(realIndex, kmlcontrol)
  27. return self:TalentNameUpdateItem(realIndex, kmlcontrol)
  28. end)
  29. GUI:DataListInitData(self.view.talent_data, function()
  30. return #self.angelTalentList
  31. end, function(realIndex)
  32. return self:DataListGetItem(realIndex)
  33. end, function(realIndex, kmlcontrol)
  34. return self:DataListItemInit(realIndex, kmlcontrol)
  35. end, function(realIndex, kmlcontrol)
  36. return self:DataUpdateItem(realIndex, kmlcontrol)
  37. end)
  38. InfoManager.archangeEquipInfo:CanMasterAction()
  39. end
  40. function this:DataListGetItem(realIndex)
  41. ---@type KLTalentItem
  42. local item = GUI:UIPanel_Open("dev/outui/Archangel/Item/KLTalent/KLTalentItem", self.view.talent_data, self, _, true)
  43. self.angelTalentItem[realIndex + 1] = item --realIndex做索引,滑动列表的时候可能会有问题
  44. return item.view.root
  45. end
  46. function this:DataListItemInit(realIndex, kmlcontrol)
  47. end
  48. function this:DataUpdateItem(realIndex, kmlcontrol)
  49. --local data=self.angelTalentList[realIndex+1]
  50. self.angelTalentItem[realIndex + 1]:UpdateUI(self.angelTalentList[realIndex + 1])
  51. end
  52. function this:TalentNameGetItem(realIndex)
  53. ---@type KLTalentNameItem
  54. local item = GUI:UIPanel_Open("dev/outui/Archangel/Item/KLTalentName/KLTalentNameItem", self.view.talentName_data, self, _, true)
  55. self.nameItemList[realIndex + 1] = item
  56. return item.view.root
  57. end
  58. function this:TalentNameUpdateItem(realIndex, kmlcontrol)
  59. self.nameItemList[realIndex + 1]:UpdateUI(self.talentTypeList[realIndex + 1])
  60. end
  61. ---注册UI事件和服务器消息
  62. function this:RegistEvents()
  63. GUI:AddOnClickEvent(self.view.reset_talent, self, self.ResetTalentPanel)
  64. GUI:AddOnClickEvent(self.view.tip_mask, self, self.ClostTip)
  65. GUI:AddOnClickEvent(self.view.tip_cancel, self, self.ClostTip)
  66. GUI:AddOnClickEvent(self.view.tip_sure, self, self.ResetTalent)
  67. GUI:AddOnClickEvent(self.view.talent_master, self, self.TalentMaster)
  68. SL:RegisterLUAEvent(LUA_EVENT_CLOSEWIN, self.LUA_EVENT_CLOSEWIN, self)
  69. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_ANGEL_TALENT_INFO, self.RES_ANGEL_TALENT_INFO, self)
  70. end
  71. ---界面显示时调用一次
  72. function this:Show()
  73. end
  74. ---创建或者刷新界面数据时调用
  75. function this:Refresh()
  76. self.talentGroup = nil
  77. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_ANGEL_TALENT)
  78. if not InfoManager.archangeEquipInfo.isMasterRed then
  79. if self.masterRed then
  80. GUI:setVisible(self.masterRed, false)
  81. end
  82. return
  83. end
  84. if not self.masterRed then
  85. self.masterRed = GUI:Image_Create(self.view.talent_master, {
  86. atlas = "Atlas/Common.spriteatlas",
  87. src = "bg_gemred",
  88. width = "20",
  89. height = "20",
  90. a = "21",
  91. x = "0",
  92. y = "8",
  93. z = "-500",
  94. })
  95. else
  96. GUI:setVisible(self.masterRed, true)
  97. end
  98. end
  99. function this:LoadTalent(talentGroup)
  100. self.talentGroup = talentGroup
  101. --self.angelTalenet = InfoManager.archangeEquipInfo:GetTalent(talentGroup)
  102. self.angelTalentList = {}
  103. ---@type cfg_equip_angelTalent_column[]
  104. local data = SL:FindConfigs("cfg_equip_angelTalent", "talentGroup", talentGroup)
  105. table.sort(data, function(a, b)
  106. return a.talent < b.talent
  107. end)
  108. for _, v in pairs(self.nameItemList) do
  109. v:Select(talentGroup)
  110. end
  111. local num = 0
  112. for i, v in pairs(data) do
  113. if num < v.talent then
  114. num = v.talent
  115. end
  116. if not self.angelTalentList[v.talent] then
  117. self.angelTalentList[v.talent] = {}
  118. end
  119. v.curlv = 0
  120. if self.angelTalenet and self.angelTalenet[tostring(v.talentGroup)] and self.angelTalenet[tostring(v.talentGroup)][tostring(v.id)] then
  121. v.curlv = self.angelTalenet[tostring(v.talentGroup)][tostring(v.id)]
  122. end
  123. table.insert(self.angelTalentList[v.talent], v)
  124. end
  125. for i = 1, num do
  126. if not self.angelTalentList[i] then
  127. self.angelTalentList[i] = {}
  128. end
  129. end
  130. GUI:DataListUpdateData(self.view.talent_data)
  131. self:GetTalentGroupCostPoint()
  132. end
  133. function this:ResetTalentPanel()
  134. GUI:setVisible(self.view.tip, true)
  135. local costStr = SL:GetConfig("cfg_global", 22001, "id").value
  136. local cost = string.split(costStr, "#")
  137. GUI:Item_setItemId(self.view.cost_item, cost[1])
  138. local bagCount = SL:GetBagItemCount(tonumber(cost[1]))
  139. if bagCount >= tonumber(cost[2]) then
  140. GUI:Text_setTextColor(self.view.cost_text, "#dce1e5")
  141. else
  142. GUI:Text_setTextColor(self.view.cost_text, "#ff2323")
  143. end
  144. GUI:Text_setString(self.view.cost_text, cost[2])
  145. end
  146. function this:ResetTalent()
  147. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_RESET_ANGEL_TALENT_POINT)
  148. GUI:setVisible(self.view.tip, false)
  149. end
  150. ---在KLTalentNameItem中调用
  151. function this:ChangeBG(src)
  152. ---@type KLUIMasterTalentMainPanel
  153. local talentMain = GUI:GetUI("dev/outui/MasterTalent/Panel/KLUIMasterTalentMain/KLUIMasterTalentMainPanel")
  154. if talentMain then
  155. talentMain:BGChange(src, "")
  156. end
  157. end
  158. function this:SetLoadingbar()
  159. local level = InfoManager.archangeEquipInfo:GetEquipTotalLevel()
  160. GUI:Text_setString(self.view.total_level_text, tostring(level))
  161. ---@type cfg_equip_angelSuit_column[]
  162. local tbl = SL:FindConfigs("cfg_equip_angelSuit", "type", 1)
  163. table.sort(tbl, function(a, b)
  164. return a.angelLv[1][1] < b.angelLv[1][1]
  165. end)
  166. local nextLevel = -1
  167. local talentNum = 0
  168. local career = SL:GetMetaValue(EMetaVarGetKey.ME_CAREER_TAB_COLUMN)
  169. local lastId = -1
  170. if self.alreadyIncrementId > 0 then
  171. for i, v in pairs(tbl) do
  172. if v.career == career.baseCareer then
  173. if v.angelLv[1][1] > level and lastId == self.alreadyIncrementId then
  174. nextLevel = v.angelLv[1][1]
  175. talentNum = v.Count
  176. break
  177. end
  178. lastId = v.id
  179. end
  180. end
  181. else
  182. for i, v in pairs(tbl) do
  183. if v.career == career.baseCareer and v.angelLv[1][1] > level and lastId == self.alreadyIncrementId then
  184. nextLevel = v.angelLv[1][1]
  185. talentNum = v.Count
  186. break
  187. end
  188. end
  189. end
  190. if nextLevel <= 0 then
  191. GUI:SetLoadingbar_startper(self.view.loadingbar_lv, 100)
  192. GUI:Text_setString(self.view.exp_info_text, "天赋等级已满")
  193. else
  194. GUI:SetLoadingbar_startper(self.view.loadingbar_lv, level / nextLevel * 100)
  195. GUI:Text_setString(self.view.exp_info_text, "<color='#1add1f'>" .. tostring(level) .. "</color>/" .. tostring(nextLevel) .. " 距离下次获得<color='#1add1f'>" .. tostring(talentNum) .. "</color>天赋点还差<color='#1add1f'>" .. tostring(nextLevel - level) .. "</color>级")
  196. end
  197. end
  198. -- 响应天使天赋信息
  199. function this:RES_ANGEL_TALENT_INFO(_, message)
  200. local talentPoint = message.talentPoint and message.talentPoint or 0
  201. self.angelTalenet = message.talentInfo
  202. if message.alreadyIncrementId then
  203. self.alreadyIncrementId = message.alreadyIncrementId
  204. end
  205. GUI:Text_setString(self.view.talent_num, tostring(talentPoint))
  206. --local costNum = message.allTalentPoint - self.talentPoint
  207. --GUI:Text_setString(self.view.talent_cost_num, tostring(costNum))
  208. GUI:DataListUpdateData(self.view.talentName_data)
  209. if self.talentGroup == nil then
  210. self.talentGroup = self.talentTypeList[1].talentGroup
  211. end
  212. self:LoadTalent(self.talentGroup)
  213. self:SetLoadingbar()
  214. end
  215. function this:GetTalentGroupCostPoint(group)
  216. group = group or self.talentGroup
  217. local num = 0
  218. if self.angelTalenet and self.angelTalenet[tostring(group)] then
  219. for i, v in pairs(self.angelTalenet[tostring(group)]) do
  220. local tbl = SL:FindConfigs("cfg_equip_angelTalentLv", "talentId", tonumber(i))
  221. table.sort(tbl, function(a, b)
  222. return a.level < b.level
  223. end)
  224. for j, k in ipairs(tbl) do
  225. if k.level <= v then
  226. num = num + k.consumPoint
  227. end
  228. end
  229. end
  230. end
  231. GUI:Text_setString(self.view.talent_cost_num, tostring(num))
  232. end
  233. function this:LUA_EVENT_CLOSEWIN(_, message)
  234. if message == "KLArchangelMasterPanelKml" then
  235. if not InfoManager.archangeEquipInfo.isMasterRed then
  236. if self.masterRed then
  237. GUI:setVisible(self.masterRed, false)
  238. end
  239. return
  240. end
  241. end
  242. end
  243. function this:ClostTip()
  244. GUI:setVisible(self.view.tip, false)
  245. end
  246. function this:TalentMaster()
  247. GUI:UIPanel_Open("dev/outui/Archangel/Panel/KLArchangelMaster/KLArchangelMasterPanel")
  248. end
  249. function this:Close()
  250. SL:RefreshPanelALLRedPoint("KLUISystemLeftPanel")
  251. end
  252. return this