KLUIMapBranchPanel.lua 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. ---@class KLUIMapBranchPanel:UIKmlLuaPanelBase
  2. ---@field view KLUIMapBranchPanelView
  3. ---@field mapBranchItemList KLMapBranchItem[]
  4. ---@field cfgLineInfo table<number,{mapInfoId:number,mapMoveId:number}>
  5. local KLUIMapBranchPanel = class(UIKmlLuaPanelBase)
  6. local this =KLUIMapBranchPanel
  7. ---创建时调用一次
  8. function this:Init()
  9. end
  10. E_MapType = {
  11. Normal = enum(0),
  12. Gold = enum(1),
  13. }
  14. ---创建或者刷新界面数据时调用
  15. function this:Refresh()
  16. ---@type cfg_map_line_column
  17. self.mapLineInfo = SL:GetConfig("cfg_map_line", SL:GetMetaValue(EMetaVarGetKey.MAP_ID))
  18. self.mapLine = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
  19. ---@type cfg_mapMove_column
  20. self.mapMoveId = SL:GetConfigMultiKeys("cfg_mapMove", SL:GetMetaValue(EMetaVarGetKey.MAP_ID), "mapID").id
  21. self.cfgLineInfo = self:GetLineInfo()
  22. self.serverLineInfo = {}
  23. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_MAP_INFO,self.cfgLineInfo[E_MapType.Normal].mapInfoId)
  24. if self:IsHasGoldLine() then
  25. GUI:setVisible(self.view.gold_toggle,true)
  26. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_MAP_INFO,self.cfgLineInfo[E_MapType.Gold].mapInfoId)
  27. else
  28. GUI:setVisible(self.view.gold_toggle,false)
  29. end
  30. if self:CurrentIsInGoldMap() then
  31. self.select_type = E_MapType.Gold
  32. GUI:Toggle_setIsOn(self.view.gold_toggle,true)
  33. else
  34. self.select_type = E_MapType.Normal
  35. GUI:Toggle_setIsOn(self.view.normal_toggle,true)
  36. end
  37. self.mapBranchItemList = {}
  38. GUI:ToggleGroup_AllowSwitChoff(self.view.switch_branch_togglegroup,true)
  39. end
  40. function this:RefreshLineState(currentLine,allLine,isGlod)
  41. local currentLineStr = "当前线路:%d"
  42. if isGlod and not self:CurrentIsInGoldMap() then
  43. GUI:Text_setString(self.view.currentLine_txt,string.format("当前线路:%d",0))
  44. elseif not isGlod and self:CurrentIsInGoldMap() then
  45. GUI:Text_setString(self.view.currentLine_txt,string.format(currentLineStr,0))
  46. else
  47. GUI:Text_setString(self.view.currentLine_txt,string.format(currentLineStr,currentLine))
  48. end
  49. local allLineLineStr = "线路总数:%d"
  50. GUI:Text_setString(self.view.allLine_txt,string.format(allLineLineStr,allLine))
  51. end
  52. ---注册UI事件和服务器消息
  53. function this:RegistEvents()
  54. GUI:AddOnClickEvent(self.view.closeBtn, self, self.CloseSelf)
  55. GUI:AddOnClickEvent(self.view.redName_btn, self, self.OpenRedNameTips)
  56. GUI:SetToggleOnValueChange(self.view.gold_toggle,self,self.ToggleGoldOnValueChange)
  57. GUI:SetToggleOnValueChange(self.view.normal_toggle,self,self.ToggleNormalOnValueChange)
  58. --SL:RegisterLuaNetMsg(MessageDef.ResThisMapLineInfoMessage, self.ResThisMapLineInfoMessage, self)
  59. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_MAP_INFO , self.RES_MAP_INFO , self)
  60. end
  61. ---@param message OutMapProtos.LineInfo[]
  62. function this:RES_MAP_INFO(_, message)
  63. if message then
  64. self:ChangeDataStruct(message)
  65. local line = SL:GetConfig("cfg_map_info", message["1"].mapCfgId)
  66. local goldmap = line.goldmap
  67. if self.select_type ~= goldmap then
  68. return
  69. end
  70. if goldmap == E_MapType.Gold then
  71. if self.serverLineInfo[E_MapType.Gold] then
  72. self:RefreshLineInfo(self.serverLineInfo[E_MapType.Gold],true)
  73. end
  74. else
  75. self:RefreshLineInfo(self.serverLineInfo[E_MapType.Normal])
  76. end
  77. end
  78. end
  79. ---@param message MapProtos.MapLinesInfo
  80. --function this:ResThisMapLineInfoMessage(_, message)
  81. -- if message then
  82. -- self.mapLinesInfo = message
  83. -- self:RefreshLineInfo(message)
  84. -- end
  85. --end
  86. ---@param message OutMapProtos.LineInfo[]
  87. function this:ChangeDataStruct(message)
  88. local data = {}
  89. local line = SL:GetConfig("cfg_map_info", message["1"].mapCfgId)
  90. local isGold = line.goldmap == 1
  91. for i, v in pairs(message) do
  92. if isGold then
  93. if not self.serverLineInfo[E_MapType.Gold] then
  94. self.serverLineInfo[E_MapType.Gold] = {}
  95. end
  96. self.serverLineInfo[E_MapType.Gold][tonumber(v.line)] = v
  97. else
  98. if not self.serverLineInfo[E_MapType.Normal] then
  99. self.serverLineInfo[E_MapType.Normal] = {}
  100. end
  101. self.serverLineInfo[E_MapType.Normal][tonumber(v.line)] = v
  102. end
  103. end
  104. return data
  105. end
  106. ---@param message OutMapProtos.LineInfo[]
  107. function this:RefreshLineInfo(message,isGlod)
  108. if message then
  109. self:RefreshLineState(SL:GetMetaValue(EMetaVarGetKey.MAP_LINE),#message,isGlod)
  110. for i, v in ipairs(self.mapBranchItemList) do
  111. v:HideItemUI()
  112. end
  113. --table.sort(message, function(a,b)
  114. -- return a.line < b.line
  115. --end)
  116. local maxCount = self.mapLineInfo.lineState[#self.mapLineInfo.lineState]
  117. if not isGlod then
  118. self.select_type = E_MapType.Normal
  119. for i, v in ipairs(message) do
  120. if not self.mapBranchItemList[i] then
  121. self.mapBranchItemList[i] = GUI:UIPanel_Open("dev/ui/Map/Item/KLMapBranch/KLMapBranchItem",self.view.branch_layout,self,nil,true)
  122. end
  123. self.mapBranchItemList[i]:RefreshUI(self.cfgLineInfo[E_MapType.Normal][i], v.playerCount, maxCount,false,self.mapLineInfo.pkline)
  124. self.mapBranchItemList[i]:SetOnValueChange(self.ToggleChangeEvent, self)
  125. end
  126. else
  127. self.select_type = E_MapType.Gold
  128. for i, v in ipairs(message) do
  129. i = tonumber(i)
  130. if not self.mapBranchItemList[i] then
  131. self.mapBranchItemList[i] = GUI:UIPanel_Open("dev/ui/Map/Item/KLMapBranch/KLMapBranchItem",self.view.branch_layout,self,nil,true)
  132. end
  133. self.mapBranchItemList[i]:RefreshUI(self.cfgLineInfo[E_MapType.Gold][i], v.playerCount, maxCount,true,self.mapLineInfo.pkline)
  134. self.mapBranchItemList[i]:SetOnValueChange(self.ToggleChangeEvent, self)
  135. end
  136. end
  137. end
  138. end
  139. function this:ToggleNormalOnValueChange(_,_,value)
  140. if value[1] then
  141. self:RefreshLineInfo(self.serverLineInfo[E_MapType.Normal])
  142. end
  143. end
  144. function this:ToggleGoldOnValueChange(_,_,value)
  145. if value[1] then
  146. self:RefreshLineInfo(self.serverLineInfo[E_MapType.Gold],true)
  147. end
  148. end
  149. function this:ToggleChangeEvent(_, eventData)
  150. self.mapLine = eventData.data
  151. end
  152. function this:CloseSelf()
  153. GUI:UIPanel_Close("dev/ui/Map/Panel/KLUIMapBranch/KLUIMapBranchPanel")
  154. SL.ShowMainPanel()
  155. end
  156. function this:SwitchBranchClick(isGoldMap)
  157. SL:showTransferAnimation()
  158. SL:ScheduleOnce(0.8, function()
  159. if isGoldMap then
  160. SL:MapTransfer(nil,self.mapLine,self.cfgLineInfo[E_MapType.Gold].mapMoveId)
  161. else
  162. SL:MapTransfer(nil,self.mapLine,self.cfgLineInfo[E_MapType.Normal].mapMoveId)
  163. end
  164. end)
  165. self:CloseSelf()
  166. end
  167. function this:OpenRedNameTips()
  168. local helpCfg=SL:GetConfig("cfg_rule_text",4)
  169. if helpCfg then
  170. SL:CommonStrTipsMessage({title =helpCfg.menutxt,str=helpCfg.location})
  171. end
  172. end
  173. function this:GetLineInfo()
  174. local lineInfo = {}
  175. ---@type cfg_mapMove_column
  176. local mapMoveCfg = SL:GetConfigMultiKeys("cfg_mapMove", SL:GetMetaValue(EMetaVarGetKey.MAP_ID), "mapID")
  177. if mapMoveCfg.goldgroup == 0 then
  178. lineInfo[E_MapType.Normal] = SL:GetConfig("cfg_map_line",mapMoveCfg.mapID).mapLine
  179. lineInfo[E_MapType.Normal].mapMoveId = mapMoveCfg.id
  180. lineInfo[E_MapType.Normal].mapInfoId = mapMoveCfg.mapID
  181. else
  182. ---@type cfg_mapMove_column[]
  183. local cfgs = SL:FindConfigs("cfg_mapMove","goldgroup",mapMoveCfg.goldgroup)
  184. for i, v in pairs(cfgs) do
  185. ---@type cfg_map_info_column
  186. local info = SL:GetConfig("cfg_map_info",v.mapID)
  187. if info.goldmap == 0 then
  188. lineInfo[E_MapType.Normal] = SL:GetConfig("cfg_map_line",v.mapID).mapLine
  189. lineInfo[E_MapType.Normal].mapMoveId = v.id
  190. lineInfo[E_MapType.Normal].mapInfoId = v.mapID
  191. else
  192. lineInfo[E_MapType.Gold] = SL:GetConfig("cfg_map_line",v.mapID).mapLine
  193. lineInfo[E_MapType.Gold].mapMoveId = v.id
  194. lineInfo[E_MapType.Gold].mapInfoId = v.mapID
  195. end
  196. end
  197. end
  198. return lineInfo
  199. end
  200. function this:IsHasGoldLine()
  201. if self.cfgLineInfo[E_MapType.Gold] then
  202. return true
  203. end
  204. return false
  205. end
  206. function this:CurrentIsInGoldMap()
  207. ---@type cfg_map_info_column
  208. local infoCfg = SL:GetConfig("cfg_map_info",tonumber(SL:GetMetaValue(EMetaVarGetKey.MAP_ID)))
  209. return infoCfg.goldmap == 1
  210. end
  211. function this:Close()
  212. self.serverLineInfo = nil
  213. end
  214. return this