KLShapeShiftCardHousePanel.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. ---@class KLShapeShiftCardHousePanel:UIKmlLuaPanelBase
  2. ---@field view KLShapeShiftCardHousePanelView
  3. local KLShapeShiftCardHousePanel = class(UIKmlLuaPanelBase)
  4. local this = KLShapeShiftCardHousePanel
  5. function this:AsyncLoadUI()
  6. end
  7. local E_CardQuality = {
  8. Blue = enum(1),
  9. Gold = enum(2),
  10. Red = enum(3),
  11. }
  12. ---创建时调用一次
  13. function this:Init()
  14. self.cardItemList = {}
  15. GUI:DataListInitData(self.view.datalist_card,
  16. function()
  17. return self:ItemCountFunc()
  18. end,
  19. function(realIndex)
  20. return self:ItemGetFunc(realIndex)
  21. end,
  22. nil,
  23. function(realIndex, kmlCtrl)
  24. return self:ItemUpdateFunc(realIndex, kmlCtrl)
  25. end
  26. )
  27. self.recoveryIsShow = false
  28. self.toggleIndex = 0
  29. self.allCardInfo = {}
  30. GUI:OSAScrollView_Initialized(self.view.osa_item_list, nil, self.RecoveryItemUpdateFun, self)
  31. end
  32. function this:ItemCountFunc()
  33. return #self.selectCardInfo
  34. end
  35. function this:ItemGetFunc()
  36. ---@type KLShapeShiftCardItem
  37. local item = GUI:UIPanel_Open("dev/outui/ShapeShiftCard/Item/KLShapeShiftCard/KLShapeShiftCardItem", self.view.datalist_card, self, { type = E_ShapeShiftCardFuncType.House }, true)
  38. local kmlCtrl = item.view.root
  39. self.cardItemList[kmlCtrl] = item
  40. return kmlCtrl
  41. end
  42. ---@param realIndex number
  43. ---@param kmlCtrl KingML.KmlControl
  44. function this:ItemUpdateFunc(realIndex, kmlCtrl)
  45. ---@type KLShapeShiftCardItem
  46. local item = self.cardItemList[kmlCtrl]
  47. item:RefreshBagItem(self.selectCardInfo[realIndex + 1], realIndex + 1)
  48. end
  49. function this:RecoveryItemUpdateFun(item, index)
  50. local item_recovery = GUI:GetChildById(item, "item_recovery")
  51. local item_count = GUI:GetChildById(item, "item_count")
  52. local info = self.recoveryAward[index + 1]
  53. GUI:Item_setItemId(item_recovery, info.id)
  54. if info.max == info.min then
  55. GUI:Text_setString(item_count, tostring(info.max))
  56. else
  57. GUI:Text_setString(item_count, info.min .. "-" .. info.max)
  58. end
  59. end
  60. ---注册UI事件和服务器消息
  61. function this:RegistEvents()
  62. GUI:AddOnClickEvent(self.view.btn_recovery_up, self, self.RefreshRecoveryPanel)
  63. GUI:AddOnClickEvent(self.view.btn_go, self, self.SwitchCardShop)
  64. GUI:AddOnClickEvent(self.view.btn_recovery, self, self.RecoveryFunc)
  65. GUI:AddOnClickEvent(self.view.btn_tips, self, self.FuncTips)
  66. GUI:SetToggleOnValueChange(self.view.toggle_all, self, self.ToggleAllOnChange)
  67. GUI:SetToggleOnValueChange(self.view.toggle_shift, self, self.ToggleShiftOnChange)
  68. GUI:SetToggleOnValueChange(self.view.toggle_attr, self, self.ToggleAttrOnChange)
  69. GUI:SetToggleOnValueChange(self.view.toggle_god_attr, self, self.ToggleGodAttrOnChange)
  70. for i = 1, 3 do
  71. GUI:SetToggleOnValueChange(self.view["toggle_" .. i], self, self.ToggleRecoveryOnChange, i)
  72. end
  73. --SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_TRANSFER_CARD_BAG, self.RES_TRANSFER_CARD_BAG, self)
  74. SL:RegisterLUAEvent(LUA_SHAPE_CARD_BAG_CHANGE, self.RES_TRANSFER_CARD_BAG, self)
  75. end
  76. ---界面显示时调用一次
  77. function this:Show()
  78. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_TRANSFER_CARD_BAG)
  79. end
  80. ---创建或者刷新界面数据时调用
  81. function this:Refresh()
  82. end
  83. function this:RefreshRecoveryPanel()
  84. if self.recoveryIsShow then
  85. self:HideRecoveryPanel()
  86. else
  87. self:ShowRecoveryPanel()
  88. end
  89. self.recoveryIsShow = not self.recoveryIsShow
  90. end
  91. function this:ShowRecoveryPanel()
  92. GUI:setVisible(self.view.panel_recovery, true)
  93. GUI:setPositionY(self.view.btn_recovery_up, 152)
  94. GUI:setContentSize(self.view.loopscrollview_card, 825, 300)
  95. GUI:Image_loadTexture(self.view.img_btn_icon, "house_down", "Atlas/KLShapeShiftCard.spriteatlas")
  96. if #self.selectCardInfo == 0 then
  97. GUI:setVisible(self.view.panel_no_card, false)
  98. end
  99. self.allTypeCardCount = {}
  100. self.selectTypeCardCount = {}
  101. for _, v in pairs(self.selectCardInfo) do
  102. if v.quality == E_CardQuality.Blue then
  103. if self.allTypeCardCount[v.quality] then
  104. self.allTypeCardCount[v.quality] = self.allTypeCardCount[v.quality] + 1
  105. else
  106. self.allTypeCardCount[v.quality] = 1
  107. end
  108. self.selectTypeCardCount[v.quality] = 0
  109. end
  110. if v.quality == E_CardQuality.Gold then
  111. if self.allTypeCardCount[v.quality] then
  112. self.allTypeCardCount[v.quality] = self.allTypeCardCount[v.quality] + 1
  113. else
  114. self.allTypeCardCount[v.quality] = 1
  115. end
  116. self.selectTypeCardCount[v.quality] = 0
  117. end
  118. if v.quality == E_CardQuality.Red then
  119. if self.allTypeCardCount[v.quality] then
  120. self.allTypeCardCount[v.quality] = self.allTypeCardCount[v.quality] + 1
  121. else
  122. self.allTypeCardCount[v.quality] = 1
  123. end
  124. self.selectTypeCardCount[v.quality] = 0
  125. end
  126. end
  127. for i = 1, 3 do
  128. GUI:Toggle_setIsOn(self.view["toggle_" .. i], false)
  129. end
  130. end
  131. function this:HideRecoveryPanel()
  132. GUI:setVisible(self.view.panel_recovery, false)
  133. GUI:setPositionY(self.view.btn_recovery_up, -22)
  134. GUI:setContentSize(self.view.loopscrollview_card, 825, 463)
  135. GUI:Image_loadTexture(self.view.img_btn_icon, "house_up", "Atlas/KLShapeShiftCard.spriteatlas")
  136. if #self.selectCardInfo == 0 then
  137. GUI:setVisible(self.view.panel_no_card, true)
  138. end
  139. end
  140. function this:SwitchCardShop()
  141. local ui = GUI:GetUI("dev/outui/ShapeShiftCard/Panel/KLShapeShiftCardMain/KLShapeShiftCardMainPanel")
  142. if ui then
  143. GUI:Toggle_setIsOn(ui.view.toggle_shop, true)
  144. end
  145. end
  146. function this:RecoveryFunc()
  147. local tbl = {}
  148. for i, v in pairs(self.selectRecoveryTbl) do
  149. if v.select then
  150. tbl[#tbl + 1] = i
  151. end
  152. end
  153. if table.count(tbl) > 0 then
  154. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_TRANSFER_CARD_RECOVER, tbl)
  155. end
  156. end
  157. function this:FuncTips()
  158. local helpCfg = SL:GetConfig("cfg_rule_text", 102)
  159. if helpCfg then
  160. SL:CommonStrTipsMessage({ title = helpCfg.menutxt, str = helpCfg.location })
  161. end
  162. end
  163. function this:ToggleAllOnChange(_, _, eventData)
  164. if eventData[1] then
  165. self:RefreshScrollView(0)
  166. end
  167. end
  168. function this:ToggleShiftOnChange(_, _, eventData)
  169. if eventData[1] then
  170. self:RefreshScrollView(1)
  171. end
  172. end
  173. function this:ToggleAttrOnChange(_, _, eventData)
  174. if eventData[1] then
  175. self:RefreshScrollView(2)
  176. end
  177. end
  178. function this:ToggleGodAttrOnChange(_, _, eventData)
  179. if eventData[1] then
  180. self:RefreshScrollView(3)
  181. end
  182. end
  183. function this:ToggleRecoveryOnChange(_, data, eventData)
  184. if self.noRefresh then
  185. self.noRefresh = false
  186. return
  187. end
  188. local refresh = false
  189. for _, v in pairs(self.selectCardInfo) do
  190. if v.quality == data and v.select ~= eventData[1] then
  191. v.select = eventData[1]
  192. self:SetRecoveryInfo(v, eventData[1], nil, v.quality)
  193. refresh = true
  194. end
  195. end
  196. if refresh then
  197. self:RefreshScrollView(self.toggleIndex, true)
  198. self:RefreshRecoveryAward()
  199. end
  200. end
  201. function this:RES_TRANSFER_CARD_BAG()
  202. self.allCardInfo = InfoManager.shapeShiftCardInfo.allCardInfo
  203. self:RefreshScrollView(self.toggleIndex)
  204. self:HideRecoveryPanel()
  205. end
  206. function this:RefreshScrollView(type, noReset)
  207. self.selectCardInfo = {}
  208. self.toggleIndex = type
  209. if type == 0 then
  210. if not noReset then
  211. for _, v in pairs(self.allCardInfo) do
  212. v.select = false
  213. end
  214. end
  215. self.selectCardInfo = self.allCardInfo
  216. else
  217. for _, v in pairs(self.allCardInfo) do
  218. if not noReset then
  219. v.select = false
  220. end
  221. if v.type == type then
  222. self.selectCardInfo[#self.selectCardInfo + 1] = v
  223. end
  224. end
  225. end
  226. GUI:DataListUpdateData(self.view.datalist_card)
  227. if not noReset then
  228. self.selectRecoveryTbl = {}
  229. if self.recoveryIsShow then
  230. self:ShowRecoveryPanel()
  231. self:RefreshRecoveryAward()
  232. end
  233. end
  234. if #self.selectCardInfo > 0 then
  235. GUI:setVisible(self.view.panel_no_card, false)
  236. else
  237. if not self.recoveryIsShow then
  238. GUI:setVisible(self.view.panel_no_card, true)
  239. end
  240. end
  241. end
  242. function this:SetRecoveryInfo(info, isSelect, tblIndex, quality)
  243. if not self.selectRecoveryTbl then
  244. self.selectRecoveryTbl = {}
  245. end
  246. self.selectRecoveryTbl[info.id] = { cfgid = info.cfgid, select = isSelect }
  247. if tblIndex then
  248. quality = self.selectCardInfo[tblIndex].quality
  249. end
  250. if isSelect then
  251. self.selectTypeCardCount[quality] = self.selectTypeCardCount[quality] + 1
  252. if self.selectTypeCardCount[quality] == self.allTypeCardCount[quality] and tblIndex then
  253. self.noRefresh = true
  254. GUI:Toggle_setIsOn(self.view["toggle_" .. quality], true)
  255. end
  256. else
  257. self.selectTypeCardCount[quality] = self.selectTypeCardCount[quality] - 1
  258. if GUI:Toggle_getIsOn(self.view["toggle_" .. quality]) == "1" and tblIndex then
  259. self.noRefresh = true
  260. GUI:Toggle_setIsOn(self.view["toggle_" .. quality], false)
  261. end
  262. end
  263. if tblIndex then
  264. self.selectCardInfo[tblIndex].select = isSelect
  265. self:RefreshRecoveryAward()
  266. end
  267. end
  268. function this:RefreshRecoveryAward()
  269. local recoveryAward = {}
  270. for _, v in pairs(self.selectRecoveryTbl) do
  271. if v.select then
  272. local group = SL:GetConfig("cfg_item", v.cfgid).recoveryGroup
  273. local material = SL:GetConfig("cfg_recovery", group).material
  274. for _, k in pairs(material) do
  275. if recoveryAward[k[1]] then
  276. recoveryAward[k[1]].min = recoveryAward[k[1]].min + k[2]
  277. recoveryAward[k[1]].max = recoveryAward[k[1]].max + k[3]
  278. else
  279. local tbl = {}
  280. tbl.id = k[1]
  281. tbl.min = k[2]
  282. tbl.max = k[3]
  283. recoveryAward[k[1]] = tbl
  284. end
  285. end
  286. end
  287. end
  288. self.recoveryAward = {}
  289. for _, v in pairs(recoveryAward) do
  290. self.recoveryAward[#self.recoveryAward + 1] = v
  291. end
  292. GUI:OSAScrollView_RefreshList(self.view.osa_item_list, #self.recoveryAward)
  293. end
  294. function this:Close()
  295. self.cardItemList = nil
  296. self.recoveryAward = nil
  297. self.selectRecoveryTbl = nil
  298. self.allCardInfo = nil
  299. self.selectCardInfo = nil
  300. end
  301. return this