KLUISystemTopPanel.lua 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. ---@class KLUISystemTopPanel:UIKmlLuaPanelBase
  2. ---@field view KLUISystemTopPanelView
  3. local KLUISystemTopPanel = class(UIKmlLuaPanelBase)
  4. local this = KLUISystemTopPanel
  5. local ESystemType = {
  6. NoShow = enum(0),
  7. ShowRight = enum(1),
  8. ShowTop = enum(2),
  9. }
  10. local ETopSystemType = {
  11. None = enum(0),
  12. Show = enum(1),
  13. }
  14. ---创建时调用一次
  15. function this:Init()
  16. self.systemTemplateList = {}
  17. self.systemType = ESystemType.ShowTop
  18. self.topSystemType = ETopSystemType.None
  19. end
  20. ---创建或者刷新界面数据时调用
  21. function this:Refresh()
  22. self:Clear()
  23. self:RefreshSystemMenu()
  24. end
  25. function this:RefreshSystemMenu()
  26. self:Clear()
  27. local tbl = SL:GetConfigTable("cfg_MainPanelUI")
  28. local isShowBoss = false
  29. ---@param v cfg_MainPanelUI_column
  30. for i, v in pairs(tbl) do
  31. if v.systemId == "挑战首领" and SL:GetMetaValue(EMetaVarGetKey.IS_OPEN_SYSTEMFUNCTION, v.systemId) then
  32. isShowBoss = true
  33. GUI:setPosition(self.view.bossBtn, v.positionOffset[1] or 285, v.positionOffset[2] or -21)
  34. GUI:Button_loadTextureNormal(self.view.bossBtn, v.BtnImage, "Atlas/UIMainPanel.spriteatlas")
  35. else
  36. if v.displayLocation == self.systemType and (self.topSystemType == ETopSystemType.None or (self.topSystemType == ETopSystemType.Show and v.shrink == ETopSystemType.Show)) then
  37. ---@type KLUISystemItem
  38. local systemTopTemplatePanelItem = GUI:UIPanel_Open("dev/ui/MainUI/Item/KLUISystem/KLUISystemItem", self.view.systemMenu, self, v, true)
  39. GUI:SetID(systemTopTemplatePanelItem.view.root, v.btnName)
  40. local isMeet = SL:GetMetaValue(EMetaVarGetKey.IS_OPEN_SYSTEMFUNCTION, v.systemId)
  41. if v.systemId == "雷刃炎狼兽" then
  42. isMeet = InfoManager.mountPreferenceInfo:IsShowBtn()
  43. local endTime = (InfoManager.mountPreferenceInfo.endTime - Time.GetServerTime()) // 1000
  44. if endTime > 0 then
  45. local TimeText = systemTopTemplatePanelItem.view.TimeText
  46. local BtnPanel = systemTopTemplatePanelItem.view.root
  47. GUI:setVisible(TimeText, true)
  48. self.mountPreTimer = SL:Schedule(self.mountPreTimer, 0, 1, endTime + 1, function()
  49. local timeText = InfoManager.mountPreferenceInfo.endTime - Time.GetServerTime()
  50. GUI:Text_setString(TimeText, GUIUtil.FormatTimeHMS(timeText // 1000))
  51. if timeText <= 0 then
  52. GUI:setVisible(BtnPanel, false)
  53. GUI:setVisible(TimeText, false)
  54. return
  55. end
  56. end)
  57. end
  58. end
  59. if v.systemId == "运营活动" then
  60. --运营活动入口显隐由后端和system_switch表配置决定
  61. isMeet = InfoManager.mainOperateActivityInfo.isOperateActivityMainBtnShow and isMeet
  62. local TimeText = systemTopTemplatePanelItem.view.TimeText
  63. if isMeet then
  64. local endTime = (InfoManager.mainOperateActivityInfo.operateActivityTypeCloseTime - Time.GetServerTime()) // 1000
  65. if endTime > 0 then
  66. GUI:setVisible(TimeText, true)
  67. self.MainOperateTimer = SL:Schedule(self.MainOperateTimer, 0, 1, endTime+1, function()
  68. local timeText = (InfoManager.mainOperateActivityInfo.operateActivityTypeCloseTime - Time.GetServerTime()) // 1000
  69. GUI:Text_setString(TimeText, GUIUtil.FormatTimeHMS(timeText))
  70. if timeText <= 0 then
  71. GUI:setVisible(TimeText, false)
  72. return
  73. end
  74. end)
  75. else
  76. GUI:setVisible(TimeText, false)
  77. end
  78. else
  79. GUI:setVisible(TimeText, false)
  80. end
  81. end
  82. if v.systemId == "特惠礼包" then
  83. isMeet = InfoManager.rechargePushInfo:IsShowBtn()
  84. local endTime = (InfoManager.rechargePushInfo.endTime - Time.GetServerTime()) // 1000
  85. if endTime > 0 then
  86. local TimeText = systemTopTemplatePanelItem.view.TimeText
  87. local BtnPanel = systemTopTemplatePanelItem.view.root
  88. GUI:setVisible(TimeText, true)
  89. self.PushGiftTimer = SL:Schedule(self.PushGiftTimer, 0, 1, endTime + 1, function()
  90. local timeText = InfoManager.rechargePushInfo.endTime - Time.GetServerTime()
  91. GUI:Text_setString(TimeText, GUIUtil.FormatTimeHMS(timeText // 1000))
  92. if timeText <= 0 then
  93. GUI:setVisible(BtnPanel, false)
  94. GUI:setVisible(TimeText, false)
  95. return
  96. end
  97. end)
  98. end
  99. end
  100. if v.systemId == "首充" then
  101. isMeet = InfoManager.uiFirstChargeInfo:IsShowBtn()
  102. --if isMeet then
  103. -- local RoleId = SL:GetMetaValue(EMetaVarGetKey.MAIN_ACTOR_ID)
  104. -- local IsShow = PlayerPrefs.GetString("FirstChargeAdComplete" .. RoleId, "false")
  105. -- if IsShow then
  106. -- local reTime = PlayerPrefs.GetString("FirstChargeAdTime" .. RoleId, "0")
  107. -- if tonumber(reTime) > 0 then
  108. -- local careerId = PlayerPrefs.GetString("FirstChargeAdPopUpsPictureCareerID" ..RoleId, "")
  109. -- local Icon = PlayerPrefs.GetString("FirstChargeAdPopUpsPictureIcon" ..RoleId, "")
  110. -- GUI:UIPanel_Open("dev/outui/FirstCharge/Panel/KLFirstChargeAD/KLFirstChargeADPanel", nil, nil, { count = tonumber(reTime),popUpsPicture={careerId,Icon} })
  111. -- end
  112. -- end
  113. --end
  114. end
  115. if v.systemId == "限时礼包" then
  116. isMeet = InfoManager.rechargeActivityInfo:IsShowTimeLimitGiftBtn()
  117. if isMeet then
  118. local TimeText = systemTopTemplatePanelItem.view.TimeText
  119. local BtnPanel = systemTopTemplatePanelItem.view.root
  120. local msgEndTime = InfoManager.rechargeActivityInfo:GetTimeLimitGiftEndTime()
  121. if msgEndTime then
  122. local endTime = (msgEndTime - Time.GetServerTime()) // 1000
  123. if endTime > 0 then
  124. GUI:setVisible(TimeText, true)
  125. local maxTime = InfoManager.rechargeActivityInfo:GetMaxTimeLimitGiftEndTime()
  126. self.TimeLimitGiftTimer = SL:Schedule(self.TimeLimitGiftTimer, 0, 1, maxTime+1, function()
  127. local endTime1,TimeLimitGiftNextEndGroup = InfoManager.rechargeActivityInfo:GetTimeLimitGiftEndTime()
  128. local maxTime1 = InfoManager.rechargeActivityInfo:GetMaxTimeLimitGiftEndTime()
  129. if not endTime1 then
  130. --SL:LogError("全买光或过期或没有")
  131. GUI:setVisible(BtnPanel, false)
  132. GUI:setVisible(TimeText, false)
  133. local panel = GUI:GetUI("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  134. if panel then
  135. GUI:UIPanel_Close("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  136. SL.ShowMainPanel()
  137. end
  138. return
  139. end
  140. local timeText = endTime1 - Time.GetServerTime()
  141. GUI:Text_setString(TimeText, GUIUtil.FormatTimeHMS(timeText // 1000))
  142. if not self.TimeLimitGiftNextEndGroup or TimeLimitGiftNextEndGroup ~= self.TimeLimitGiftNextEndGroup then
  143. --SL:LogError("转到下一个礼包()")
  144. self.TimeLimitGiftNextEndGroup = TimeLimitGiftNextEndGroup
  145. local panel = GUI:GetUI("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  146. if panel then
  147. panel:Refresh()
  148. end
  149. end
  150. --SL:LogError("endTime1"..(timeText // 1000).." maxTime1"..maxTime1)
  151. if timeText < 1000 then
  152. if timeText // 1000 == maxTime1 then
  153. --SL:LogError("倒计时结束")
  154. GUI:setVisible(BtnPanel, false)
  155. GUI:setVisible(TimeText, false)
  156. local panel = GUI:GetUI("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  157. if panel then
  158. GUI:UIPanel_Close("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  159. SL.ShowMainPanel()
  160. end
  161. return
  162. else
  163. --SL:LogError("转到下一个礼包2")
  164. local panel = GUI:GetUI("dev/outui/Recharge/Panel/KLRechargeActivity/KLRechargeActivityPanel")
  165. if panel then
  166. panel:Refresh()
  167. end
  168. end
  169. end
  170. end)
  171. else
  172. GUI:setVisible(BtnPanel, false)
  173. GUI:setVisible(TimeText, false)
  174. end
  175. else
  176. GUI:setVisible(BtnPanel, false)
  177. GUI:setVisible(TimeText, false)
  178. end
  179. end
  180. end
  181. GUI:setVisible(systemTopTemplatePanelItem.view.root, isMeet)
  182. table.insert(self.systemTemplateList, systemTopTemplatePanelItem)
  183. if v.systemId == "月卡" then
  184. if self.cur_monthCard_effect then
  185. GUI:SetParent(self.cur_monthCard_effect, systemTopTemplatePanelItem)
  186. else
  187. ---@type cfg_model_effect_column
  188. local effect_tbl = SL:GetConfig("cfg_model_effect", 20001, "id")
  189. self.cur_monthCard_effect = GUI:Model_Create(systemTopTemplatePanelItem.view.root, {
  190. id = "cur_monthCard_effect",
  191. mscale = "1,1,1",
  192. mrotate = "0,200,0",
  193. zindex = "0",
  194. x = "0",
  195. y = "2",
  196. z = "0",
  197. a = "00",
  198. src = effect_tbl.path
  199. })
  200. end
  201. end
  202. end
  203. end
  204. end
  205. GUI:setVisible(self.view.bossBtn, isShowBoss)
  206. if isShowBoss then
  207. GUI:setPositionX(self.view.systemMenu, -75)
  208. else
  209. GUI:setPositionX(self.view.systemMenu, 0)
  210. end
  211. SL:RefreshPanelALLRedPoint("KLUISystemTopPanel")
  212. end
  213. ---注册UI事件和服务器消息
  214. function this:RegistEvents()
  215. GUI:AddOnClickEvent(self.view.sysExpand, self, self.OnClicksysExpandBtn)
  216. GUI:AddOnClickEvent(self.view.sysExpandClickBg, self, self.OnClicksysExpandBtn)
  217. GUI:AddOnClickEvent(self.view.sysFold, self, self.OnClicksysFoldBtn)
  218. GUI:AddOnClickEvent(self.view.sysFoldClickBg, self, self.OnClicksysFoldBtn)
  219. GUI:AddOnClickEvent(self.view.bossBtn, self, self.OnClickBossBtn)
  220. SL:RegisterLUAEvent(LUA_EVENT_HIDE_RIGHT_BTN_VIEW, self.OnClicksysFoldBtn, self)
  221. SL:RegisterLUAEvent(LUA_EVENT_LEVELCHANGE, self.RefreshBossBtn, self)
  222. SL:RegisterLUAEvent(LUA_EVENT_OPEN_SERVER_DAY_CHANGE, self.RefreshBossBtn, self)
  223. SL:RegisterLUAEvent(LUA_EVENT_CHANGESCENE, self.LUA_EVENT_CHANGESCENE, self)
  224. SL:RegisterLUAEvent(LUA_EVENT_ENTRY_MAP_LOADING_PANEL_CLOSE, self.LUA_EVENT_ENTRY_MAP_LOADING_PANEL_CLOSE, self)
  225. SL:RegisterLUAEvent(LUA_EVENT_RES_FIRST_CHARGE_GIFT_INFO, self.RES_FirstChargeGift_Info, self)
  226. SL:RegisterLUAEvent(LUA_EVENT_MAINOPERATEACTIVITY_CHANGE, self.RefreshSystemMenu, self)
  227. SL:RegisterLUAEvent(LUA_EVENT_LEVELCHANGE, self.RefreshSystemMenu, self)
  228. end
  229. function this:RES_FirstChargeGift_Info(_, message)
  230. local count = 0
  231. for rewardId, state in pairs(message.data.rewards) do
  232. if state == 2 then
  233. count = count + 1
  234. end
  235. end
  236. if count == 3 then
  237. for i, systemItem in pairs(self.systemTemplateList) do
  238. if systemItem.args.id == 203 then
  239. GUI:SetActive(systemItem.view.root, false)
  240. end
  241. end
  242. end
  243. end
  244. function this:OnClicksysExpandBtn()
  245. if self.topSystemType ~= ETopSystemType.None then
  246. GUI:setVisible(self.view.sysExpand, false)
  247. GUI:setVisible(self.view.sysFold, true)
  248. self.topSystemType = ETopSystemType.None
  249. GUI:setContentSize(self.view.systemMenu,470,115)
  250. self:RefreshSystemMenu()
  251. --隐藏boss血条
  252. SL:onLUAEvent(LUA_EVENT_HIDE_BOSS_HP)
  253. end
  254. end
  255. function this:OnClicksysFoldBtn()
  256. if self.topSystemType ~= ETopSystemType.Show then
  257. GUI:setVisible(self.view.sysExpand, true)
  258. GUI:setVisible(self.view.sysFold, false)
  259. self.topSystemType = ETopSystemType.Show
  260. GUI:setContentSize(self.view.systemMenu,170,115)
  261. self:RefreshSystemMenu()
  262. --取消隐藏boss血条
  263. SL:onLUAEvent(LUA_EVENT_CANCEL_HIDE_BOSS_HP)
  264. end
  265. end
  266. function this:OnClickBossBtn()
  267. ---@type cfg_MainPanelUI_column
  268. local tbl = SL:GetConfig("cfg_MainPanelUI", 215, "id")
  269. --EventManager.Dispatch(LUA_EVENT_OPENMAINSYSTEMFUNCTION, tbl and tbl.systemId or "挑战首领")
  270. SL:LUA_EVENT_OPENMAINSYSTEMFUNCTION(tbl and tbl.systemId or "挑战首领")
  271. end
  272. function this:RefreshBossBtn()
  273. local isShowBoss = SL:GetMetaValue(EMetaVarGetKey.IS_OPEN_SYSTEMFUNCTION, "挑战首领")
  274. GUI:setVisible(self.view.bossBtn, isShowBoss)
  275. if isShowBoss then
  276. GUI:setPositionX(self.view.systemMenu, -75)
  277. else
  278. GUI:setPositionX(self.view.systemMenu, 0)
  279. end
  280. end
  281. function this:LUA_EVENT_CHANGESCENE(_, data)
  282. ---@type cfg_map_info_column
  283. local tbl = SL:GetConfig("cfg_map_info", data.cfgId)
  284. if tbl and tbl.type == EMapType.CopyMap then
  285. self:OnClicksysFoldBtn()
  286. end
  287. end
  288. function this:LUA_EVENT_ENTRY_MAP_LOADING_PANEL_CLOSE(_, data)
  289. local mapId = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
  290. ---@type cfg_map_info_column
  291. local tbl = SL:GetConfig("cfg_map_info", mapId)
  292. if tbl and tbl.type == EMapType.CopyMap then
  293. self:OnClicksysFoldBtn()
  294. end
  295. end
  296. ---清除数据
  297. function this:Clear()
  298. --if GUI:GetUI("dev/outui/FirstCharge/Panel/KLFirstChargeAD/KLFirstChargeADPanel") then
  299. -- GUI:UIPanel_Close("dev/outui/FirstCharge/Panel/KLFirstChargeAD/KLFirstChargeADPanel")
  300. --end
  301. ---@param systemItem KLUISystemItem
  302. for i, systemItem in pairs(self.systemTemplateList) do
  303. GUI:UIPanel_Close(nil, systemItem)
  304. end
  305. self.systemTemplateList = {}
  306. self.cur_monthCard_effect = nil
  307. if self.PushGiftTimer then
  308. SL:UnSchedule(self.PushGiftTimer)
  309. self.PushGiftTimer = nil
  310. end
  311. if self.mountPreTimer then
  312. SL:UnSchedule(self.mountPreTimer)
  313. self.mountPreTimer = nil
  314. end
  315. self.TimeLimitGiftNextEndGroup = nil
  316. if self.TimeLimitGiftTimer then
  317. SL:UnSchedule(self.TimeLimitGiftTimer)
  318. self.TimeLimitGiftTimer = nil
  319. end
  320. if self.MainOperateTimer then
  321. SL:UnSchedule(self.MainOperateTimer)
  322. self.MainOperateTimer = nil
  323. end
  324. end
  325. function this:Close()
  326. if self.PushGiftTimer then
  327. SL:UnSchedule(self.PushGiftTimer)
  328. self.PushGiftTimer = nil
  329. end
  330. if self.mountPreTimer then
  331. SL:UnSchedule(self.mountPreTimer)
  332. self.mountPreTimer = nil
  333. end
  334. self.TimeLimitGiftNextEndGroup = nil
  335. if self.TimeLimitGiftTimer then
  336. SL:UnSchedule(self.TimeLimitGiftTimer)
  337. self.TimeLimitGiftTimer = nil
  338. end
  339. self.cur_monthCard_effect = nil
  340. self.systemTemplateList = {}
  341. if self.MainOperateTimer then
  342. SL:UnSchedule(self.MainOperateTimer)
  343. self.MainOperateTimer = nil
  344. end
  345. end
  346. return this