sk-client/Assets/ManagedResources/~Lua/View/BtView.lua

325 lines
11 KiB
Lua

BtView = {}
local this = BtView
local bagPanelUI
local RoleListPanelUI
--- 静态数据
local static_openId = 0
local wordColors = {
[0] = {fontColor = Color.New(1, 1, 1, 1), outLineColor = Color.New(0, 0, 0, 1)},
[1] = {fontColor = Color.New(255 / 255, 244 / 255, 65 / 255, 1), outLineColor = Color.New(98 / 255, 55 / 255, 1 / 255, 1)},
}
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.inBattle = Util.GetGameObject(self.BtnJieLing,"inBattle")
self.btnChat = Util.GetGameObject(self.gameObject, "btnChat")
self.textCountDown = Util.GetGameObject(self.gameObject, "Down/btnGongHui/textCountDown"):GetComponent("Text")
-- 主城与副本的新字
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 = RedPointType.MainCity, 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.SupportPanel] = {node = self.BtnTeQuan, funcId = {79}, rpType = RedPointType.Support, clickFunc = self.OpenSupport}, --< 特权改支援
[PanelTypeView.Logistics] = {node = self.BtnTeQuan, funcId = {79, 76, 90}, rpType = RedPointType.Logistics, clickFunc = self.OpenLogistics}, --< 特权改后勤
}
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.HeroMainPanel) or (RoleListPanelUI and RoleListPanelUI.isFirstOpen == false)then
HeroManager.heroListPanelSortID = 1
HeroManager.heroListPanelProID = 0
-- RoleListPanelUI = UIManager.OpenPanel(UIName.RoleListPanel)
RoleListPanelUI = UIManager.OpenPanel(UIName.HeroMainPanel,1)
end
end
--打开仓库界面
function this:OpenCangKu()
-- if true then
-- UIManager.OpenPanel(UIName.HeroMonumentPanel)
-- return
-- end
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:OpenLogistics()
UIManager.OpenPanel(UIName.LogisticsMainPanel)
end
--绑定事件(用于子类重写)
function this:BindEvent()
for pt, data in pairs(self._BtnConfig) do
Util.AddClick(data.node, function()
--if self.panelType == pt then return end
--> map out 问题
Game.GlobalEvent:DispatchEvent(GameEvent.TrialMap.BtViewOut)
self:OnBtnClick(pt)
end)
-- 绑定红点
if data.rpType then
BindRedPointObject(data.rpType, Util.GetGameObject(data.node,"redPoint"))
end
end
Util.AddClick(self.btnChat, function ()
UIManager.OpenPanel(UIName.ChatPanel)
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.Formation.OnFormationChange, self.RefreshRedPoint, self)
Game.GlobalEvent:AddEvent(GameEvent.Battle.OnBattleUIEnd, self.BattleEnd, 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.Formation.OnFormationChange, self.RefreshRedPoint, self)
Game.GlobalEvent:RemoveEvent(GameEvent.Battle.OnBattleUIEnd, self.BattleEnd, self)
end
function this:RefreshRedPoint()
CheckRedPointStatus(RedPointType.Role)
CheckRedPointStatus(RedPointType.LineupRecommend)
CheckRedPointStatus(RedPointType.HeroTab)
end
function this:BattleEnd()
self.inBattle:SetActive(BattleManager.IsInBackBattle())
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()
self:BattleEnd()
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()
self:CheckGuildCooling()
end
--检测公会是否有加入冷却
function this:CheckGuildCooling()
local thawStamp = MyGuildManager.ExitTimeStamp + (tonumber(ConfigManager.GetConfigData(ConfigName.SpecialConfig,511).Value) * 3600)
local timeDown = math.ceil(thawStamp - GetTimeStamp());
if timeDown <= 0 then
self.textCountDown.gameObject:SetActive(false)
return
end
if not self.textCountDown or not GetTimeStamp() or self.timer then return end
self.textCountDown.gameObject:SetActive(true)
self.textCountDown.text = TimeToHM(timeDown)
self.timer = Timer.New(function()
self.textCountDown.text = TimeToHM(timeDown)
timeDown = timeDown - 1
if timeDown <= 0 then
self.timer:Stop()
self.timer = nil
self.textCountDown.gameObject:SetActive(false)
end
end, 1, -1, true)
self.timer:Start()
end
-- 检测是否开启
function this:CheckIsOpen(pt)
-- if pt == PanelTypeView.GongHui then
-- return false --公会尚未开启
-- end
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
if self.timer then
self.timer:Stop()
self.timer = nil
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
end
function this:OnSortingOrderChange(sortingOrder)
self.transform:GetComponent("Canvas").sortingOrder = sortingOrder + 1
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)
local text = Util.GetGameObject(selectInfo.node, "Text")
if pt == context.panelType then
text:GetComponent("Text").color = wordColors[1].fontColor
text:GetComponent("Outline").effectColor = wordColors[1].outLineColor
else
text:GetComponent("Text").color = wordColors[0].fontColor
text:GetComponent("Outline").effectColor = wordColors[0].outLineColor
end
end
FightPointPassManager.isOutFight = context.panelType == PanelTypeView.JieLing
end
return BtView