363 lines
No EOL
13 KiB
Lua
363 lines
No EOL
13 KiB
Lua
local XUiMainDown = require("XUi/XUiMain/XUiMainDown")
|
||
local XUiMainRightTop = require("XUi/XUiMain/XUiMainRightTop")
|
||
local XUiMainRightMid = require("XUi/XUiMain/XUiMainRightMid")
|
||
local XUiMainLeftTop = require("XUi/XUiMain/XUiMainLeftTop")
|
||
local XUiMainRightMidSecond = require("XUi/XUiMain/XUiMainRightMidSecond")
|
||
local XUiMainRightBottom = require("XUi/XUiMain/XUiMainRightBottom")
|
||
|
||
|
||
local XUiMainLeftMid = require("XUi/XUiMain/XUiMainLeftMid")
|
||
local XUiMainLeftBottom = require("XUi/XUiMain/XUiMainLeftBottom")
|
||
local XUiMainOther = require("XUi/XUiMain/XUiMainOther")
|
||
local XUiPanelSignBoard = require("XUi/XUiMain/XUiChildView/XUiPanelSignBoard")
|
||
|
||
|
||
local XUiMain = XLuaUiManager.Register(XLuaUi, "UiMain")
|
||
|
||
local CameraIndex = {
|
||
Main = 1,
|
||
MainEnter = 2,
|
||
MainChatEnter = 3,
|
||
}
|
||
|
||
local MenuType = {
|
||
Main = 1,
|
||
Second = 2,
|
||
}
|
||
|
||
XUiMain.LowPowerState = {
|
||
Full = 1,
|
||
Low = 2,
|
||
LowToFull = 3,
|
||
FullToLow = 4,
|
||
None = 5
|
||
}
|
||
|
||
local RightMidType = MenuType.Main
|
||
|
||
function XUiMain:OnAwake()
|
||
--BDC
|
||
CS.XHeroBdcAgent.BdcIntoGame(CS.UnityEngine.Time.time)
|
||
|
||
self.RightTop = XUiMainRightTop.New(self) --右上角组件(资源、电量、时间、设置、邮件……)
|
||
self.RightMid = XUiMainRightMid.New(self) --右中角组件(各种功能……)
|
||
|
||
self.RightMidSecond = XUiMainRightMidSecond.New(self) -- 右中角二级菜单
|
||
self.RightBottom = XUiMainRightBottom.New(self) --右下角组件(各个大功能入口……)
|
||
|
||
self.LeftTop = XUiMainLeftTop.New(self) --左上角组件(玩家信息……)
|
||
self.LeftMid = XUiMainLeftMid.New(self) --左中角组件(自动战斗、过期提醒……)
|
||
self.LeftBottom = XUiMainLeftBottom.New(self) --左下角组件(公告、好友、福利、AD、聊天……)
|
||
self.Other = XUiMainOther.New(self) --其他组件(角色触摸、截图……)
|
||
self.Down = XUiMainDown.New(self, self.PanelDown) --底部组件(战斗通行证……)
|
||
-- self.AreanOnline = XUiPanelArenaOnline.New(self, self.PanelArenaOnline) --屏蔽合众战局
|
||
self.PreEnterFightCallback = function() self:OnPreEnterFight() end
|
||
XEventManager.AddEventListener(XEventId.EVENT_PRE_ENTER_FIGHT, self.PreEnterFightCallback)
|
||
end
|
||
|
||
function XUiMain:OnStart()
|
||
-- 注销后重新登录 主界面默认不显示二级菜单
|
||
if XLoginManager.IsFirstOpenMainUi() then
|
||
RightMidType = MenuType.Main
|
||
end
|
||
|
||
-- 二级菜单切换按钮
|
||
self.BtnMain.CallBack = function() self:OnBtnMain() end
|
||
self.BtnSecond.CallBack = function() self:OnBtnSecond() end
|
||
|
||
end
|
||
|
||
function XUiMain:OnEnable()
|
||
if XDataCenter.GuideManager.CheckIsInGuide() then
|
||
RightMidType = MenuType.Main
|
||
end
|
||
if XDataCenter.PokemonManager then
|
||
XDataCenter.PokemonManager.ResetSpeed()
|
||
end
|
||
|
||
-- 刷新二级菜单
|
||
self:UpdateRightMenu()
|
||
|
||
-- 每次打开的时候重新加载一下场景
|
||
local curSceneId = XDataCenter.PhotographManager.GetCurSceneId()
|
||
local curSceneTemplate = XDataCenter.PhotographManager.GetSceneTemplateById(curSceneId)
|
||
local curSceneUrl, _ = XSceneModelConfigs.GetSceneAndModelPathById(curSceneTemplate.SceneModelId)
|
||
local modelUrl = self:GetDefaultUiModelUrl()
|
||
self:LoadUiScene(curSceneUrl, modelUrl, function() self:OnUiSceneLoaded(curSceneTemplate.ParticleGroupName) end, false)
|
||
|
||
self:PlayEnterAnim()
|
||
XRedPointManager.AutoReleseRedPointEvent()
|
||
self.LeftTop:OnEnable()
|
||
self.LeftMid:OnEnable()
|
||
self.LeftBottom:OnEnable()
|
||
self.RightMid:OnEnable()
|
||
self.RightMidSecond:OnEnable()
|
||
self.RightTop:OnEnable()
|
||
self.RightBottom:OnEnable()
|
||
self.Other:OnEnable()
|
||
self:SetCacheFight()
|
||
self:SetScreenAdaptorCache()
|
||
XDataCenter.SetManager.SetSceneUIType()
|
||
self:AreanOnlineInviteNotify()
|
||
self.Down:OnEnable()
|
||
self:OnBtnMain(true) --临时修改#94661
|
||
XLoginManager.ResetHearbeatInterval()
|
||
end
|
||
|
||
function XUiMain:OnDisable()
|
||
self.LeftTop:OnDisable()
|
||
self.LeftMid:OnDisable()
|
||
self.LeftBottom:OnDisable()
|
||
self.RightMid:OnDisable()
|
||
self.RightMidSecond:OnDisable()
|
||
self.Other:OnDisable()
|
||
self.RightBottom:OnDisable()
|
||
self.RightTop:OnDisable()
|
||
self.Down:OnDisable()
|
||
end
|
||
|
||
function XUiMain:OnDestroy()
|
||
self.LeftBottom:OnDestroy()
|
||
self.Other:OnDestroy()
|
||
self.RightTop:OnDestroy()
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_PRE_ENTER_FIGHT, self.PreEnterFightCallback)
|
||
end
|
||
|
||
function XUiMain:OnNotify(evt, ...)
|
||
if evt == XEventId.EVENT_CHAT_OPEN then
|
||
--打开聊天界面
|
||
self:PlayMainChatIn()
|
||
elseif evt == XEventId.EVENT_CHAT_CLOSE then
|
||
--聊天界面关闭
|
||
self:PlayMainChatOut()
|
||
elseif evt == XEventId.EVENT_CHAT_RECEIVE_PRIVATECHAT then
|
||
-- self.AreanOnline:Show(...)
|
||
elseif evt == XEventId.EVENT_GUIDE_START then
|
||
-- 进行新手引导时,切换显示为主菜单
|
||
self:OnBtnMain()
|
||
end
|
||
|
||
self.LeftBottom:OnNotify(evt)
|
||
self.RightMid:OnNotify(evt)
|
||
self.RightTop:OnNotify(evt)
|
||
end
|
||
|
||
function XUiMain:OnPreEnterFight()
|
||
self:LoadUiScene("", "") -- 释放主界面角色场景
|
||
end
|
||
|
||
function XUiMain:AreanOnlineInviteNotify()
|
||
local chatdata = XDataCenter.ArenaOnlineManager.GetPrivateChatData()
|
||
if not chatdata or not next(chatdata) then
|
||
return
|
||
end
|
||
|
||
XLuaUiManager.Open("UiArenaOnlineInvitation")
|
||
end
|
||
|
||
function XUiMain:OnGetEvents()
|
||
return {
|
||
XEventId.EVENT_CHAT_OPEN,
|
||
XEventId.EVENT_CHAT_CLOSE,
|
||
XEventId.EVENT_NOTICE_PIC_CHANGE,
|
||
XEventId.EVENT_TASKFORCE_INFO_NOTIFY,
|
||
XEventId.EVENT_ACTIVITY_MAINLINE_STATE_CHANGE,
|
||
XEventId.EVENT_MAIL_COUNT_CHANGE,
|
||
XEventId.EVENT_CHAT_RECEIVE_PRIVATECHAT,
|
||
XEventId.EVENT_GUIDE_START,
|
||
}
|
||
end
|
||
|
||
--初始化摄像机
|
||
function XUiMain:InitSceneRoot(particleGroupName)
|
||
local root = self.UiModelGo.transform
|
||
self.CameraFar = {
|
||
[CameraIndex.Main] = self:FindVirtualCamera("CamFarMain"),
|
||
[CameraIndex.MainEnter] = self:FindVirtualCamera("CamFarMainEnter"),
|
||
[CameraIndex.MainChatEnter] = self:FindVirtualCamera("CamFarMainChatEnter"),
|
||
}
|
||
self.CameraNear = {
|
||
[CameraIndex.Main] = self:FindVirtualCamera("CamNearMain"),
|
||
[CameraIndex.MainEnter] = self:FindVirtualCamera("CamNearMainEnter"),
|
||
[CameraIndex.MainChatEnter] = self:FindVirtualCamera("CamNearMainChatEnter"),
|
||
}
|
||
|
||
--主页面电量特效相关
|
||
local sceneRoot = self.UiSceneInfo.Transform
|
||
if particleGroupName and particleGroupName ~= "" then
|
||
self.ChargeAnimator = sceneRoot:FindTransform(particleGroupName):GetComponent("Animator")
|
||
else
|
||
self.ChargeAnimator = nil
|
||
end
|
||
self.ToChargePD = sceneRoot:Find("Animations/ToChargeTimeLine")
|
||
self.ToFullPD = sceneRoot:Find("Animations/ToFullTimeLine")
|
||
self.FullPD = sceneRoot:Find("Animations/FullTimeLine")
|
||
self.ChargePD = sceneRoot:Find("Animations/ChargeTimeLine")
|
||
end
|
||
|
||
function XUiMain:ChangeLowPowerPartical(state)
|
||
if self.ChargeAnimator then
|
||
if state == self.LowPowerState.Full then
|
||
self.ChargeAnimator:Play("Full")
|
||
elseif state == self.LowPowerState.Low then
|
||
self.ChargeAnimator:Play("Low")
|
||
elseif state == self.LowPowerState.LowToFull then
|
||
self.ChargeAnimator:Play("LowToFull")
|
||
elseif state == self.LowPowerState.FullToLow then
|
||
self.ChargeAnimator:Play("FullToLow")
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiMain:ChangeLowPowerTimeLine(state)
|
||
if self.ToChargePD then self.ToChargePD.gameObject:SetActiveEx(false) end
|
||
if self.ToFullPD then self.ToFullPD.gameObject:SetActiveEx(false) end
|
||
if self.FullPD then self.FullPD.gameObject:SetActiveEx(false) end
|
||
if self.ChargePD then self.ChargePD.gameObject:SetActiveEx(false) end
|
||
|
||
if state == self.LowPowerState.Full then
|
||
if self.FullPD then self.FullPD.gameObject:SetActiveEx(true) end
|
||
elseif state == self.LowPowerState.Low then
|
||
if self.ChargePD then self.ChargePD.gameObject:SetActiveEx(true) end
|
||
elseif state == self.LowPowerState.LowToFull then
|
||
if self.ToFullPD then self.ToFullPD.gameObject:SetActiveEx(true) end
|
||
elseif state == self.LowPowerState.FullToLow then
|
||
if self.ToChargePD then self.ToChargePD.gameObject:SetActiveEx(true) end
|
||
end
|
||
end
|
||
|
||
function XUiMain:ChangeLowPowerState(state)
|
||
self:ChangeLowPowerPartical(state)
|
||
self:ChangeLowPowerTimeLine(state)
|
||
end
|
||
|
||
function XUiMain:UpdateCamera(camera)
|
||
for _, cameraIndex in pairs(CameraIndex) do
|
||
self.CameraNear[cameraIndex].gameObject:SetActive(cameraIndex == camera)
|
||
self.CameraFar[cameraIndex].gameObject:SetActive(cameraIndex == camera)
|
||
end
|
||
end
|
||
|
||
function XUiMain:UpdateRightMenu()
|
||
-- 根据状态控制右侧面板的显隐
|
||
self.BtnSecond.gameObject:SetActiveEx(RightMidType == MenuType.Main)
|
||
self.PanelRightBottom.gameObject:SetActiveEx(RightMidType == MenuType.Main)
|
||
self.PanelRightMid.gameObject:SetActiveEx(RightMidType == MenuType.Main)
|
||
|
||
self.BtnMain.gameObject:SetActiveEx(RightMidType == MenuType.Second)
|
||
self.PanelRightMidSecond.gameObject:SetActiveEx(RightMidType == MenuType.Second)
|
||
|
||
if RightMidType == MenuType.Second then
|
||
self.RightMidSecond:RefreshMenu()
|
||
end
|
||
end
|
||
|
||
--播放主界面打开动画
|
||
function XUiMain:PlayEnterAnim()
|
||
local anim, endCb
|
||
if XLoginManager.IsFirstOpenMainUi() then
|
||
anim = "AnimEnter"
|
||
else
|
||
anim = "AnimReenter"
|
||
end
|
||
XLuaUiManager.SetMask(true)
|
||
endCb = function()
|
||
if XLoginManager.IsFirstOpenMainUi() then
|
||
anim = "AnimEnter2"
|
||
self:PlayAnimation(anim, endCb)
|
||
self:UpdateCamera(CameraIndex.Main)
|
||
XLoginManager.SetFirstOpenMainUi(false)
|
||
else
|
||
XLoginManager.SetStartGuide(true)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_MAINUI_ENABLE)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_CARD_REFRESH_WELFARE_BTN)
|
||
XLuaUiManager.SetMask(false)
|
||
end
|
||
end
|
||
self:PlayAnimation(anim, endCb)
|
||
end
|
||
|
||
--播放关闭聊天动画
|
||
function XUiMain:PlayMainChatOut()
|
||
self:UpdateCamera(CameraIndex.Main)
|
||
self:PlayAnimation("AnimChatIn")
|
||
end
|
||
|
||
--播放打开聊天动画
|
||
function XUiMain:PlayMainChatIn()
|
||
self:UpdateCamera(CameraIndex.MainChatEnter)
|
||
self:PlayAnimation("AnimChatOut")
|
||
end
|
||
|
||
function XUiMain:SetCacheFight()
|
||
if not self.IsFirstSetFight then
|
||
self.IsFirstSetFight = true
|
||
XDataCenter.SetManager.SetAllyDamageByCache()
|
||
XDataCenter.SetManager.SetAllyEffectByCache()
|
||
XDataCenter.SetManager.SetOwnFontSizeByCache()
|
||
XDataCenter.SetManager.SetDefaultFontSize()
|
||
XDataCenter.SetManager.SetScreenOff()
|
||
end
|
||
end
|
||
|
||
function XUiMain:SetScreenAdaptorCache()
|
||
if XDataCenter.SetManager.IsAdaptorScreen() and not XTool.UObjIsNil(self.SafeAreaContentPane) then
|
||
self.SafeAreaContentPane:UpdateSpecialScreenOff()
|
||
end
|
||
end
|
||
|
||
-- 设置福利按钮特效可见性
|
||
function XUiMain:SetBtnWelfareTagActive(active)
|
||
self.LeftBottom:SetBtnWelfareTagActive(active)
|
||
end
|
||
|
||
-- 回到主页按钮
|
||
function XUiMain:OnBtnMain(force)
|
||
if RightMidType == MenuType.Main and not force then
|
||
return
|
||
end
|
||
|
||
RightMidType = MenuType.Main
|
||
|
||
self.BtnSecond.gameObject:SetActiveEx(true)
|
||
self.BtnMain.gameObject:SetActiveEx(false)
|
||
|
||
self.PanelRightBottom.gameObject:SetActiveEx(true)
|
||
self.PanelRightMid.gameObject:SetActiveEx(true)
|
||
|
||
self:PlayAnimationWithMask("AnimPanelRightMid", function()
|
||
self.PanelRightMidSecond.gameObject:SetActiveEx(false)
|
||
end)
|
||
end
|
||
|
||
-- 下一页按钮(主界面二级菜单)
|
||
function XUiMain:OnBtnSecond()
|
||
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.SubMenu) then return end
|
||
local dict = {}
|
||
dict["ui_first_button"] = XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnSecond
|
||
dict["role_level"] = XPlayer.GetLevel()
|
||
CS.XRecord.Record(dict, "200004", "UiOpen")
|
||
RightMidType = MenuType.Second
|
||
self.RightMidSecond:RefreshMenu()
|
||
|
||
self.BtnMain.gameObject:SetActiveEx(true)
|
||
self.BtnSecond.gameObject:SetActiveEx(false)
|
||
self.PanelRightMidSecond.gameObject:SetActiveEx(true)
|
||
|
||
self:PlayAnimationWithMask("AnimPanelRightMidSecond", function()
|
||
self.PanelRightMid.gameObject:SetActiveEx(false)
|
||
self.PanelRightBottom.gameObject:SetActiveEx(false)
|
||
end)
|
||
end
|
||
|
||
function XUiMain:OnUiSceneLoaded(particleGroupName)
|
||
self:SetGameObject()
|
||
self:InitSceneRoot(particleGroupName)
|
||
self.Other.SignBoard = XUiPanelSignBoard.New(self.Other.PanelSignBoard, self, XUiPanelSignBoard.SignBoardOpenType.MAIN)
|
||
if XLoginManager.IsFirstOpenMainUi() then
|
||
self:SetBtnWelfareTagActive(false)
|
||
self:UpdateCamera(CameraIndex.MainEnter)
|
||
else
|
||
self:UpdateCamera(CameraIndex.Main)
|
||
end
|
||
end |