KLShapeShiftCardSynthesisPanel.lua 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. ---@class KLShapeShiftCardSynthesisPanel:UIKmlLuaPanelBase
  2. ---@field view KLShapeShiftCardSynthesisPanelView
  3. local KLShapeShiftCardSynthesisPanel = class(UIKmlLuaPanelBase)
  4. local this = KLShapeShiftCardSynthesisPanel
  5. function this:AsyncLoadUI()
  6. end
  7. ---创建时调用一次
  8. function this:Init()
  9. self.synthesisCount = 1
  10. self.cardItemList = {}
  11. GUI:DataListInitData(self.view.datalist_card,
  12. function()
  13. return self:ItemCountFunc()
  14. end,
  15. function(realIndex)
  16. return self:ItemGetFunc(realIndex)
  17. end,
  18. nil,
  19. function(realIndex, kmlCtrl)
  20. return self:ItemUpdateFunc(realIndex, kmlCtrl)
  21. end
  22. )
  23. self.cardExchangeItemList = {}
  24. GUI:DataListInitData(self.view.datalist_card_exchange,
  25. function()
  26. return self:ExchangeItemCountFunc()
  27. end,
  28. function(realIndex)
  29. return self:ExchangeItemGetFunc(realIndex)
  30. end,
  31. nil,
  32. function(realIndex, kmlCtrl)
  33. return self:ExchangeItemUpdateFunc(realIndex, kmlCtrl)
  34. end
  35. )
  36. self.cardSynthesisList = {}
  37. self.selectCardSynthesis = {}
  38. GUI:DataListInitData(self.view.synthesis_card_list,
  39. function()
  40. return self.synthesisCount
  41. end,
  42. function(realIndex)
  43. return self:DataListItemGetFunc(realIndex)
  44. end,
  45. nil,
  46. function(realIndex, kmlCtrl)
  47. return self:DataListItemUpdateFunc(realIndex, kmlCtrl)
  48. end)
  49. self.attrList = {}
  50. GUI:DataListInitData(self.view.attr_datalist,
  51. function()
  52. return #self.attrList
  53. end,
  54. nil,
  55. nil,
  56. function(realIndex)
  57. local attr = GUI:GetChildControl(self.view.attr_datalist, realIndex, 'attr')
  58. local attrInfo = self.attrList[realIndex + 1]
  59. local preValue
  60. local tbl = SL:GetConfig("cfg_att_info", tonumber(attrInfo.attrId))
  61. local attrName = tbl.name
  62. local att_remark = tbl.remarks
  63. if att_remark == 1 then
  64. preValue = attrInfo.attrValue
  65. else
  66. preValue = tonumber(attrInfo.attrValue) / 100 .. '%'
  67. end
  68. GUI:Text_setString(attr, attrName .. ":" .. preValue)
  69. local cfg = SL:GetConfig("cfg_card_att", tonumber(attrInfo.attrCfgId))
  70. GUI:Text_setTextColor(attr, tostring(cfg.color))
  71. end
  72. )
  73. self.scrollViewType = E_ShapeShiftCardType.Exchange
  74. end
  75. --region NormalListRefresh
  76. function this:ItemCountFunc()
  77. return #self.selectCardInfo
  78. end
  79. function this:ItemGetFunc()
  80. ---@type KLShapeShiftCardItem
  81. local item = GUI:UIPanel_Open("dev/outui/ShapeShiftCard/Item/KLShapeShiftCard/KLShapeShiftCardItem", self.view.datalist_card, self, { type = E_ShapeShiftCardFuncType.Synthesis }, true)
  82. local kmlCtrl = item.view.root
  83. self.cardItemList[kmlCtrl] = item
  84. return kmlCtrl
  85. end
  86. ---@param realIndex number
  87. ---@param kmlCtrl KingML.KmlControl
  88. function this:ItemUpdateFunc(realIndex, kmlCtrl)
  89. ---@type KLShapeShiftCardItem
  90. local item = self.cardItemList[kmlCtrl]
  91. item:RefreshSynthesis(self.selectCardInfo[realIndex + 1])
  92. end
  93. --endregion
  94. --region ExchangeListRefresh
  95. function this:ExchangeItemCountFunc()
  96. return #self.exchangeCardInfo
  97. end
  98. function this:ExchangeItemGetFunc()
  99. ---@type KLShapeShiftCardItem
  100. local item = GUI:UIPanel_Open("dev/outui/ShapeShiftCard/Item/KLShapeShiftCard/KLShapeShiftCardItem", self.view.datalist_card_exchange, self, { type = E_ShapeShiftCardFuncType.ExSynthesis }, true)
  101. local kmlCtrl = item.view.root
  102. self.cardExchangeItemList[kmlCtrl] = item
  103. return kmlCtrl
  104. end
  105. ---@param realIndex number
  106. ---@param kmlCtrl KingML.KmlControl
  107. function this:ExchangeItemUpdateFunc(realIndex, kmlCtrl)
  108. ---@type KLShapeShiftCardItem
  109. local item = self.cardExchangeItemList[kmlCtrl]
  110. item:RefreshSynthesis(self.exchangeCardInfo[realIndex + 1])
  111. end
  112. --endregion
  113. --region SynthesisListRefresh
  114. function this:DataListItemGetFunc()
  115. ---@type KLShapeShiftCardItem
  116. local item = GUI:UIPanel_Open("dev/outui/ShapeShiftCard/Item/KLShapeShiftCard/KLShapeShiftCardItem", self.view.synthesis_card_list, self, { type = E_ShapeShiftCardFuncType.UnSynthesis }, true)
  117. local kmlCtrl = item.view.root
  118. self.cardSynthesisList[kmlCtrl] = item
  119. return kmlCtrl
  120. end
  121. function this:DataListItemUpdateFunc(realIndex, kmlCtrl)
  122. ---@type KLShapeShiftCardItem
  123. local item = self.cardSynthesisList[kmlCtrl]
  124. item:RefreshSynthesis(self.selectCardSynthesis[realIndex + 1])
  125. end
  126. --endregion
  127. ---注册UI事件和服务器消息
  128. function this:RegistEvents()
  129. GUI:AddOnClickEvent(self.view.btn_go, self, self.SwitchCardShop)
  130. GUI:AddOnClickEvent(self.view.btn_tips, self, self.FuncTips)
  131. GUI:AddOnClickEvent(self.view.btn_synthesis, self, self.SynthesisOnClick)
  132. GUI:AddOnClickEvent(self.view.btn_auto_synthesis_ex, self, self.AutoSynthesisOnClick)
  133. GUI:AddOnClickEvent(self.view.btn_auto_synthesis, self, self.AutoSynthesisOnClick)
  134. GUI:AddOnClickEvent(self.view.btn_synthesis_up, self, self.RefreshSynthesisPanel)
  135. GUI:SetToggleOnValueChange(self.view.toggle_shift, self, self.ToggleShiftOnChange)
  136. GUI:SetToggleOnValueChange(self.view.toggle_attr, self, self.ToggleAttrOnChange)
  137. GUI:SetToggleOnValueChange(self.view.toggle_god_attr, self, self.ToggleGodAttrOnChange)
  138. SL:RegisterLUAEvent(LUA_SHAPE_CARD_BAG_CHANGE, self.RES_TRANSFER_CARD_BAG, self)
  139. end
  140. ---界面显示时调用一次
  141. function this:Show()
  142. end
  143. ---创建或者刷新界面数据时调用
  144. function this:Refresh()
  145. self.selectCardInfo = {}
  146. self.normalCardInfo = {}
  147. self.exchangeCardInfo = {}
  148. self:RES_TRANSFER_CARD_BAG()
  149. end
  150. function this:SwitchCardShop()
  151. local ui = GUI:GetUI("dev/outui/ShapeShiftCard/Panel/KLShapeShiftCardMain/KLShapeShiftCardMainPanel")
  152. if ui then
  153. GUI:Toggle_setIsOn(ui.view.toggle_shop, true)
  154. end
  155. end
  156. function this:FuncTips()
  157. local helpCfg = SL:GetConfig("cfg_rule_text", 103)
  158. if helpCfg then
  159. SL:CommonStrTipsMessage({ title = helpCfg.menutxt, str = helpCfg.location })
  160. end
  161. end
  162. function this:RefreshSynthesisPanel()
  163. self.synthesisIsShow = not self.synthesisIsShow
  164. if not self.synthesisIsShow then
  165. self:HideSynthesisPanel()
  166. else
  167. self:ShowSynthesisPanel()
  168. end
  169. end
  170. function this:HideSynthesisPanel(isChange)
  171. GUI:setVisible(self.view.panel_synthesis, false)
  172. GUI:setPositionY(self.view.btn_synthesis_up, -22)
  173. GUI:setContentSize(self.view.loopscrollview_card, 825, 463)
  174. GUI:Image_loadTexture(self.view.img_btn_icon, "house_up", "Atlas/KLShapeShiftCard.spriteatlas")
  175. if not isChange then
  176. if #self.selectCardInfo == 0 then
  177. GUI:setVisible(self.view.panel_no_card, true)
  178. end
  179. self:RefreshScrollView()
  180. end
  181. self.selectCardSynthesis = {}
  182. self.attrList = {}
  183. self.synthesisCount = 1
  184. GUI:setVisible(self.view.text_minor_1, false)
  185. GUI:setVisible(self.view.text_minor_2, false)
  186. GUI:DataListUpdateData(self.view.attr_datalist)
  187. end
  188. function this:ShowSynthesisPanel()
  189. GUI:setVisible(self.view.panel_synthesis, true)
  190. GUI:setPositionY(self.view.btn_synthesis_up, 190)
  191. GUI:setContentSize(self.view.loopscrollview_card, 825, 254)
  192. GUI:Image_loadTexture(self.view.img_btn_icon, "house_down", "Atlas/KLShapeShiftCard.spriteatlas")
  193. if #self.selectCardInfo == 0 then
  194. GUI:setVisible(self.view.panel_no_card, false)
  195. end
  196. GUI:DataListUpdateData(self.view.synthesis_card_list)
  197. self.needRefreshHouseList = true
  198. end
  199. function this:ToggleShiftOnChange(_, _, eventData)
  200. if eventData[1] then
  201. self:RefreshExchangeScrollView()
  202. end
  203. end
  204. function this:ToggleAttrOnChange(_, _, eventData)
  205. if eventData[1] then
  206. self.scrollViewType = E_ShapeShiftCardType.Attr
  207. self:RefreshScrollView()
  208. end
  209. end
  210. function this:ToggleGodAttrOnChange(_, _, eventData)
  211. if eventData[1] then
  212. self.scrollViewType = E_ShapeShiftCardType.GodAttr
  213. self:RefreshScrollView()
  214. end
  215. end
  216. function this:AutoSynthesisOnClick()
  217. GUI:UIPanel_Open("dev/outui/ShapeShiftCard/Panel/KLShapeShiftCardAutoUpgrade/KLShapeShiftCardAutoUpgradePanel", nil, nil, { callback = self.AutoUpgradeClick, funcType = E_ShapeShiftCardFuncType.Synthesis, cardType = self.scrollViewType, btnName = "一键合成" })
  218. end
  219. function this.AutoUpgradeClick(autoType, autoLevel)
  220. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_SYNTHESIS_ALL_CARD, { autoType, autoLevel })
  221. end
  222. function this:SynthesisOnClick()
  223. if #self.selectCardSynthesis == self.synthesisCount then
  224. SL:CommonTipsMessage({ stringTblID = 20006, ui = self, callback = function()
  225. local card = {}
  226. local mainCard = self.selectCardSynthesis[1].id
  227. for i = 2, self.synthesisCount do
  228. card[#card + 1] = self.selectCardSynthesis[i].id
  229. end
  230. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_TRANSFER_CARD_SYNTHESIS, { mainCard, card })
  231. end })
  232. else
  233. SL:TipMessage(SL:GetConfig('cfg_string', 20004).text, 1, NoticeType.NoticeMid) --"卡牌数量不足"
  234. end
  235. end
  236. function this:RES_TRANSFER_CARD_BAG()
  237. self.normalCardInfo = {}
  238. self.exchangeCardInfo = {}
  239. ---@type BagShapeShiftCard[]
  240. local message = InfoManager.shapeShiftCardInfo.allCardInfo
  241. if message then
  242. for _, v in pairs(message) do
  243. if v.tbl.upAmount ~= 0 then
  244. if v.type == E_ShapeShiftCardType.Exchange then
  245. local isHave = true
  246. for _, vv in pairs(self.exchangeCardInfo) do
  247. if vv.cfgid == v.cfgid then
  248. vv.count[#vv.count + 1] = v.id
  249. isHave = false
  250. end
  251. end
  252. if isHave then
  253. v.count = {}
  254. v.count[1] = v.id
  255. self.exchangeCardInfo[#self.exchangeCardInfo + 1] = v
  256. end
  257. elseif v.type == E_ShapeShiftCardType.Attr or v.type == E_ShapeShiftCardType.GodAttr then
  258. self.normalCardInfo[#self.normalCardInfo + 1] = v
  259. end
  260. end
  261. end
  262. end
  263. table.sort(self.normalCardInfo, function(a, b)
  264. if a.subType ~= b.subType then
  265. return a.subType < b.subType
  266. else
  267. if a.quality ~= b.quality then
  268. return a.quality > b.quality
  269. else
  270. return a.cfgid > b.cfgid
  271. end
  272. end
  273. end)
  274. table.sort(self.exchangeCardInfo, function(a, b)
  275. if a.subType ~= b.subType then
  276. return a.subType < b.subType
  277. else
  278. if a.quality ~= b.quality then
  279. return a.quality > b.quality
  280. else
  281. return a.cfgid > b.cfgid
  282. end
  283. end
  284. end)
  285. self:HideSynthesisPanel(true)
  286. self.synthesisIsShow = false
  287. if self.scrollViewType == E_ShapeShiftCardType.Exchange then
  288. self:RefreshExchangeScrollView()
  289. else
  290. self:RefreshScrollView()
  291. end
  292. self:RefreshSynthesisRedPoint()
  293. end
  294. ---刷新赋能卡牌
  295. function this:RefreshScrollView(cfgid, noReset)
  296. GUI:setVisible(self.view.loopscrollview_card_exchange, false)
  297. GUI:setVisible(self.view.loopscrollview_card, true)
  298. GUI:setVisible(self.view.btn_synthesis_up, true)
  299. GUI:setVisible(self.view.btn_auto_synthesis_ex, false)
  300. self.selectCardInfo = {}
  301. if not cfgid then
  302. for _, v in pairs(self.normalCardInfo) do
  303. if v.type == self.scrollViewType then
  304. if not noReset then
  305. ---显示选中光圈
  306. v.select = false
  307. end
  308. if v.type == self.scrollViewType then
  309. self.selectCardInfo[#self.selectCardInfo + 1] = v
  310. end
  311. end
  312. end
  313. else
  314. for _, v in pairs(self.normalCardInfo) do
  315. if v.type == self.scrollViewType and v.cfgid == cfgid then
  316. self.selectCardInfo[#self.selectCardInfo + 1] = v
  317. end
  318. end
  319. end
  320. GUI:DataListUpdateData(self.view.datalist_card)
  321. if #self.selectCardInfo == 0 and not cfgid then
  322. GUI:setVisible(self.view.panel_no_card, true)
  323. else
  324. GUI:setVisible(self.view.panel_no_card, false)
  325. end
  326. if self.scrollViewType == E_ShapeShiftCardType.Attr then
  327. GUI:setVisible(self.view.img_redPoint, self.red_1)
  328. elseif self.scrollViewType == E_ShapeShiftCardType.GodAttr then
  329. GUI:setVisible(self.view.img_redPoint, self.red_3)
  330. end
  331. end
  332. ---刷新变身卡牌
  333. function this:RefreshExchangeScrollView()
  334. self.scrollViewType = E_ShapeShiftCardType.Exchange
  335. ---隐藏合成副窗口且不刷新赋能卡牌数据
  336. self:HideSynthesisPanel(true)
  337. self.synthesisIsShow = false
  338. GUI:setVisible(self.view.loopscrollview_card_exchange, true)
  339. GUI:setVisible(self.view.loopscrollview_card, false)
  340. GUI:setVisible(self.view.btn_synthesis_up, false)
  341. GUI:DataListUpdateData(self.view.datalist_card_exchange)
  342. if #self.exchangeCardInfo == 0 then
  343. GUI:setVisible(self.view.panel_no_card, true)
  344. GUI:setVisible(self.view.btn_auto_synthesis_ex, false)
  345. else
  346. GUI:setVisible(self.view.panel_no_card, false)
  347. GUI:setVisible(self.view.btn_auto_synthesis_ex, true)
  348. end
  349. end
  350. function this:SetSynthesisInfo(info, isAdd)
  351. if isAdd then
  352. ---合成材料满了不进行后续操作
  353. local isMax = true
  354. for i = 1, info.tbl.upAmount do
  355. if not self.selectCardSynthesis[i] or not self.selectCardSynthesis[i].id then
  356. self.selectCardSynthesis[i] = info
  357. isMax = false
  358. if i == 1 then
  359. self.attrList = {}
  360. GUI:setVisible(self.view.attr_layout, true)
  361. if info and table.count(info.entry) then
  362. for _, v in pairs(info.entry) do
  363. self.attrList[#self.attrList + 1] = { ["attrId"] = v.attrid, ["attrValue"] = v.attrvalue, ["attrCfgId"] = v.entryid }
  364. end
  365. end
  366. GUI:DataListUpdateData(self.view.attr_datalist)
  367. end
  368. break
  369. end
  370. end
  371. if isMax then
  372. return true
  373. end
  374. else
  375. for i = 1, info.tbl.upAmount do
  376. if self.selectCardSynthesis[i] and self.selectCardSynthesis[i].id == info.id then
  377. self.selectCardSynthesis[i] = nil
  378. if i == 1 then
  379. self.attrList = {}
  380. GUI:DataListUpdateData(self.view.attr_datalist)
  381. end
  382. break
  383. end
  384. end
  385. end
  386. self.synthesisCount = 1
  387. for i = 1, info.tbl.upAmount do
  388. if self.selectCardSynthesis[i] then
  389. self.synthesisCount = self.selectCardSynthesis[i].tbl.upAmount
  390. break
  391. end
  392. end
  393. if self.synthesisCount == 1 then
  394. GUI:setVisible(self.view.text_minor_1, false)
  395. GUI:setVisible(self.view.text_minor_2, false)
  396. elseif self.synthesisCount == 2 then
  397. GUI:setVisible(self.view.text_minor_1, true)
  398. GUI:setVisible(self.view.text_minor_2, false)
  399. elseif self.synthesisCount == 3 then
  400. GUI:setVisible(self.view.text_minor_1, true)
  401. GUI:setVisible(self.view.text_minor_2, true)
  402. end
  403. GUI:DataListUpdateData(self.view.synthesis_card_list)
  404. ---刷新单个卡牌选中框,不刷全部卡牌,防止刷新导致list位置重置
  405. if not self.needRefreshHouseList then
  406. ---@param v KLShapeShiftCardItem
  407. for _, v in pairs(self.cardItemList) do
  408. v:ShowSelectShow(info.id, isAdd)
  409. end
  410. end
  411. ---刷新数据正确性
  412. for _, v in pairs(self.selectCardInfo) do
  413. if v.id == info.id then
  414. v.select = isAdd
  415. break
  416. end
  417. end
  418. for i = 1, info.tbl.upAmount do
  419. if self.selectCardSynthesis[i] then
  420. ---选中主卡才刷新牌库,后续不刷新,防止刷新导致list位置重置
  421. if self.needRefreshHouseList then
  422. self:RefreshScrollView(self.selectCardSynthesis[i].cfgid)
  423. self.needRefreshHouseList = false
  424. end
  425. return
  426. end
  427. end
  428. ---无卡时需要刷新全部卡牌
  429. self.needRefreshHouseList = true
  430. self:RefreshScrollView(nil, true)
  431. end
  432. function this:RefreshSynthesisRedPoint()
  433. self.red_1 = false
  434. self.red_2 = false
  435. self.red_3 = false
  436. for _, v in pairs(self.normalCardInfo) do
  437. if v.type == E_ShapeShiftCardType.Attr and not self.red_1 then
  438. local cardCount = InfoManager.shapeShiftCardInfo:GetBagCardCountByCfgId(v.cfgid)
  439. if cardCount >= v.tbl.upAmount then
  440. self.red_1 = true
  441. if self.red_3 then
  442. break
  443. end
  444. end
  445. elseif v.type == E_ShapeShiftCardType.GodAttr and not self.red_3 then
  446. local cardCount = InfoManager.shapeShiftCardInfo:GetBagCardCountByCfgId(v.cfgid)
  447. if cardCount >= v.tbl.upAmount then
  448. self.red_3 = true
  449. if self.red_1 then
  450. break
  451. end
  452. end
  453. end
  454. end
  455. for _, v in pairs(self.exchangeCardInfo) do
  456. local cardCount = InfoManager.shapeShiftCardInfo:GetBagCardCountByCfgId(v.cfgid)
  457. if cardCount >= v.tbl.upAmount then
  458. self.red_2 = true
  459. break
  460. end
  461. end
  462. GUI:setVisible(self.view.img_redPoint_god_attr, self.red_3)
  463. GUI:setVisible(self.view.img_redPoint_shift, self.red_2)
  464. GUI:setVisible(self.view.img_redPoint_attr, self.red_1)
  465. end
  466. function this:Close()
  467. self.cardItemList = nil
  468. self.selectCardInfo = nil
  469. self.normalCardInfo = nil
  470. self.cardSynthesisList = nil
  471. self.selectCardSynthesis = nil
  472. end
  473. return this