源战役客户端
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 

353 linhas
9.2 KiB

--[[
@description: 一级主选项卡模板
--]]
CusVerMainTabsTemplate = CusVerMainTabsTemplate or BaseClass(BaseItem)
local CusVerMainTabsTemplate = CusVerMainTabsTemplate
local SetSizeDelta = SetSizeDelta
local SetAnchoredPosition = SetAnchoredPosition
function CusVerMainTabsTemplate:__init(parent_transform, main_tabs_sizebtn, subCon_offset, sub_tabs_class, sub_tabs_spacing, arrow_pos)
self.btn_width = main_tabs_sizebtn.x --tab按钮的宽度
self.btn_height = main_tabs_sizebtn.y --tab按钮的高度
self.sub_tabs_width = main_tabs_sizebtn.x - 8 --下一级tab按钮的宽度
self.subCon_offset = subCon_offset
self.sub_tabs_class = sub_tabs_class
self.sub_tabs_spacing = sub_tabs_spacing
self.arrow_pos = arrow_pos or -30
self.have_sub_tabs = sub_tabs_class and true or false
self.index = nil
self.show = false -- 是否展开
self.select_anything = false -- 是否可以在有子类的时候选中大类
self.force_size = false -- 是否强制设置子选项卡大小
self.sub_tabs_data = nil
self.sub_tabs_count = 0
self.sub_btn_list = {}
self.select_sub_index = nil
self.sub_tabs_load_complete = false
self.sub_red_list = nil
self:Initialization()
end
function CusVerMainTabsTemplate:__delete()
for i,v in ipairs(self.sub_btn_list) do
v:DeleteMe()
v = nil
end
self.sub_btn_list = {}
end
-- 子类中重写,自定义预设
function CusVerMainTabsTemplate:Initialization()
self.layout_file = "UIVerTabBtn"
--self.base_file = ""
self.prefab_asset = UiFactory.getPrefab(UIType.UIVerTabBtn)
self:Load()
end
function CusVerMainTabsTemplate:Load_callback()
self.button,
self.iconObj,
self.red_dot
= GetChildGameObjects(self.transform,
{
"tab",
"tab/icon",
"tab/dot"
})
self.btnText = GetChildTexts(self.transform,
{
"tab/Text",
})
self.icon_tran,
self.subCon,
self.tab_btn_tra
= GetChildTransforms(self.transform,
{
"tab/icon",
"subCon",
"tab"
})
self.imgSelect,
self.tab_btn_img,
self.arrow_img
= GetChildImages(self.transform,
{
"tab/selectBg",
"tab",
"tab/icon",
})
self.select_go = self.imgSelect.gameObject
SetAnchoredPosition(self.icon_tran, self.arrow_pos, 0)
self:LoadCallbackAfter()
end
function CusVerMainTabsTemplate:LoadCallbackAfter()
lua_resM:setImageSprite(self, self.tab_btn_img,"common_asset","tyui_btn2_2")
lua_resM:setImageSprite(self, self.imgSelect,"common_asset","tyui_btn2_1")
lua_resM:setImageSprite(self, self.arrow_img, "common_asset", "tyui_btn3_4", true)
self.btnText.fontSize = 26
SetSizeDelta(self.select_go.transform, self.btn_width, self.btn_height)
SetSizeDelta(self.tab_btn_tra, self.btn_width, self.btn_height)
if self.subCon_offset then
SetAnchoredPosition(self.subCon, self.subCon_offset.x, - self.btn_height- self.subCon_offset.y)
else
SetAnchoredPosition(self.subCon, 0, -self.btn_height)
end
self.btnText.color = Color(167/255, 119/255, 85/255, 1)
end
function CusVerMainTabsTemplate:SetTabsDetail(tab_data, index, call_back, select_anything, force_size)
self.sub_tabs_data = {}
self.index = index
self.call_back = call_back
self.select_anything = select_anything
self.force_size = force_size
self.select_sub_index = 0
if tab_data == nil then return end
local tab_index = "_"..self.index
if type(tab_data[tab_index]) == "table" then --主菜单名称
self.btnText.text = tab_data[tab_index].name
elseif type(tab_data[tab_index]) == "string" then
self.btnText.text = tab_data[tab_index]
end
for i = 1, TableSize(tab_data) do
tab_index = "_"..self.index.."_"..i
if not tab_data[tab_index] then break end
table.insert(self.sub_tabs_data, tab_data[tab_index])
end
self.sub_tabs_count = #self.sub_tabs_data
--是否显示展开标志
if self.sub_tabs_count == 0 then
self.iconObj:SetActive(false)
else
self.iconObj:SetActive(true)
end
self.need_refresh_tabs = true
self.sub_tabs_load_complete = false
--self:SetSubTabs(self.sub_tabs_data, self.index, call_back)
end
function CusVerMainTabsTemplate:SetSubTabs(sub_tab_list, parent_index, call_back)
if self.force_size then
self.sub_tabs_class.real_height = self.btn_height
else
self.sub_tabs_class.real_height = self.sub_tabs_class.Height or 76
end
local sub_tab = nil
for i,v in ipairs(sub_tab_list) do
sub_tab = self.sub_btn_list[i]
if sub_tab == nil then
sub_tab = self.sub_tabs_class.New(self.subCon)
self.sub_btn_list[i] = sub_tab
if self.force_size then
sub_tab:SetTabSubBtnSize(self.sub_tabs_width, self.btn_height)
end
end
sub_tab:SetSubDeail(v, parent_index, i, call_back)
sub_tab:SetVisible(true)
local x = 0
local y = -(i - 1) * self.sub_tabs_class.real_height
x = self.sub_tabs_spacing and self.sub_tabs_spacing.x + x or x
y = self.sub_tabs_spacing and -(i - 1) * self.sub_tabs_spacing.y + y or y
sub_tab:SetPosition(x, y)
local function onBtnClickHandler(target)
self:SetSelectSubIndex(parent_index, i)
end
if sub_tab.Button then
AddClickEvent(sub_tab.Button, onBtnClickHandler, 2)
end
end
for i = #sub_tab_list + 1, #self.sub_btn_list do
self.sub_btn_list[i]:SetVisible(false)
end
self.subCon.gameObject:SetActive(false)
end
-- 处理选中tabs
function CusVerMainTabsTemplate:SetSelectMode(index, sub_index, force_show, quick_select)
--print("CusVerMainTabsTemplate:SetSelectMode() main = "..tostring(index)..", sub = "..tostring(sub_index))
if self.need_refresh_tabs then
self:SetSubTabs(self.sub_tabs_data, self.index, self.call_back)
self.need_refresh_tabs = false
self.sub_tabs_load_complete = true
if self.cache_redDot_list then
self:ShowRedDot(self.cache_redDot_list)
self.cache_redDot_list = nil
end
end
if self.index == index then
self.show = not self.show
else
self.show = false
end
if self.sub_tabs_count == 0 then
self.show = true
end
if force_show and self.index == index then
self.show = true
end
if self.show and index and self.select_sub_index == 0 then
sub_index = sub_index or self:HandleDefaultSelectSubIndex(quick_select)
if sub_index > 0 then
self:SetSelectSubIndex(index, sub_index)
else
self:HandleCallback()
end
elseif not self.show and index and self.select_anything then
self:HandleCallback()
if self.select_sub_index ~= 0 then
self:SetSelectSubIndex(0, 0)
end
end
self:RefreshTabsSelectState(self.show, self.index == index)
end
function CusVerMainTabsTemplate:HandleDefaultSelectSubIndex(quick_select)
local default_index = 0
if quick_select and self.sub_red_list and #self.sub_red_list > 0 then
default_index = self.sub_red_list[1]
elseif quick_select and self.sub_tabs_count > 0 and not self.select_anything then
default_index = 1
end
return default_index
end
function CusVerMainTabsTemplate:HandleCallback()
if self.sub_tabs_count > 0 then
if self.select_anything then
if self.call_back then self.call_back(self.index,0) end
end
else
if self.call_back then self.call_back(self.index,0) end
end
end
-- 处理多级菜单开关,子选项卡显示
function CusVerMainTabsTemplate:RefreshTabsSelectState(show, is_select)
if not self.have_sub_tabs then
return
end
self.show = show
if self.select_anything and is_select then
self:SetSelectState(true)
else
self:SetSelectState(self.show)
end
if self.show then
lua_resM:setImageSprite(self, self.arrow_img, "common_asset", "tyui_btn3_4a", true)
--SetRotate(self.icon_tran, 0, 0, -90)
else
lua_resM:setImageSprite(self, self.arrow_img, "common_asset", "tyui_btn3_4", true)
--SetLocalRotation(self.icon_tran, 0, 0, 0)
end
if self.subCon and self.sub_btn_list and #self.sub_btn_list ~= 0 then
self.subCon.gameObject:SetActive(show)
end
end
-- 设置选中的子一级选项卡
function CusVerMainTabsTemplate:SetSelectSubIndex(main_index, sub_index)
if not self.have_sub_tabs then
return
end
--print("CusVerMainTabsTemplate:SetSelectSubIndex() main = "..main_index..", sub = "..sub_index)
for i,v in ipairs(self.sub_btn_list) do
if v.parent_index == main_index and v.sub_index == sub_index then
v:SetSelected(true)
else
v:SetSelected(false)
end
end
self.select_sub_index = sub_index
end
-- 子选项卡个数(加载完但不显示的不需计算高度)
function CusVerMainTabsTemplate:GetVisibleCount(visible)
local count = 0
if self.have_sub_tabs then
for _,v in ipairs(self.sub_btn_list) do
if v:GetVisible() == visible or not v.is_loaded then
count = count + 1
end
end
end
return count
end
function CusVerMainTabsTemplate:SetSelectState(bool)
self.select_go:SetActive(bool)
if self.btnText then
self.btnText.color = bool and Color(131/255, 87/255, 65/255, 1) or Color(167/255, 119/255, 85/255, 1)
end
end
function CusVerMainTabsTemplate:ShowRedDot(list)
if not self.sub_tabs_load_complete then
self.cache_redDot_list = list
end
if list and #list > 0 then
table.sort(list)
end
self.sub_red_list = list
for i, v in ipairs(self.sub_btn_list) do
v:ShowRedDot(false)
end
if not list or #list == 0 then
self.red_dot:SetActive(false)
else
self.red_dot:SetActive(true)
for i, v in ipairs(list) do
if self.sub_btn_list[v] then
self.sub_btn_list[v]:ShowRedDot(true)
end
end
end
-- 兼容只有主选项卡,没有子选项卡的情况。
if list and list[0] then
self.red_dot:SetActive(true)
end
end
function CusVerMainTabsTemplate:SetPosition(x, y)
BaseItem.SetAnchoredPosition(self, x, y)
end