363 lines
13 KiB
Lua
363 lines
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
|