UITabButton = UITabButton or BaseClass(BaseItem) local UITabButton = UITabButton UITabButton.Style = { [1] = { --带图标的 offsetX = 4, offsetY = 14, spacing = 70.6, size = Vector2(131, 85), norsouce = "com_empty", selsouce = "ui_tab_13", fontSize = 20, win_name = UIType.UITabButton, }, [2] = { --不带图标的 offsetX = 0, offsetY = 0, spacing = 72, size = Vector2(115, 72), trm_size = Vector2(115, 72),--节点大小 norsouce = "com_empty", selsouce = "ui_tab_12", fontSize = 20, win_name = UIType.UITabButton4, red_dot_pos = Vector2(40, 15),--红点坐标,有就修改没有就默认 }, [3] = { --不带图标的并且四个字居中的 offsetX = 0, offsetY = 0, spacing = 71, size = Vector2(155, 65),--Bg大小 trm_size = Vector2(150, 71),--节点大小 norsouce = "com_empty", selsouce = "ui_tab_1", fontSize = 20, win_name = UIType.UITabButton2, red_dot_pos = Vector2(63, 23.5),--红点坐标,有就修改没有就默认 }, [4] = { --SizeSamllSP窗口的特殊button样式(只是位置偏移不同,并没有什么特殊) offsetX = 0, offsetY = 0, spacing = 83, size = Vector2(120, 90),--Bg大小 trm_size = Vector2(120, 90),--节点大小 norsouce = "com_empty", selsouce = "ui_tab_1", fontSize = 20, win_name = UIType.UITabButton4, red_dot_pos = Vector2(49, 32),--红点坐标,有就修改没有就默认 }, [5] = { --真全屏的不带图标的并且四个字居中的 offsetX = 1.5, offsetY = 8.5, spacing = 71, size = Vector2(131, 85),--Bg大小 trm_size = Vector2(135, 71),--节点大小 norsouce = "com_empty", selsouce = "ui_tab_13", fontSize = 20, win_name = UIType.UITabButton5, can_set_red_num = true, --该布局有red_num节点 }, --全屏窗口排行榜的特殊页签样式 [6] = { --带图标的 offsetX = 4, offsetY = 14, spacing = 70.6, size = Vector2(131, 85), norsouce = "com_empty", selsouce = "ui_tab_13", fontSize = 20, win_name = UIType.UITabButton6, }, --伪全屏窗口排行榜的特殊页签样式 [8] = { --不带图标的并且四个字居中的 offsetX = 0, offsetY = 0, spacing = 74, size = Vector2(168, 67),--Bg大小 trm_size = Vector2(166, 65),--节点大小 norsouce = "com_empty", selsouce = "ui_tab_8", fontSize = 18, win_name = UIType.UITabButton8, red_dot_pos = Vector2(73, 26),--红点坐标,有就修改没有就默认 }, [9] = { --特殊用,带图标的,如珍宝 offsetX = -19, offsetY = 35-17, spacing = 71, size = Vector2(176, 84),--Bg大小 norsouce = "com_empty", selsouce = "ui_tab_15", fontSize = 20, win_name = UIType.UITabButton9, }, } function UITabButton:__init(parent_wnd,prefab_asset,layer_name,view_style,special_style,is_scroll) self.button_style = view_style == UITabWindow.SizeLarge and 1 or 2 self.is_scroll = is_scroll -- (parent_wnd,prefab_asset,layer_name, show_bg, left_alignment) if special_style and UITabButton.Style[special_style] then --特殊选项 self.button_style = special_style elseif view_style == UITabWindow.SizeSmallHall then self.button_style = 3 elseif view_style == UITabWindow.SizeSmallSP then self.button_style = 4 end self.base_file = "uiComponent" self.layout_file = UITabButton.Style[self.button_style] and UITabButton.Style[self.button_style].win_name or UIType.UITabButton self.index = 0 self.cur_choose_index = 1 self.name = "" self.extra_arg_table = false self:Load() self.cur_layout = lua_viewM.cur_layout or "" --公共组件,要判断是否对应界面 self.is_selected = false self.redpos_loaded = false -- 红点位置是否已经加载过了 end function UITabButton:__delete() if self.guide_trigger_id then GlobalEventSystem:UnBind(self.guide_trigger_id) self.guide_trigger_id = nil end self.cur_layout = "" end function UITabButton:Load_callback() self.nodes = { "nomal_text:obj", "choose_text:obj", } self:GetChildren(self.nodes) self.nomal_text_txt = self.nomal_text:GetComponent("Text") or self.nomal_text:GetComponent(typeof(TMPro.TextMeshProUGUI)) self.choose_text_txt = self.choose_text:GetComponent("Text") or self.choose_text:GetComponent(typeof(TMPro.TextMeshProUGUI)) ------------------------- self.btn_img = self.transform:GetComponent("Image") self.line1_obj = self:GetChild("line1").gameObject self.line_obj = self:GetChild("line").gameObject self.line_img = self:GetChild("line"):GetComponent("Image") self.redPoint_transform = self:GetChild("RedPoint") self.bg = self:GetChild("bg") self.bg_img = self:GetChild("bg"):GetComponent("Image") self.bg_obj = self:GetChild("bg").gameObject if self.button_style == 1 or self.button_style == 9 or self.button_style == 8 then self.icon_img = self:GetChild("icon"):GetComponent("Image") if self.button_style == 1 then self.icon_clock_obj = self:GetChild("icon_clock").gameObject end elseif self.button_style == 6 then--排行榜使用的特殊页签样式 self.rankRewardBox_obj = self:GetChild("rankRewardBox").gameObject self.rankKfRushFlag_obj = self:GetChild("kf_rush_flag").gameObject end if UITabButton.Style[self.button_style] and UITabButton.Style[self.button_style].can_set_red_num then self.red_num_obj = self:GetChild("RedNumPoint") .gameObject self.red_num_tmp = self:GetChild("RedNumPoint/red_num"):GetComponent(typeof(TMPro.TextMeshProUGUI)) end self.transform.anchorMin = Vector2(0.5, 1) self.transform.anchorMax = Vector2(0.5, 1) self.transform.pivot = Vector2(0.5, 1) -- self.transform:SetAsFirstSibling() self:InitEvent() if self.need_refreshData then self:SetData(self.index,self.vo,self.callback,self.all_len, self.extra_arg_table) if self.show_red_dot then self:ShowRedPoint(true) end if self.show_red_dot_num or self.force_show_redNum_red then self:ShowRedPointWithNum(self.show_red_dot_num, self.force_show_redNum_red) end if self.speciel_img_state then self:SetSpeacialImg(self.speciel_img_state) end end end function UITabButton:SetData(index,vo,callback,all_len,extra_arg_table) self.index = index self.tab_id = vo.id or index self.vo = vo self.callback = callback self.all_len = all_len self.extra_arg_table = extra_arg_table self.name = vo.name and vo.name or vo -- self.is_selected = -1--为了再次设置数据重置一下 if self.is_loaded then self.transform.name = self.index self.parms = UITabButton.Style[self.button_style] local parms = UITabButton.Style[self.button_style] or {offsetX = 50, offsetY = -140, spacing = 110} self.index = index self.nomal_text_txt.text = self.name self.choose_text_txt.text = self.name self:SetDunMulImg(vo.mul_state,vo.mul_num) if vo.tip_state and vo.tip_state > 0 then if vo.mul_state then vo.tip_state = 1 end self:SetSpeacialImg(vo.tip_state) end if self.icon_clock_obj then self.icon_clock_obj:SetActive(vo.tip_bless and true or false) end self:SetTextSize(parms.fontSize) -- self:SetPosition(parms.offsetX, parms.offsetY - (self.index - 1) * parms.spacing) if self.is_scroll and self.button_style == 4 then self.transform.anchoredPosition = Vector3(parms.offsetX, parms.offsetY - (self.index - 1) * parms.spacing, 0) else self.transform.anchoredPosition = Vector3(parms.offsetX, parms.offsetY - (self.index - 1) * parms.spacing - 10, 0) end -- self.transform:SetAsFirstSibling() self:SetSize(parms.trm_size,parms.size) self:SetSelect(self.is_selected) ------------------------- if self.parms.line_size and self.parms.line_offer then local node1 = self:GetChild("line").transform SetSizeDelta(node1, self.parms.line_size.x, self.parms.line_size.y) local change_x,change_y = self.parms.line_offer.x,self.parms.line_offer.y local x,y = GetAnchoredPosition( node1.transform ) SetAnchoredPosition( node1.transform, x+change_x, y+change_y ) local node2 = self:GetChild("line1").transform SetSizeDelta(node2, self.parms.line_size.x, self.parms.line_size.y) local x,y = GetAnchoredPosition( node2.transform ) SetAnchoredPosition( node2.transform, x-change_x, y-change_y ) end if self.parms.red_dot_pos and not self.redpos_loaded then--设置红点坐标 SetAnchoredPosition( self.redPoint_transform, self.parms.red_dot_pos.x, self.parms.red_dot_pos.y ) self.redpos_loaded = true end self.line1_obj:SetActive(self.index == 1 and not self.is_selected and self.button_style ~= 3) self:AddToStageHandler() if self.button_style == 6 then--排行榜使用的特殊页签样式 if not RankModel:getInstance().is_cs_rank then local is_show_rank_target_box = RankModel:getInstance():IsTabRankTargetCfg(self.tab_id) self.rankRewardBox_obj:SetActive(is_show_rank_target_box) SetAnchoredPositionX(self.choose_text, 23.5) SetAnchoredPositionX(self.nomal_text, 23.5) self.rankKfRushFlag_obj:SetActive(self.tab_id >= 1 and self.tab_id <= 3) else self.rankRewardBox_obj:SetActive(false) SetAnchoredPositionX(self.choose_text, 3) SetAnchoredPositionX(self.nomal_text, 3) self.rankKfRushFlag_obj:SetActive(false) end else if self.extra_arg_table and self.extra_arg_table.tab_pos_x then SetAnchoredPositionX(self.choose_text, self.extra_arg_table.tab_pos_x) SetAnchoredPositionX(self.nomal_text, self.extra_arg_table.tab_pos_x) end end else self.need_refreshData = true end end function UITabButton:SetSelect(bool) self.is_selected = bool if self.is_loaded then if bool then lua_resM:setImageSprite(self,self.bg_img,"uiComponent_asset",self.parms.selsouce,true) 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 lua_resM:setImageSprite(self, self.icon_img, self.vo.abName, self.vo.light_res,true) end self.nomal_text_obj:SetActive(false) self.choose_text_obj:SetActive(true) else lua_resM:setImageSprite(self,self.bg_img,"uiComponent_asset",self.parms.norsouce,false) 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 lua_resM:setImageSprite(self, self.icon_img, self.vo.abName, self.vo.dark_res,true) end self.nomal_text_obj:SetActive(true) self.choose_text_obj:SetActive(false) end self.line1_obj:SetActive(self.index == 1 and not self.is_selected and self.button_style ~= 3) self.line_obj:SetActive(not self.is_selected) else self.need_refreshData = true end end --[[ 574E5DFF ]] function UITabButton:InitEvent() local function onTabBtnHandler(target) if self.callback ~= nil then self:ClickCall() end end AddClickEvent(self.bg_obj,onTabBtnHandler,LuaSoundManager.SOUND_UI.SWITCH, false) if self.button_style == 6 then local on_click = function ( click_obj ) if self.rankRewardBox_obj == click_obj then RankModel:Fire(RankModel.OPEN_RANK_TARGET_VIEW, self.tab_id) end end AddClickEvent(self.rankRewardBox_obj, on_click, nil, false) end end function UITabButton:ShowRedPoint(bool) bool = bool == nil and false or bool self.show_red_dot = bool if self.is_loaded then self.redPoint_transform.gameObject:SetActive(bool) end end function UITabButton:ShowRedPointWithNum(num, force_show) self.show_red_dot_num = num or 0 self.force_show_redNum_red = force_show and true or false if self.is_loaded then if not IsNull(self.red_num_obj) then self.red_num_obj:SetActive(self.show_red_dot_num > 0 or force_show) self.red_num_tmp.text = self.show_red_dot_num > 0 and self.show_red_dot_num or (force_show and "!" or 0) end end end function UITabButton:SetTextSize(font_size) if self.is_loaded then self.nomal_text_txt.fontSize = font_size self.choose_text_txt.fontSize = font_size end end function UITabButton:SetSize(trm_size,size) self.transform.sizeDelta = trm_size or Vector2(150, 84) self.bg.sizeDelta = size or Vector2(142, 90) end function UITabButton:DoBatch(batch_parent) self.batch_parent = batch_parent if not self.batch_parent then return end if self.is_loaded then self.redPoint_transform:SetParent(self.batch_parent) self.nomal_text:SetParent(self.batch_parent) self.choose_text:SetParent(self.batch_parent) end end function UITabButton:SetVisible(flag) BaseItem.SetVisible(self, flag) if self.nomal_text and self.nomal_text_obj.activeSelf ~= flag then self.nomal_text_obj:SetActive(flag) self.choose_text_obj:SetActive(flag) end if self.redPoint_transform and self.redPoint_transform.gameObject.activeSelf ~= (self.show_red_dot and flag) then self.redPoint_transform.gameObject:SetActive(self.show_red_dot and flag) end end function UITabButton:ClickCall( ) self.callback(self.tab_id) --结束引导 if self.cur_layout == "BossView" then local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.FORBIDDEN_TYPE,2) if helpVo and self.index==4 then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo) end end end function UITabButton:AddToStageHandler() if self.gameObject == nil then return end local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.FORBIDDEN_TYPE,2) if helpVo then local help_type = helpVo.help_type local step = helpVo.step if self.cur_layout == "BossView" then if help_type == HelpType.FORBIDDEN_TYPE then if step == 2 and self.index==4 then local button = self.gameObject if button then local function call_back() self:ClickCall() end GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW,button.transform,self.transform,call_back,helpVo) end end end end end end --设置副本多倍标签 function UITabButton:SetDunMulImg( bool,mul_num ) if self.button_style == 3 and self.is_loaded then if not self.mulText_tmp then self.mulText_tmp = self:GetChild("mulImg/mulText"):GetComponent(typeof(TMPro.TextMeshProUGUI)) end if not self.mulImg_obj then self.mulImg_obj = self:GetChild("mulImg").gameObject end if not mul_num and bool then self.mulText_tmp.text = "奖励翻倍" else self.mulText_tmp.text = string.format("奖励X%s",mul_num) end self.mulImg_obj:SetActive(bool) end end --设置特殊角标 function UITabButton:SetSpeacialImg( state ) self.speciel_img_state = state if not self.is_loaded then return end if not self.specielImg_img then self.specielImg = self:GetChild("specielImg") if self.specielImg then self.specielImg_img = self:GetChild("specielImg"):GetComponent("Image") end end -- if self.specielImg then -- self.specielImg:SetActive(bool) -- end if self.specielImg_img and state then local ab_name = "common_asset" local res_name if state and state == 1 then --双倍 res_name = "ui_tab_tip1" if self.button_style == 3 then SetAnchoredPosition(self.specielImg.transform, -53, 25) SetSizeDelta(self.specielImg.transform, 47.1, 27.5) elseif self.button_style == 5 then SetAnchoredPosition(self.specielImg.transform, -40, 26) SetSizeDelta(self.specielImg.transform, 46, 25) else SetAnchoredPosition(self.specielImg.transform, -42, 31) SetSizeDelta(self.specielImg.transform, 46, 25) end elseif state and state == 2 then --新品 res_name = "com_news_tips_1" if self.button_style == 3 then SetAnchoredPosition(self.specielImg.transform, -53, 25) SetSizeDelta(self.specielImg.transform, 47.1, 27.5) end elseif state and state == 3 then --升品石 res_name = "com_news_tips_2" if self.button_style == 5 then SetAnchoredPosition(self.specielImg.transform, -24, 24) SetSizeDelta(self.specielImg.transform, 71, 23) end elseif state and state == 4 then --珍宝UP res_name = "com_news_tips_3" if self.button_style == 5 then SetAnchoredPosition(self.specielImg.transform, -24, 24) SetSizeDelta(self.specielImg.transform, 71, 23) end end if res_name then lua_resM:setImageSprite(self,self.specielImg_img,ab_name,res_name, false) end end end