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

249 lines
8.1 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.BtnMainCity = Util.GetGameObject(self.gameObject, "Down/btnMainCity")
self.BtnChengYuan = Util.GetGameObject(self.gameObject, "Down/btnChengYuan")
self.BtnCangKu = Util.GetGameObject(self.gameObject, "Down/btnCangKu")
self.BtnJieLing = Util.GetGameObject(self.gameObject, "Down/btnJieLing")
self.BtnCarbon = Util.GetGameObject(self.gameObject, "Down/btnCarbon") -- 副本
self.BtnGongHui = Util.GetGameObject(self.gameObject, "Down/btnGongHui")
self.BtnTeQuan = Util.GetGameObject(self.gameObject, "Down/btnTeQuan")
-- 主城与副本的新字
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._BtnConfig = {
[PanelTypeView.MainCity] = {node = self.BtnMainCity, funcId = {49}, rpType = nil, clickFunc = self.OPenMainCity},
[PanelTypeView.MemberPanel] = {node = self.BtnChengYuan, funcId = {23}, rpType = RedPointType.Role, clickFunc = self.OpenChengYuan},
[PanelTypeView.BagPanel] = {node = self.BtnCangKu, funcId = {23}, rpType = RedPointType.Bag, clickFunc = self.OpenCangKu},
[PanelTypeView.JieLing] = {node = self.BtnJieLing, funcId = {}, rpType = RedPointType.SecretTer, clickFunc = self.OpenJieling},
[PanelTypeView.Carbon] = {node = self.BtnCarbon, funcId = {17, 18, 30, 46, 67}, rpType = RedPointType.ExploreMain, clickFunc = self.OpenCarbon},
[PanelTypeView.GongHui] = {node = self.BtnGongHui, funcId = {4}, rpType = RedPointType.Guild, clickFunc = self.OpenGuild},
[PanelTypeView.TeQuan] = {node = self.BtnTeQuan, funcId = {}, rpType = RedPointType.VipPrivilege, clickFunc = self.OpenVIP},
}
end
-- 主城
function this:OPenMainCity()
if not UIManager.IsOpen(UIName.MainPanel) then
UIManager.OpenPanel(UIName.MainPanel)
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:OpenJieling()
UIManager.OpenPanel(UIName.FightPointPassMainPanel)
end
-- 打开副本选择界面
function this:OpenCarbon()
PlayerManager.carbonType = 1
UIManager.OpenPanel(UIName.CarbonTypePanelV2)
end
function this:OpenGuild()
JumpManager.GoJump(4001)
end
function this:OpenVIP()
UIManager.OpenPanel(UIName.VipPanelV2)
end
--绑定事件(用于子类重写)
function this:BindEvent()
for pt, data in pairs(self._BtnConfig) do
Util.AddClick(data.node, function()
if self.panelType == pt then return end
self:OnBtnClick(pt)
end)
-- 绑定红点
if data.rpType then
BindRedPointObject(data.rpType, Util.GetGameObject(data.node,"redPoint"))
end
end
end
--添加事件监听(用于子类重写)
function this:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Player.OnLevelChange, self.RefreshBtnState, self)
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.Player.OnLevelChange, self.RefreshBtnState, self)
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
function this:RefreshRedPoint()
CheckRedPointStatus(RedPointType.Role)
end
---@param context table
-- context: {
-- sortOrder = int,
-- panelType = int,
-- }
--界面打开时调用(用于子类重写)
function this:OnOpen(context)
if context then
self:SetOrderStatus(context)
self:SetSelectTarget(context)
end
-- 刷新显示状态
self:RefreshBtnState()
--检测成员红点
CheckRedPointStatus(RedPointType.Role)
end
function this:RefreshBtnState()
--
for pt, data in pairs(self._BtnConfig) do
local isOpen = self:CheckIsOpen(pt)
Util.SetGray(data.node, not isOpen)
Util.GetGameObject(data.node, "lock"):SetActive(not isOpen)
end
self:InitNewOpenShow()
self:CheckMainCityNew()
self:SetAnimState()
end
-- 检测是否开启
function this:CheckIsOpen(pt)
local isOpen = false
local data = self._BtnConfig[pt]
if #data.funcId ~= 0 then
for _, id in ipairs(data.funcId) do
if ActTimeCtrlManager.SingleFuncState(id) then
isOpen = true
break
end
end
else
isOpen = true
end
return isOpen
end
-- 按钮点击事件
function this:OnBtnClick(pt)
local isOpen = self:CheckIsOpen(pt)
if isOpen then
local btnFunc = self._BtnConfig[pt].clickFunc
if btnFunc then
btnFunc(self)
end
else
local str = ""
if pt == PanelTypeView.Carbon then
str = ActTimeCtrlManager.CarbonOpenTip()
else
local id = self._BtnConfig[pt].funcId[1]
str = ActTimeCtrlManager.GetFuncTip(id)
end
PopupTipPanel.ShowTip(str)
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()
for pt, data in pairs(self._BtnConfig) do
if data.rpType then
ClearRedPointObject(data.rpType, Util.GetGameObject(data.node,"redPoint"))
end
end
bagPanelUI = nil
RoleListPanelUI = nil
end
--设定层级
function this:SetOrderStatus(context)
if not context.sortOrder then
return
end
self.transform:GetComponent("Canvas").sortingOrder = context.sortOrder + 1
for pt, selectInfo in pairs(self._BtnConfig) do
Util.SetParticleSortLayer(Util.GetGameObject(selectInfo.node, "btnSelect/Effect_UI_ZhuCheng_xuanzhong"),context.sortOrder + 1)
end
end
--设定选中
function this:SetSelectTarget(context)
if not context.panelType then
return
end
self.panelType = context.panelType
for pt, selectInfo in pairs(self._BtnConfig) do
Util.GetGameObject(selectInfo.node, "btnSelect"):SetActive(pt == context.panelType)
end
FightPointPassManager.isOutFight = context.panelType == PanelTypeView.JieLing
end
return BtView