miduo_client/Assets/ManagedResources/~Lua/View/BtView.lua

370 lines
12 KiB
Lua

BtView = {}
local this = BtView
local bagPanelUI
local RoleListPanelUI
--- 静态数据
local static_openId = 0
function BtView:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = BtView })
return b
end
--初始化组件(用于子类重写)
function this:InitComponent()
--basicPart
self.BtnRole = Util.GetGameObject(self.gameObject, "Down/btnPlayer")
self.BtnChengYuan = Util.GetGameObject(self.gameObject, "Down/btnChengYuan")
self.BtnDiffMonster = Util.GetGameObject(self.gameObject, "Down/btnYiYao")
self.BtnMainCity = Util.GetGameObject(self.gameObject, "Down/btnMainCity")
self.BtnCangKu = Util.GetGameObject(self.gameObject, "Down/btnCangKu")
self.BtnJieLing = Util.GetGameObject(self.gameObject, "Down/btnJieLing")
self.BtnTalent = Util.GetGameObject(self.gameObject, "Down/btnTalent")
self.BtnCarbon = Util.GetGameObject(self.gameObject, "Down/btnCarbon") -- 副本
--红点
self.bagRedPoint = Util.GetGameObject(self.gameObject, "Down/btnCangKu/redPoint")
self.chengYuanRedPoint = Util.GetGameObject(self.gameObject, "Down/btnChengYuan/redPoint")
self.pokemonRedPoint = Util.GetGameObject(self.gameObject, "Down/btnYiYao/redPoint")
self.roleRedPoint = Util.GetGameObject(self.BtnRole,"redPoint")
self.jieLingRed = Util.GetGameObject(self.BtnJieLing,"redPoint")
self.talentRed = Util.GetGameObject(self.BtnTalent,"redPoint")
self.carbonRed = Util.GetGameObject(self.BtnCarbon,"redPoint")
-- 永久性隐藏主角红点
self.roleRedPoint:SetActive(false)
-- 主城与副本的新字
self.mainCityNew = Util.GetGameObject(self.BtnMainCity, "xin")
self.carbonNew = Util.GetGameObject(self.BtnCarbon, "xin")
self.btnText = {
[PanelTypeView.Carbon] = self.carbonNew,
[PanelTypeView.MainCity] = self.mainCityNew,
}
self.AnimRoot = Util.GetGameObject(self.gameObject, "Down")
-- 锁
self.lockList = {
[22] = Util.GetGameObject(self.BtnChengYuan, "lock"),
[3] = Util.GetGameObject(self.BtnDiffMonster, "lock"),
[23] = Util.GetGameObject(self.BtnCangKu, "lock"),
[29] = Util.GetGameObject(self.BtnRole, "lock"),
[49] = Util.GetGameObject(self.BtnMainCity, "lock"),
[50] = Util.GetGameObject(self.BtnJieLing, "lock"),
[101] = Util.GetGameObject(self.BtnTalent, "lock"),
[17] = Util.GetGameObject(self.BtnCarbon, "lock"),
}
self.selectList = {}
self:InitSelectList()
self.funcList = {}
self.funcList[22] = {go = self.BtnChengYuan, sortId = 2}
self.funcList[3] = {go = self.BtnDiffMonster, sortId = 3}
self.funcList[23] = {go = self.BtnCangKu, sortId = 5}
self.funcList[29] = {go = self.BtnRole, sortId = 1}
self.funcList[49] = {go = self.BtnMainCity, sortId = 9}
self.funcList[50] = {go = self.BtnJieLing, sortId = 10}
self.funcList[101] = {go = self.BtnTalent, sortId = 11}
self.funcList[17] = {go = self.BtnCarbon, sortId = 12}
self.selectBtn = nil
self.unSelectList = {
[1] = self.BtnRole,
[2] = self.BtnChengYuan,
[3] = self.BtnDiffMonster,
[5] = self.BtnCangKu,
[9] = self.BtnMainCity,
[10] = self.BtnJieLing,
[11] = self.BtnTalent,
[17] = self.BtnCarbon,
}
end
--绑定事件(用于子类重写)
function this:BindEvent()
-- 功能开启列表
local modefunc = {
[22] = self.OpenChengYuan,
[3] = self.OpenDemon,
[23] = self.OpenCangKu,
[29] = self.OpenRole,
[49] = self.OPenMainCity,
[50] = self.OpenJieling,
[101] = self.OpenTalent,
[17] = self.OpenCarbon,
}
for i, v in pairs(self.funcList) do
Util.AddClick(v.go, function()
if self.selectBtn == v.sortId then return end
self:SetBtnShowState(v.go, i, modefunc[i])
end)
end
-- 绑定红点
--BindRedPointObject(RedPointType.DiffMonster, self.pokemonRedPoint)
--BindRedPointObject(RedPointType.Role, self.roleRedPoint)
BindRedPointObject(RedPointType.Bag, self.bagRedPoint)
BindRedPointObject(RedPointType.SecretTer, self.jieLingRed)
BindRedPointObject(RedPointType.ExploreMain, self.carbonRed)
end
--添加事件监听(用于子类重写)
function this:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.FunctionCtrl.OnFunctionOpen, self.RefreshBtnState, self)
Game.GlobalEvent:AddEvent(GameEvent.FunctionCtrl.OnFunctionClose, self.RefreshBtnState, self)
Game.GlobalEvent:AddEvent(GameEvent.Equip.EquipChange, self.RefreshRedPoint, self)
end
--移除事件监听(用于子类重写)
function this:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.FunctionCtrl.OnFunctionOpen, self.RefreshBtnState, self)
Game.GlobalEvent:RemoveEvent(GameEvent.FunctionCtrl.OnFunctionClose, self.RefreshBtnState, self)
Game.GlobalEvent:RemoveEvent(GameEvent.Equip.EquipChange, self.RefreshRedPoint, self)
end
---@param context table
-- context: {
-- sortOrder = int,
-- panelType = int,
-- }
--界面打开时调用(用于子类重写)
function this:OnOpen(context)
if context then
self:SetOrderStatus(context)
self:SetSelectTarget(context)
end
self:RefreshRedPoint()
-- 刷新显示状态
self:RefreshBtnState()
end
function this:RefreshBtnState()
for i, v in pairs(self.funcList) do
if i ~= 50 then
local isOpen = false
if i == 17 then
isOpen = ActTimeCtrlManager.SingleFuncState(i) or ActTimeCtrlManager.SingleFuncState(18) or
ActTimeCtrlManager.IsQualifiled(46) or ActTimeCtrlManager.SingleFuncState(30)
else
isOpen = ActTimeCtrlManager.SingleFuncState(i)
end
Util.SetGray(v.go, not isOpen)
self.lockList[i]:SetActive(not isOpen)
end
end
self:InitNewOpenShow()
self:CheckMainCityNew()
self:SetAnimState()
end
function this:SetBtnShowState(btn, id, btnFunc)
if id ~= 50 then
local isOpen = false
local str = ""
if id == 17 then
isOpen = ActTimeCtrlManager.SingleFuncState(id) or ActTimeCtrlManager.SingleFuncState(18) or
ActTimeCtrlManager.IsQualifiled(46) or ActTimeCtrlManager.SingleFuncState(30)
str = ActTimeCtrlManager.CarbonOpenTip()
else
isOpen = ActTimeCtrlManager.SingleFuncState(id)
str = ActTimeCtrlManager.GetFuncTip(id)
end
if isOpen then
if btnFunc then
btnFunc(self)
end
else
PopupTipPanel.ShowTip(str)
end
else
if btnFunc then
btnFunc(self)
end
end
end
--- 显示隐藏新字
---- @param btn 需要设置的按钮
function this:SetBtnNewIcon(btn, state)
--for i, v in pairs(self.btnText) do
-- if i == btnType then
-- v:SetActive(state)
-- end
--end
if btn then
local textGo = Util.GetGameObject(btn.transform, "xin")
if textGo then
textGo:SetActive(state)
end
end
end
-- 初始化新字显示, 先只检查副本
function this:InitNewOpenShow()
local isOpen = FunctionOpenMananger.GetRootState(PanelTypeView.Carbon)
Util.GetGameObject(self.BtnCarbon.transform, "xin"):SetActive(isOpen)
end
-- 检测主城
function this:CheckMainCityNew()
local isOpen = FunctionOpenMananger.GetRootState(PanelTypeView.MainCity)
Util.GetGameObject(self.BtnMainCity.transform, "xin"):SetActive(isOpen)
end
function this:SetAnimState()
local mainCityOpen = FunctionOpenMananger.GetRootState(PanelTypeView.MainCity)
local carbonOpen = FunctionOpenMananger.GetRootState(PanelTypeView.Carbon)
local isUseAnim = mainCityOpen or carbonOpen
if isUseAnim then
PlayUIAnim(self.AnimRoot)
else
PlayUIAnimBack(self.AnimRoot)
end
end
--界面关闭时调用(用于子类重写)
function this:OnClose()
--ClearRedPointObject(RedPointType.DiffMonster, self.pokemonRedPoint)
--ClearRedPointObject(RedPointType.Role, self.roleRedPoint)
ClearRedPointObject(RedPointType.Bag, self.bagRedPoint)
ClearRedPointObject(RedPointType.SecretTer, self.jieLingRed)
ClearRedPointObject(RedPointType.ExploreMain, self.carbonRed)
bagPanelUI = nil
RoleListPanelUI = nil
end
--初始化选中列表
function this:InitSelectList()
self:InsertTable(self.BtnMainCity, PanelTypeView.MainCity)
self:InsertTable(self.BtnRole, PanelTypeView.RolePanel)
self:InsertTable(self.BtnChengYuan, PanelTypeView.MemberPanel)
self:InsertTable(self.BtnDiffMonster, PanelTypeView.DiffMonsterPanel)
self:InsertTable(self.BtnCangKu, PanelTypeView.BagPanel)
self:InsertTable(self.BtnJieLing, PanelTypeView.JieLing)
self:InsertTable(self.BtnTalent, PanelTypeView.Talent)
self:InsertTable(self.BtnCarbon, PanelTypeView.Carbon)
end
function this:InsertTable(_go, _panelType)
table.insert(self.selectList, { panelType = _panelType, gameObject = Util.GetGameObject(_go, "btnSelect") })
end
-- 打开异妖界面
function this:OpenDemon()
--if self.selectBtn and self.selectBtn == PanelTypeView.DiffMonsterPanel then
-- return
--end
if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.DIFFER_DEMONS) then
UIManager.OpenPanel(UIName.DiffMonsterPanel)
else
PopupTipPanel.ShowTip(ActTimeCtrlManager.GetFuncTip(FUNCTION_OPEN_TYPE.DIFFER_DEMONS))
end
end
--打开英雄列表界面
function this:OpenChengYuan()
if not UIManager.IsOpen(UIName.RoleListPanel) or (RoleListPanelUI and RoleListPanelUI .isFirstOpen == false)then
HeroManager.heroListPanelSortID = 1
HeroManager.heroListPanelProID = 0
RoleListPanelUI = UIManager.OpenPanel(UIName.RoleListPanel)
end
end
--打开仓库界面
function this:OpenCangKu()
if not UIManager.IsOpen(UIName.BagPanel) or (bagPanelUI and bagPanelUI.isFristOpen == false) then
bagPanelUI = UIManager.OpenPanel(UIName.BagPanel)
end
end
function this:OpenRole()
PopupTipPanel.ShowTip("功能尚未开启!!!")
end
function this:OPenMainCity()
if not UIManager.IsOpen(UIName.MainPanel) then
UIManager.OpenPanel(UIName.MainPanel)
end
end
function this:OpenJieling()
--UIManager.OpenPanel(UIName.TalentPanel, { tabIndex = 1 })
UIManager.OpenPanel(UIName.FightPointPassMainPanel)
end
function this:OpenTalent()
UIManager.OpenPanel(UIName.WorkShowTechnologPanel, 1)
end
-- 打开副本选择界面
function this:OpenCarbon()
-- UIManager.OpenPanel(UIName.CarbonTypePanel)
UIManager.OpenPanel(UIName.CarbonTypePanelV2)
end
function this:RefreshRedPoint()
Log(" ----------- 2 GameEvent.Equip.EquipChange ")
self.chengYuanRedPoint:SetActive(LengthOfTable(RedPointManager.GetRedPointRoleIsUpEquip()) > 0)
CheckRedPointStatus(RedPointType.DiffMonster)
end
--设定层级
function this:SetOrderStatus(context)
if not context.sortOrder then
return
end
self.transform:GetComponent("Canvas").sortingOrder = context.sortOrder + 1
end
--设定选中
function this:SetSelectTarget(context)
if not context.panelType then
return
end
self.selectBtn = context.panelType
table.walk(self.selectList, function(selectInfo)
selectInfo.gameObject:SetActive(selectInfo.panelType == context.panelType)
if self.unSelectList[selectInfo.panelType] then
if selectInfo.panelType == context.panelType then
self.unSelectList[selectInfo.panelType]:GetComponent("Image").enabled = false
else
self.unSelectList[selectInfo.panelType]:GetComponent("Image").enabled = true
end
end
end)
FightPointPassManager.isOutFight = context.panelType == PanelTypeView.JieLing
end
return BtView