KLUISkillInfoPanel.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. ---@class KLUISkillInfoPanel:UIKmlLuaPanelBase
  2. ---@field skillData number[][]
  3. ---@field curSelectId number @当前选中的技能id
  4. ---@field isOpenSetting boolean
  5. local KLUISkillInfoPanel = class(UIKmlLuaPanelBase)
  6. local this = KLUISkillInfoPanel
  7. ---创建时调用一次
  8. function this:Init()
  9. GUI:DataListInitData(self.view.loopscrollviewData,
  10. function()
  11. return #self.skillData
  12. end,
  13. function(realIndex)
  14. return self:ItemGetFunc(realIndex)
  15. end,
  16. nil,
  17. function(realIndex, kmlCtrl)
  18. return self:ItemUpdateFunc(realIndex, kmlCtrl)
  19. end)
  20. GUI:DataListInitData(self.view.pageData,
  21. function()
  22. return #self.skillData
  23. end,
  24. nil,
  25. nil,
  26. function(realIndex, kmlCtrl)
  27. return self:PageItemUpdateFunc(realIndex, kmlCtrl)
  28. end)
  29. GUI:DataListInitData(self.view.transfer_datalist,
  30. function()
  31. return #self.tranferSkill
  32. end,
  33. nil,
  34. nil,
  35. function(realIndex, kmlCtrl)
  36. return self:TransferSkillsUpdateFunc(realIndex, kmlCtrl)
  37. end)
  38. self.skillData = {}
  39. ---@type table<KingML.KmlControl,KLUISkillPageItem>
  40. self.skillItems = {}
  41. self.tranferSkill = {}
  42. end
  43. function this:ItemGetFunc()
  44. ---@type KLUISkillPageItem
  45. local item = GUI:UIPanel_Open("dev/ui/Skill/Item/KLUISkillPage/KLUISkillPageItem", self.view.loopscrollviewData, self, nil, true)
  46. local kmlCtrl = item.view.root
  47. self.skillItems[kmlCtrl] = item
  48. return kmlCtrl
  49. end
  50. ---@param kmlCtrl KingML.KmlControl
  51. function this:ItemUpdateFunc(realIndex, kmlCtrl)
  52. local item = self.skillItems[kmlCtrl]
  53. local luaIndex = realIndex + 1
  54. item:UpdateUI(self.skillData[luaIndex])
  55. end
  56. function this:PageItemUpdateFunc(realIndex)
  57. local pageLuaCtrl = GUI:GetChildControl(self.view.pageData, realIndex, 'pageImg')
  58. if realIndex == self.curPage then
  59. if self.lastLuaCtrl then
  60. GUI:Image_loadTexture(self.lastLuaCtrl, "img_page", "Atlas/UISkillPanel.spriteatlas")
  61. end
  62. GUI:Image_loadTexture(pageLuaCtrl, "img_page_select", "Atlas/UISkillPanel.spriteatlas")
  63. self.lastLuaCtrl = pageLuaCtrl
  64. end
  65. end
  66. function this:TransferSkillsUpdateFunc(realIndex)
  67. local info = self.tranferSkill[realIndex + 1]
  68. local btn = GUI:GetChildControl(self.view.transfer_datalist, realIndex, "btn_shift")
  69. local img = GUI:GetChildControl(self.view.transfer_datalist, realIndex, "img_shift_icon")
  70. local icon = InfoManager.shapeShiftCardInfo:GetMonsterIcon(info.group)
  71. GUI:Image_loadTexture(img, icon, "Atlas/UIbianshentb.spriteatlas")
  72. GUI:AddOnClickEvent(btn, self, self.OnClickTransferSkill, realIndex + 1)
  73. end
  74. ---创建或者刷新界面数据时调用
  75. function this:Refresh()
  76. SL.HideMainPanel()
  77. self.skillShowType = E_SkillShowType.Normal
  78. ---@type UnityEngine.UI.Mask
  79. local maskComp = GUI:AddMask(self.view.listMask)
  80. maskComp.showMaskGraphic = false
  81. GUI:AddUIEmpty4Raycast(self.view.loopscrollview)
  82. local rPage = self.args or ESkillUIShowPage.Describe
  83. if rPage == ESkillUIShowPage.Describe then
  84. self.isOpenSetting = true
  85. elseif rPage == ESkillUIShowPage.Setting then
  86. self.isOpenSetting = false
  87. end
  88. self:SettingOnClick()
  89. table.clear(self.skillData)
  90. local skillList = SL:GetMetaValue(EMetaVarGetKey.SKILL_ID_LIST_DATA)
  91. for i = 1, #skillList do
  92. local pageIdx = math.ceil(i / 12)
  93. if not self.skillData[pageIdx] then
  94. self.skillData[pageIdx] = {}
  95. end
  96. table.insert(self.skillData[pageIdx], skillList[i])
  97. end
  98. GUI:DataListUpdateData(self.view.loopscrollviewData)
  99. self.curPage = 0
  100. GUI:DataListUpdateData(self.view.pageData)
  101. self:RefreshTransferSkill()
  102. end
  103. ---注册UI事件和服务器消息
  104. function this:RegistEvents()
  105. GUI:AddOnClickEvent(self.view.closeBtn, self, self.BtnCloseOnClick)
  106. GUI:AddOnClickEvent(self.view.BtnSkillSetting, self, self.BtnSettingOnClick)
  107. GUI:AddOnClickEvent(self.view.btn_shift, self, self.BtnShapeShiftOnClick)
  108. SL:RegisterLUAEvent(LUA_EVENT_SELECT_SKILL_UI, self.SelectSkill, self)
  109. GUI:AddOnTouchEvent(self.view.loopscrollview, self, self.OnTouchEvent)
  110. end
  111. ---@param eventType string
  112. function this:OnTouchEvent(_, eventType, args)
  113. if not self.view then
  114. return
  115. end
  116. if eventType == EUIEventName.OnBeginDrag then
  117. self.beginPosX = GUI:getPositionX(self.view.loopscrollview)
  118. elseif eventType == EUIEventName.OnDrag then
  119. if not self.beginPosX then
  120. self.beginPosX = GUI:getPositionX(self.view.loopscrollview)
  121. end
  122. self.beginPosX = self.beginPosX + args.delta.x
  123. local minX = (#self.skillData - 1) * 360
  124. self.beginPosX = Mathf.Clamp(self.beginPosX, -minX, 0)
  125. GUI:setPositionX(self.view.loopscrollview, self.beginPosX)
  126. self.isToUpper = args.delta.x < 0
  127. elseif eventType == EUIEventName.OnEndDrag then
  128. if self.isToUpper then
  129. self.curPage = math.ceil(-self.beginPosX / 360)
  130. else
  131. self.curPage = math.floor(-self.beginPosX / 360)
  132. end
  133. self.curPage = Mathf.Clamp(self.curPage, 0, #self.skillData - 1)
  134. local targetX = -360 * self.curPage
  135. if self.doAnchor then
  136. GUI:DOKill(self.doAnchor)
  137. self.doAnchor = nil
  138. end
  139. self.doAnchor = GUI:DOAnchorPosX(self.view.loopscrollview, targetX, 0.3)
  140. GUI:TweenSetOnComplete(self.doAnchor,function()
  141. self.doAnchor = nil
  142. end)
  143. GUI:DataListUpdateData(self.view.pageData)
  144. end
  145. end
  146. ---@param skillItem KLUISkillItem
  147. function this:SelectSkill(_, skillItem)
  148. self.skillItem = skillItem
  149. self.curSelectId = skillItem.skillId
  150. self.curSelectIndex = skillItem.luaIndex
  151. end
  152. function this:RefreshTransferSkill()
  153. self.isTransferShow = false
  154. local info = InfoManager.shapeShiftCardInfo.shiftSkill
  155. if table.count(info) == 0 then
  156. GUI:setVisible(self.view.shapeShiftRoot, false)
  157. else
  158. self.tranferSkill = {}
  159. GUI:setVisible(self.view.shapeShiftRoot, true)
  160. for _, v in pairs(info) do
  161. self.tranferSkill[#self.tranferSkill + 1] = v
  162. end
  163. GUI:DataListUpdateData(self.view.transfer_datalist)
  164. GUI:setVisible(self.view.layout_transfer_skill, false)
  165. end
  166. end
  167. function this:OnClickTransferSkill(_, eventData)
  168. self.curSelectIndex = nil
  169. self.skillShowType = E_SkillShowType.Transfer
  170. local info = self.tranferSkill[eventData]
  171. table.clear(self.skillData)
  172. local allSkill = {}
  173. for i, v in pairs(info.allSkill) do
  174. ---策划需求排除普攻
  175. if v.group ~= 4 then
  176. allSkill[i] = v
  177. end
  178. end
  179. local index = 1
  180. for i, _ in pairs(allSkill) do
  181. local pageIdx = math.ceil(index / 12)
  182. if not self.skillData[pageIdx] then
  183. self.skillData[pageIdx] = {}
  184. end
  185. table.insert(self.skillData[pageIdx], i)
  186. index = index + 1
  187. end
  188. GUI:SetActive(self.view.BtnSkillSetting, false)
  189. if self.isOpenSetting then
  190. self.isOpenSetting = false
  191. GUI:ToggleGroup_AllowSwitChoff(self.view.SkillTogGroup,false)
  192. GUI:UIPanel_Open("dev/ui/Skill/Panel/KLUISkillDescribe/KLUISkillDescribePanel")
  193. GUI:UIPanel_Close("dev/ui/Skill/Panel/KLUISkillSetting/KLUISkillSettingPanel")
  194. end
  195. GUI:DataListUpdateData(self.view.loopscrollviewData)
  196. GUI:setPositionX(self.view.loopscrollview, 0)
  197. self.curPage = 0
  198. GUI:DataListUpdateData(self.view.pageData)
  199. end
  200. function this:BtnSettingOnClick()
  201. return self:SettingOnClick(true)
  202. end
  203. function this:BtnShapeShiftOnClick()
  204. if self.isTransferShow then
  205. GUI:setVisible(self.view.img_shift_bg, false)
  206. GUI:setVisible(self.view.layout_transfer_skill, false)
  207. self.isTransferShow = false
  208. if self.skillShowType == E_SkillShowType.Normal then
  209. return
  210. end
  211. self.curSelectIndex = nil
  212. self.skillShowType = E_SkillShowType.Normal
  213. --self:SettingOnClick()
  214. table.clear(self.skillData)
  215. local skillList = SL:GetMetaValue(EMetaVarGetKey.SKILL_ID_LIST_DATA)
  216. for i = 1, #skillList do
  217. local pageIdx = math.ceil(i / 12)
  218. if not self.skillData[pageIdx] then
  219. self.skillData[pageIdx] = {}
  220. end
  221. table.insert(self.skillData[pageIdx], skillList[i])
  222. end
  223. GUI:DataListUpdateData(self.view.loopscrollviewData)
  224. self.curPage = 0
  225. GUI:DataListUpdateData(self.view.pageData)
  226. else
  227. GUI:setVisible(self.view.img_shift_bg, true)
  228. GUI:setVisible(self.view.layout_transfer_skill, true)
  229. self.isTransferShow = true
  230. end
  231. end
  232. function this:RefreshNormalSkillPanel()
  233. if self.skillShowType ~= E_SkillShowType.Normal then
  234. self:BtnShapeShiftOnClick()
  235. end
  236. self:RefreshTransferSkill()
  237. end
  238. function this:SettingOnClick(isClick)
  239. if self.isOpenSetting then
  240. self.isOpenSetting = false
  241. GUI:ToggleGroup_AllowSwitChoff(self.view.SkillTogGroup, false)
  242. GUI:UIPanel_Open("dev/ui/Skill/Panel/KLUISkillDescribe/KLUISkillDescribePanel", nil, nil, self.curSelectId)
  243. GUI:UIPanel_Close("dev/ui/Skill/Panel/KLUISkillSetting/KLUISkillSettingPanel")
  244. if self.skillItem then
  245. self.skillItem:SetTogDefaultThis()
  246. elseif isClick then
  247. self.curSelectIndex = nil
  248. GUI:DataListUpdateData(self.view.loopscrollviewData)
  249. end
  250. else
  251. self.isOpenSetting = true
  252. GUI:ToggleGroup_AllowSwitChoff(self.view.SkillTogGroup, true)
  253. if self.skillItem then
  254. self.skillItem:SetTogIsOn(false)
  255. end
  256. GUI:UIPanel_Open("dev/ui/Skill/Panel/KLUISkillSetting/KLUISkillSettingPanel", nil, nil, { curSelectId = self.curSelectId })
  257. GUI:UIPanel_Close("dev/ui/Skill/Panel/KLUISkillDescribe/KLUISkillDescribePanel")
  258. end
  259. end
  260. function this:BtnCloseOnClick()
  261. GUI:UIPanel_Close("dev/ui/Skill/Panel/KLUISkillInfo/KLUISkillInfoPanel")
  262. GUI:UIPanel_Close("dev/ui/Skill/Panel/KLUISkillDescribe/KLUISkillDescribePanel")
  263. GUI:UIPanel_Close("dev/ui/Skill/Panel/KLUISkillSetting/KLUISkillSettingPanel")
  264. SL.ShowMainPanel()
  265. end
  266. function this:Close()
  267. self.skillItem = nil
  268. self.curSelectIndex = nil
  269. self.curSelectId = nil
  270. if self.doAnchor then
  271. GUI:DOKill(self.doAnchor)
  272. self.doAnchor = nil
  273. end
  274. end
  275. return this