源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

486 行
16 KiB

  1. UITabButton = UITabButton or BaseClass(BaseItem)
  2. local UITabButton = UITabButton
  3. UITabButton.Style = {
  4. [1] = {
  5. --带图标的
  6. offsetX = 4,
  7. offsetY = 14,
  8. spacing = 70.6,
  9. size = Vector2(131, 85),
  10. norsouce = "com_empty",
  11. selsouce = "ui_tab_13",
  12. fontSize = 20,
  13. win_name = UIType.UITabButton,
  14. },
  15. [2] = {
  16. --不带图标的
  17. offsetX = 0,
  18. offsetY = 0,
  19. spacing = 72,
  20. size = Vector2(115, 72),
  21. trm_size = Vector2(115, 72),--节点大小
  22. norsouce = "com_empty",
  23. selsouce = "ui_tab_12",
  24. fontSize = 20,
  25. win_name = UIType.UITabButton4,
  26. red_dot_pos = Vector2(40, 15),--红点坐标,有就修改没有就默认
  27. },
  28. [3] = {
  29. --不带图标的并且四个字居中的
  30. offsetX = 0,
  31. offsetY = 0,
  32. spacing = 71,
  33. size = Vector2(155, 65),--Bg大小
  34. trm_size = Vector2(150, 71),--节点大小
  35. norsouce = "com_empty",
  36. selsouce = "ui_tab_1",
  37. fontSize = 20,
  38. win_name = UIType.UITabButton2,
  39. red_dot_pos = Vector2(63, 23.5),--红点坐标,有就修改没有就默认
  40. },
  41. [4] = {
  42. --SizeSamllSP窗口的特殊button样式(只是位置偏移不同,并没有什么特殊)
  43. offsetX = 0,
  44. offsetY = 0,
  45. spacing = 83,
  46. size = Vector2(120, 90),--Bg大小
  47. trm_size = Vector2(120, 90),--节点大小
  48. norsouce = "com_empty",
  49. selsouce = "ui_tab_1",
  50. fontSize = 20,
  51. win_name = UIType.UITabButton4,
  52. red_dot_pos = Vector2(49, 32),--红点坐标,有就修改没有就默认
  53. },
  54. [5] = {
  55. --真全屏的不带图标的并且四个字居中的
  56. offsetX = 1.5,
  57. offsetY = 8.5,
  58. spacing = 71,
  59. size = Vector2(131, 85),--Bg大小
  60. trm_size = Vector2(135, 71),--节点大小
  61. norsouce = "com_empty",
  62. selsouce = "ui_tab_13",
  63. fontSize = 20,
  64. win_name = UIType.UITabButton5,
  65. can_set_red_num = true, --该布局有red_num节点
  66. },
  67. --全屏窗口排行榜的特殊页签样式
  68. [6] = {
  69. --带图标的
  70. offsetX = 4,
  71. offsetY = 14,
  72. spacing = 70.6,
  73. size = Vector2(131, 85),
  74. norsouce = "com_empty",
  75. selsouce = "ui_tab_13",
  76. fontSize = 20,
  77. win_name = UIType.UITabButton6,
  78. },
  79. --伪全屏窗口排行榜的特殊页签样式
  80. [8] = {
  81. --不带图标的并且四个字居中的
  82. offsetX = 0,
  83. offsetY = 0,
  84. spacing = 74,
  85. size = Vector2(168, 67),--Bg大小
  86. trm_size = Vector2(166, 65),--节点大小
  87. norsouce = "com_empty",
  88. selsouce = "ui_tab_8",
  89. fontSize = 18,
  90. win_name = UIType.UITabButton8,
  91. red_dot_pos = Vector2(73, 26),--红点坐标,有就修改没有就默认
  92. },
  93. [9] = {
  94. --特殊用,带图标的,如珍宝
  95. offsetX = -19,
  96. offsetY = 35-17,
  97. spacing = 71,
  98. size = Vector2(176, 84),--Bg大小
  99. norsouce = "com_empty",
  100. selsouce = "ui_tab_15",
  101. fontSize = 20,
  102. win_name = UIType.UITabButton9,
  103. },
  104. }
  105. function UITabButton:__init(parent_wnd,prefab_asset,layer_name,view_style,special_style,is_scroll)
  106. self.button_style = view_style == UITabWindow.SizeLarge and 1 or 2
  107. self.is_scroll = is_scroll
  108. -- (parent_wnd,prefab_asset,layer_name, show_bg, left_alignment)
  109. if special_style and UITabButton.Style[special_style] then
  110. --特殊选项
  111. self.button_style = special_style
  112. elseif view_style == UITabWindow.SizeSmallHall then
  113. self.button_style = 3
  114. elseif view_style == UITabWindow.SizeSmallSP then
  115. self.button_style = 4
  116. end
  117. self.base_file = "uiComponent"
  118. self.layout_file = UITabButton.Style[self.button_style] and UITabButton.Style[self.button_style].win_name or UIType.UITabButton
  119. self.index = 0
  120. self.cur_choose_index = 1
  121. self.name = ""
  122. self.extra_arg_table = false
  123. self:Load()
  124. self.cur_layout = lua_viewM.cur_layout or "" --公共组件,要判断是否对应界面
  125. self.is_selected = false
  126. self.redpos_loaded = false -- 红点位置是否已经加载过了
  127. end
  128. function UITabButton:__delete()
  129. if self.guide_trigger_id then
  130. GlobalEventSystem:UnBind(self.guide_trigger_id)
  131. self.guide_trigger_id = nil
  132. end
  133. self.cur_layout = ""
  134. end
  135. function UITabButton:Load_callback()
  136. self.nodes = {
  137. "nomal_text:obj", "choose_text:obj",
  138. }
  139. self:GetChildren(self.nodes)
  140. self.nomal_text_txt = self.nomal_text:GetComponent("Text") or self.nomal_text:GetComponent(typeof(TMPro.TextMeshProUGUI))
  141. self.choose_text_txt = self.choose_text:GetComponent("Text") or self.choose_text:GetComponent(typeof(TMPro.TextMeshProUGUI))
  142. -------------------------
  143. self.btn_img = self.transform:GetComponent("Image")
  144. self.line1_obj = self:GetChild("line1").gameObject
  145. self.line_obj = self:GetChild("line").gameObject
  146. self.line_img = self:GetChild("line"):GetComponent("Image")
  147. self.redPoint_transform = self:GetChild("RedPoint")
  148. self.bg = self:GetChild("bg")
  149. self.bg_img = self:GetChild("bg"):GetComponent("Image")
  150. self.bg_obj = self:GetChild("bg").gameObject
  151. if self.button_style == 1 or self.button_style == 9 or self.button_style == 8 then
  152. self.icon_img = self:GetChild("icon"):GetComponent("Image")
  153. if self.button_style == 1 then
  154. self.icon_clock_obj = self:GetChild("icon_clock").gameObject
  155. end
  156. elseif self.button_style == 6 then--排行榜使用的特殊页签样式
  157. self.rankRewardBox_obj = self:GetChild("rankRewardBox").gameObject
  158. self.rankKfRushFlag_obj = self:GetChild("kf_rush_flag").gameObject
  159. end
  160. if UITabButton.Style[self.button_style] and UITabButton.Style[self.button_style].can_set_red_num then
  161. self.red_num_obj = self:GetChild("RedNumPoint") .gameObject
  162. self.red_num_tmp = self:GetChild("RedNumPoint/red_num"):GetComponent(typeof(TMPro.TextMeshProUGUI))
  163. end
  164. self.transform.anchorMin = Vector2(0.5, 1)
  165. self.transform.anchorMax = Vector2(0.5, 1)
  166. self.transform.pivot = Vector2(0.5, 1)
  167. -- self.transform:SetAsFirstSibling()
  168. self:InitEvent()
  169. if self.need_refreshData then
  170. self:SetData(self.index,self.vo,self.callback,self.all_len, self.extra_arg_table)
  171. if self.show_red_dot then
  172. self:ShowRedPoint(true)
  173. end
  174. if self.show_red_dot_num or self.force_show_redNum_red then
  175. self:ShowRedPointWithNum(self.show_red_dot_num, self.force_show_redNum_red)
  176. end
  177. if self.speciel_img_state then
  178. self:SetSpeacialImg(self.speciel_img_state)
  179. end
  180. end
  181. end
  182. function UITabButton:SetData(index,vo,callback,all_len,extra_arg_table)
  183. self.index = index
  184. self.tab_id = vo.id or index
  185. self.vo = vo
  186. self.callback = callback
  187. self.all_len = all_len
  188. self.extra_arg_table = extra_arg_table
  189. self.name = vo.name and vo.name or vo
  190. -- self.is_selected = -1--为了再次设置数据重置一下
  191. if self.is_loaded then
  192. self.transform.name = self.index
  193. self.parms = UITabButton.Style[self.button_style]
  194. local parms = UITabButton.Style[self.button_style] or {offsetX = 50, offsetY = -140, spacing = 110}
  195. self.index = index
  196. self.nomal_text_txt.text = self.name
  197. self.choose_text_txt.text = self.name
  198. self:SetDunMulImg(vo.mul_state,vo.mul_num)
  199. if vo.tip_state and vo.tip_state > 0 then
  200. if vo.mul_state then
  201. vo.tip_state = 1
  202. end
  203. self:SetSpeacialImg(vo.tip_state)
  204. end
  205. if self.icon_clock_obj then
  206. self.icon_clock_obj:SetActive(vo.tip_bless and true or false)
  207. end
  208. self:SetTextSize(parms.fontSize)
  209. -- self:SetPosition(parms.offsetX, parms.offsetY - (self.index - 1) * parms.spacing)
  210. if self.is_scroll and self.button_style == 4 then
  211. self.transform.anchoredPosition = Vector3(parms.offsetX, parms.offsetY - (self.index - 1) * parms.spacing, 0)
  212. else
  213. self.transform.anchoredPosition = Vector3(parms.offsetX, parms.offsetY - (self.index - 1) * parms.spacing - 10, 0)
  214. end
  215. -- self.transform:SetAsFirstSibling()
  216. self:SetSize(parms.trm_size,parms.size)
  217. self:SetSelect(self.is_selected)
  218. -------------------------
  219. if self.parms.line_size and self.parms.line_offer then
  220. local node1 = self:GetChild("line").transform
  221. SetSizeDelta(node1, self.parms.line_size.x, self.parms.line_size.y)
  222. local change_x,change_y = self.parms.line_offer.x,self.parms.line_offer.y
  223. local x,y = GetAnchoredPosition( node1.transform )
  224. SetAnchoredPosition( node1.transform, x+change_x, y+change_y )
  225. local node2 = self:GetChild("line1").transform
  226. SetSizeDelta(node2, self.parms.line_size.x, self.parms.line_size.y)
  227. local x,y = GetAnchoredPosition( node2.transform )
  228. SetAnchoredPosition( node2.transform, x-change_x, y-change_y )
  229. end
  230. if self.parms.red_dot_pos and not self.redpos_loaded then--设置红点坐标
  231. SetAnchoredPosition( self.redPoint_transform, self.parms.red_dot_pos.x, self.parms.red_dot_pos.y )
  232. self.redpos_loaded = true
  233. end
  234. self.line1_obj:SetActive(self.index == 1 and not self.is_selected and self.button_style ~= 3)
  235. self:AddToStageHandler()
  236. if self.button_style == 6 then--排行榜使用的特殊页签样式
  237. if not RankModel:getInstance().is_cs_rank then
  238. local is_show_rank_target_box = RankModel:getInstance():IsTabRankTargetCfg(self.tab_id)
  239. self.rankRewardBox_obj:SetActive(is_show_rank_target_box)
  240. SetAnchoredPositionX(self.choose_text, 23.5)
  241. SetAnchoredPositionX(self.nomal_text, 23.5)
  242. self.rankKfRushFlag_obj:SetActive(self.tab_id >= 1 and self.tab_id <= 3)
  243. else
  244. self.rankRewardBox_obj:SetActive(false)
  245. SetAnchoredPositionX(self.choose_text, 3)
  246. SetAnchoredPositionX(self.nomal_text, 3)
  247. self.rankKfRushFlag_obj:SetActive(false)
  248. end
  249. else
  250. if self.extra_arg_table and self.extra_arg_table.tab_pos_x then
  251. SetAnchoredPositionX(self.choose_text, self.extra_arg_table.tab_pos_x)
  252. SetAnchoredPositionX(self.nomal_text, self.extra_arg_table.tab_pos_x)
  253. end
  254. end
  255. else
  256. self.need_refreshData = true
  257. end
  258. end
  259. function UITabButton:SetSelect(bool)
  260. self.is_selected = bool
  261. if self.is_loaded then
  262. if bool then
  263. lua_resM:setImageSprite(self,self.bg_img,"uiComponent_asset",self.parms.selsouce,true)
  264. if (self.button_style == 1 or self.button_style == 9 or self.button_style == 8) and self.vo.abName and self.vo.light_res then
  265. lua_resM:setImageSprite(self, self.icon_img, self.vo.abName, self.vo.light_res,true)
  266. end
  267. self.nomal_text_obj:SetActive(false)
  268. self.choose_text_obj:SetActive(true)
  269. else
  270. lua_resM:setImageSprite(self,self.bg_img,"uiComponent_asset",self.parms.norsouce,false)
  271. if (self.button_style == 1 or self.button_style == 9 or self.button_style == 8) and self.vo.abName and self.vo.dark_res then
  272. lua_resM:setImageSprite(self, self.icon_img, self.vo.abName, self.vo.dark_res,true)
  273. end
  274. self.nomal_text_obj:SetActive(true)
  275. self.choose_text_obj:SetActive(false)
  276. end
  277. self.line1_obj:SetActive(self.index == 1 and not self.is_selected and self.button_style ~= 3)
  278. self.line_obj:SetActive(not self.is_selected)
  279. else
  280. self.need_refreshData = true
  281. end
  282. end
  283. --[[
  284. 574E5DFF
  285. ]]
  286. function UITabButton:InitEvent()
  287. local function onTabBtnHandler(target)
  288. if self.callback ~= nil then
  289. self:ClickCall()
  290. end
  291. end
  292. AddClickEvent(self.bg_obj,onTabBtnHandler,LuaSoundManager.SOUND_UI.SWITCH, false)
  293. if self.button_style == 6 then
  294. local on_click = function ( click_obj )
  295. if self.rankRewardBox_obj == click_obj then
  296. RankModel:Fire(RankModel.OPEN_RANK_TARGET_VIEW, self.tab_id)
  297. end
  298. end
  299. AddClickEvent(self.rankRewardBox_obj, on_click, nil, false)
  300. end
  301. end
  302. function UITabButton:ShowRedPoint(bool)
  303. bool = bool == nil and false or bool
  304. self.show_red_dot = bool
  305. if self.is_loaded then
  306. self.redPoint_transform.gameObject:SetActive(bool)
  307. end
  308. end
  309. function UITabButton:ShowRedPointWithNum(num, force_show)
  310. self.show_red_dot_num = num or 0
  311. self.force_show_redNum_red = force_show and true or false
  312. if self.is_loaded then
  313. if not IsNull(self.red_num_obj) then
  314. self.red_num_obj:SetActive(self.show_red_dot_num > 0 or force_show)
  315. self.red_num_tmp.text = self.show_red_dot_num > 0 and self.show_red_dot_num or (force_show and "!" or 0)
  316. end
  317. end
  318. end
  319. function UITabButton:SetTextSize(font_size)
  320. if self.is_loaded then
  321. self.nomal_text_txt.fontSize = font_size
  322. self.choose_text_txt.fontSize = font_size
  323. end
  324. end
  325. function UITabButton:SetSize(trm_size,size)
  326. self.transform.sizeDelta = trm_size or Vector2(150, 84)
  327. self.bg.sizeDelta = size or Vector2(142, 90)
  328. end
  329. function UITabButton:DoBatch(batch_parent)
  330. self.batch_parent = batch_parent
  331. if not self.batch_parent then
  332. return
  333. end
  334. if self.is_loaded then
  335. self.redPoint_transform:SetParent(self.batch_parent)
  336. self.nomal_text:SetParent(self.batch_parent)
  337. self.choose_text:SetParent(self.batch_parent)
  338. end
  339. end
  340. function UITabButton:SetVisible(flag)
  341. BaseItem.SetVisible(self, flag)
  342. if self.nomal_text and self.nomal_text_obj.activeSelf ~= flag then
  343. self.nomal_text_obj:SetActive(flag)
  344. self.choose_text_obj:SetActive(flag)
  345. end
  346. if self.redPoint_transform and self.redPoint_transform.gameObject.activeSelf ~= (self.show_red_dot and flag) then
  347. self.redPoint_transform.gameObject:SetActive(self.show_red_dot and flag)
  348. end
  349. end
  350. function UITabButton:ClickCall( )
  351. self.callback(self.tab_id)
  352. --结束引导
  353. if self.cur_layout == "BossView" then
  354. local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.FORBIDDEN_TYPE,2)
  355. if helpVo and self.index==4 then
  356. GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo)
  357. end
  358. end
  359. end
  360. function UITabButton:AddToStageHandler()
  361. if self.gameObject == nil then return end
  362. local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.FORBIDDEN_TYPE,2)
  363. if helpVo then
  364. local help_type = helpVo.help_type
  365. local step = helpVo.step
  366. if self.cur_layout == "BossView" then
  367. if help_type == HelpType.FORBIDDEN_TYPE then
  368. if step == 2 and self.index==4 then
  369. local button = self.gameObject
  370. if button then
  371. local function call_back()
  372. self:ClickCall()
  373. end
  374. GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW,button.transform,self.transform,call_back,helpVo)
  375. end
  376. end
  377. end
  378. end
  379. end
  380. end
  381. --设置副本多倍标签
  382. function UITabButton:SetDunMulImg( bool,mul_num )
  383. if self.button_style == 3 and self.is_loaded then
  384. if not self.mulText_tmp then
  385. self.mulText_tmp = self:GetChild("mulImg/mulText"):GetComponent(typeof(TMPro.TextMeshProUGUI))
  386. end
  387. if not self.mulImg_obj then
  388. self.mulImg_obj = self:GetChild("mulImg").gameObject
  389. end
  390. if not mul_num and bool then
  391. self.mulText_tmp.text = "奖励翻倍"
  392. else
  393. self.mulText_tmp.text = string.format("奖励X%s",mul_num)
  394. end
  395. self.mulImg_obj:SetActive(bool)
  396. end
  397. end
  398. --设置特殊角标
  399. function UITabButton:SetSpeacialImg( state )
  400. self.speciel_img_state = state
  401. if not self.is_loaded then
  402. return
  403. end
  404. if not self.specielImg_img then
  405. self.specielImg = self:GetChild("specielImg")
  406. if self.specielImg then
  407. self.specielImg_img = self:GetChild("specielImg"):GetComponent("Image")
  408. end
  409. end
  410. -- if self.specielImg then
  411. -- self.specielImg:SetActive(bool)
  412. -- end
  413. if self.specielImg_img and state then
  414. local ab_name = "common_asset"
  415. local res_name
  416. if state and state == 1 then --双倍
  417. res_name = "ui_tab_tip1"
  418. if self.button_style == 3 then
  419. SetAnchoredPosition(self.specielImg.transform, -53, 25)
  420. SetSizeDelta(self.specielImg.transform, 47.1, 27.5)
  421. elseif self.button_style == 5 then
  422. SetAnchoredPosition(self.specielImg.transform, -40, 26)
  423. SetSizeDelta(self.specielImg.transform, 46, 25)
  424. else
  425. SetAnchoredPosition(self.specielImg.transform, -42, 31)
  426. SetSizeDelta(self.specielImg.transform, 46, 25)
  427. end
  428. elseif state and state == 2 then --新品
  429. res_name = "com_news_tips_1"
  430. if self.button_style == 3 then
  431. SetAnchoredPosition(self.specielImg.transform, -53, 25)
  432. SetSizeDelta(self.specielImg.transform, 47.1, 27.5)
  433. end
  434. elseif state and state == 3 then --升品石
  435. res_name = "com_news_tips_2"
  436. if self.button_style == 5 then
  437. SetAnchoredPosition(self.specielImg.transform, -24, 24)
  438. SetSizeDelta(self.specielImg.transform, 71, 23)
  439. end
  440. elseif state and state == 4 then --珍宝UP
  441. res_name = "com_news_tips_3"
  442. if self.button_style == 5 then
  443. SetAnchoredPosition(self.specielImg.transform, -24, 24)
  444. SetSizeDelta(self.specielImg.transform, 71, 23)
  445. end
  446. end
  447. if res_name then
  448. lua_resM:setImageSprite(self,self.specielImg_img,ab_name,res_name, false)
  449. end
  450. end
  451. end