源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

270 lines
7.3 KiB

--tabbar按钮(单个按钮)
UICusVerTabBtn = UICusVerTabBtn or BaseClass(BaseComponent)
-- UICusVerTabBtn.BTN_HEIGHT = 66 --tab按钮的高度,不包括下一级tab按钮的容器高度
-- UICusVerTabBtn.SUB_CON_WIDTH = 178 --下一级tab按钮的容器宽度
function UICusVerTabBtn:__init(parent, sub_item, size, sub_offset)
self.sub_btn_list = {}
self.index = 1
self.call_back = nil
self.show = false --是否展开
self.select_anything = false --是否可以在有子类的时候选中大类
self.btn_width = size and size.x or 189 --tab按钮的宽度,不包括下一级tab按钮的容器宽度
self.btn_height = size and size.y or 66 --tab按钮的高度,不包括下一级tab按钮的容器高度
self.sub_con_width = size and size.x - 16 or 178 --下一级tab按钮的容器宽度
self.sub_item = sub_item
self.sub_offset = sub_offset
self:CreateGameObject(UIType.UIVerTabBtn)
end
function UICusVerTabBtn:__delete()
for i,v in ipairs(self.sub_btn_list) do
v:DeleteMe()
v = nil
end
self.sub_btn_list = {}
if self.event_id then
GlobalEventSystem:UnBind(self.event_id)
self.event_id = nil
end
end
function UICusVerTabBtn:LoadSuccess()
self.btnText = self:GetChild("tab/Text"):GetComponent("Text")
self.btn_tran = self:GetChild("tab/Text")
self.icon = self:GetChild("tab/icon"):GetComponent("Image")
self.icon_tran = self:GetChild("tab/icon")
self.imgSelect = self:GetChild("tab/selectBg").gameObject
self.iconObj = self:GetChild("tab/icon").gameObject
self.addBtn = self:GetChild("subCon").gameObject
self.tab = self:GetChild("tab").gameObject
self.tab_img = self:GetChild("tab")
self.subCon = self:GetChild("subCon")
self.img = self:GetChild("tab/img").gameObject
self.red_dot = self:GetChild("tab/dot").gameObject
self:ResetSize()
self:InitEvent()
end
function UICusVerTabBtn:InitEvent()
end
--设置tab数据
function UICusVerTabBtn:SetTabDetail(tab_data, index, call_back, select_anything, force_size)
self.sub_tab_data = {}
self.index = index
self.call_back = call_back
self.select_anything = select_anything
self.force_size = force_size
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_tab_data, tab_data[tab_index])
end
--是否显示展开标志
if #self.sub_tab_data == 0 then
self.iconObj:SetActive(false)
else
self.iconObj:SetActive(true)
end
self:SetSubBtns(self.sub_tab_data, self.index, call_back)
end
--设置下一级的按钮
function UICusVerTabBtn:SetSubBtns(sub_tab_list, parent_index, call_back)
for i,v in ipairs(self.sub_btn_list) do
v:SetVisible(false)
end
for i,v in ipairs(sub_tab_list) do
local sub_tab = self.sub_btn_list[i]
if sub_tab == nil then
sub_tab = self.sub_item.New(self.subCon)
self.sub_btn_list[i] = sub_tab
if self.force_size then
sub_tab:SetTabSubBtnSize(self.sub_con_width)
end
end
sub_tab:SetSubDeail(v, parent_index, i, call_back)
sub_tab:SetVisible(true)
local x = 0
local y = -(i - 1) * self.sub_item.Height
x = self.offset and self.offset.x + x or x
y = self.offset and -(i - 1) * self.offset.y + y or y
sub_tab:SetPosition(x, y)
local function onBtnClickHandler(target)
self:SetSelectSubIndex(0, 0)
self:SetSelectSubIndex(sub_tab.parent_index, sub_tab.sub_index)
end
if sub_tab.Button then
AddClickEvent(sub_tab.Button, onBtnClickHandler,2)
end
end
self.subCon.gameObject:SetActive(false)
end
--选中菜单
function UICusVerTabBtn:SetSelectMode(index, sub_index,force_show)
if self.index == index then
self.show = not self.show
else
self.show = false
end
if force_show and self.index == index then
self.show = true
end
if self.show and index then
SetRotate(self.icon_tran, 0, 0, -90)
self:ShowSubBtnVisible(true)
if sub_index then
self:SetSelectSubIndex(index, sub_index)
end
else
SetLocalRotation(self.icon_tran, 0, 0, 0)
self:ShowSubBtnVisible(false)
end
end
--设置图标,隐藏sub
function UICusVerTabBtn:RefreshBtnState(show)
self.show = show
if self.show then
SetRotate(self.icon_tran, 0, 0, -90)
--lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_minus",true)
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2,0)
else
SetLocalRotation(self.icon_tran, 0, 0, 0)
--lua_resM:setImageSprite(self,self.icon,"uicomponent_asset","ui_addicon",true)
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2 + 7,0)
end
if self.subCon and self.sub_btn_list and #self.sub_btn_list ~= 0 then
self.subCon.gameObject:SetActive(show)
end
end
--设置选中的子一级tab
function UICusVerTabBtn:SetSelectSubIndex(main_index, 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, true)
else
v:SetSelected(false)
end
end
end
function UICusVerTabBtn:SetText(str)
self.btnText.text = str
end
function UICusVerTabBtn:ShowSubBtnVisible(bool)
if self.subCon and self.sub_btn_list and #self.sub_btn_list ~= 0 then
self.subCon.gameObject:SetActive(bool)
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 UICusVerTabBtn:SetSubConSize(height)
self.subCon.sizeDelta = Vector2(UICusVerTabBtn.SUB_CON_WIDTH, height)
end
--设置大小
function UICusVerTabBtn:SetTabBtnSize()
end
function UICusVerTabBtn:SetSelectState(b)
self.imgSelect:SetActive(b)
end
function UICusVerTabBtn:SetImageTexture(asset_path,res_name)
if asset_path and res_name then
self.img:SetActive(true)
lua_resM:setImageSprite(self,self.img:GetComponent("Image"),asset_path,res_name)
else
self.img:SetActive(false)
end
end
function UICusVerTabBtn:ShowRedDot(list)
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[0] then
self.red_dot:SetActive(true)
end
end
function UICusVerTabBtn:SetSubOffset(offset)
self.offset = offset
end
--加载完但不显示的不需计算高度
function UICusVerTabBtn:GetVisibleCount(visible)
local count = 0
for _,v in ipairs(self.sub_btn_list) do
if v:GetVisible() == visible or not v.is_loaded then
count = count + 1
end
end
return count
end
function UICusVerTabBtn:ResetSize()
self.imgSelect.transform.sizeDelta = Vector2(self.btn_width + 12, self.btn_height + 12)
self.imgSelect.transform.sizeDelta = Vector2(self.btn_width + 12, self.btn_height + 12)
self.tab_img.sizeDelta = Vector2(self.btn_width, self.btn_height)
--self.icon_tran.localPosition = Vector3(self.btn_width- 26, -self.btn_height / 2 + 7,0)
if self.sub_offset then
self.subCon.localPosition = Vector3(self.sub_offset.x, self.sub_offset.y,0)
else
self.subCon.localPosition = Vector3(self.subCon.localPosition.x, -self.btn_height,0)
end
end