PGRData/Script/matrix/xui/xuimultidim/XUiMultiDimMain.lua

433 lines
No EOL
15 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiMultiDimMain = XLuaUiManager.Register(XLuaUi, "UiMultiDimMain")
local XUiMultiDimMainDetail = require("XUi/XUiMultiDim/XUiMultiDimMainDetail")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local UiState = {
Main = 1,
Detail = 2,
}
function XUiMultiDimMain:OnAwake()
self:RegisterUiEvents()
self:InitSceneRoot()
self.ThemeBtnInfo = {}
self.ThemeBtnRad = {}
end
function XUiMultiDimMain:OnStart()
local itemId = XDataCenter.MultiDimManager.GetActivityItemId()
self.AssetPanel = XUiHelper.NewPanelActivityAsset({ itemId }, self.PanelSpecialTool)
self:InitView()
self:InitThemeView()
self.UiState = UiState.Main
self:SwitchState(self.UiState)
self.TeamFightRad = XRedPointManager.AddRedPointEvent(
self.BtnTeamFight,
self.TeamFightRedPoint,
self,
{ XRedPointConditions.Types.CONDITION_MULTI_DIM_FIRST_REWARD },
self.CurrentThemeId, false)
-- 播放镜头动画
if self.SceneAnimEnable then
self.SceneAnimEnable:PlayTimelineAnimation()
end
end
function XUiMultiDimMain:OnEnable()
self:StartTime()
self:RefreshThemeBtnInfo()
self:RefreshModel()
self:RefreshTeamBtn()
self:RefreshTaskRedPoint()
self:OpenOnceThemeUnlockDialog()
XLoginManager.SpeedUpHearbeatInterval()
end
function XUiMultiDimMain:OnGetEvents()
return {
XEventId.EVENT_FINISH_TASK,
}
end
function XUiMultiDimMain:OnNotify(event, ...)
if event == XEventId.EVENT_FINISH_TASK then
self:RefreshTaskRedPoint()
end
end
function XUiMultiDimMain:OnDisable()
self:StopTime()
XLoginManager.ResetHearbeatInterval()
end
function XUiMultiDimMain:OnDestroy()
if self.UiMultiDimMainDetail then
self.UiMultiDimMainDetail:OnDestroy()
end
end
--region 按钮相关
function XUiMultiDimMain:RegisterUiEvents()
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.OnBtnBackClick)
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, self.OnBtnMainUiClick)
XUiHelper.RegisterClickEvent(self, self.BtnTask, self.OnBtnTaskClick)
XUiHelper.RegisterClickEvent(self, self.BtnBuff, self.OnBtnBuffClick)
XUiHelper.RegisterClickEvent(self, self.BtnRank, self.OnBtnRankClick)
XUiHelper.RegisterClickEvent(self, self.BtnTeamFight, self.OnBtnTeamFightClick)
XUiHelper.RegisterClickEvent(self, self.BtnSingleFight, self.OnBtnSingleFightClick)
self:BindHelpBtn(self.BtnHelp, "MultiDimMain")
end
function XUiMultiDimMain:OnBtnBackClick()
if self.UiState == UiState.Main then
self:Close()
elseif self.UiState == UiState.Detail then
if XDataCenter.RoomManager.Matching then
local title = CsXTextManagerGetText("TipTitle")
local cancelMatchMsg = CsXTextManagerGetText("OnlineInstanceCancelMatch")
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
XDataCenter.RoomManager.CancelMatch(function()
self:SwitchState(UiState.Main)
end)
end)
else
self:SwitchState(UiState.Main)
end
end
end
function XUiMultiDimMain:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
-- 多维任务
function XUiMultiDimMain:OnBtnTaskClick()
XLuaUiManager.Open("UiMultiDimTask")
end
-- 天赋技能
function XUiMultiDimMain:OnBtnBuffClick()
local isUnlock, desc = XDataCenter.MultiDimManager.CheckTalentIsOpen()
if not isUnlock then
XUiManager.TipMsg(desc)
return
end
XLuaUiManager.Open("UiMultiDimTalent")
end
-- 多维排行
function XUiMultiDimMain:OnBtnRankClick()
XLuaUiManager.Open("UiMultiDimTeamRanking")
end
-- 单人副本
function XUiMultiDimMain:OnBtnSingleFightClick()
-- 保存选择的主题
XDataCenter.MultiDimManager.SaveDefaultActivityThemeId(self.CurrentThemeId)
XLuaUiManager.Open("UiMultiDimSingleCopy", self.CurrentThemeId)
end
-- 多人副本
function XUiMultiDimMain:OnBtnTeamFightClick()
-- 前置条件Condition
local isUnlock, desc = XDataCenter.MultiDimManager.CheckThemeTeamFubenCondition(self.CurrentThemeId)
if not isUnlock then
XUiManager.TipMsg(desc)
return
end
-- 是否在开启时间内
if not XDataCenter.MultiDimManager.CheckTeamIsOpen(true) then
return
end
-- 保存选择的主题
XDataCenter.MultiDimManager.SaveDefaultActivityThemeId(self.CurrentThemeId)
-- 保存点击
if not XDataCenter.MultiDimManager.CheckClickMainTeamFightBtn(self.CurrentThemeId) then
local key = XDataCenter.MultiDimManager.GetFirstRewardKey(self.CurrentThemeId)
local todayTime = XTime.GetSeverTodayFreshTime()
XSaveTool.SaveData(key, todayTime)
self:RefreshThemeRedPoint()
end
-- 默认难度
local currentDifficulty = XDataCenter.MultiDimManager.GetCurrentThemeDefaultDifficultyId(self.CurrentThemeId)
self.UiMultiDimMainDetail:Refresh(self.CurrentThemeId, currentDifficulty)
self:SwitchState(UiState.Detail)
end
--endregion
--region 3D模型
function XUiMultiDimMain:InitSceneRoot()
local root = self.UiModelGo.transform
self.PanelModel = root:FindTransform("PanelModel")
self.SceneAnimEnable = root:FindTransform("AnimEnable")
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelModel, self.Name, nil, true)
end
function XUiMultiDimMain:RefreshModel()
-- 模型根据主题去加载
local modelId = XDataCenter.MultiDimManager.GetThemeModelId(self.CurrentThemeId)
local modelScale = XMultiDimConfig.GetThemeModelScale(self.CurrentThemeId)
self.RoleModelPanel:UpdateBossModel(modelId, XModelManager.MODEL_UINAME.XUiMultiDimMain, nil, function(model)
model.transform.localScale = CS.UnityEngine.Vector3(modelScale, modelScale, modelScale)
end)
self.RoleModelPanel:ShowRoleModel()
end
--endregion
function XUiMultiDimMain:InitView()
-- 活动名称
self.TxtTitleName.text = XDataCenter.MultiDimManager.GetActivityName()
-- 多人副本开启时间
self.MultiTxtTime.text = XDataCenter.MultiDimManager.GetTeamFubenOpenTimeText()
-- 天赋技能
local isUnlock = XDataCenter.MultiDimManager.CheckTalentIsOpen()
self.BtnBuff:SetButtonState(isUnlock and XUiButtonState.Normal or XUiButtonState.Disable)
-- 关卡详情界面
self.UiMultiDimMainDetail = XUiMultiDimMainDetail.New(self.PanelDetail, self)
self.GameObjectGroup = {
[UiState.Main] = {
self.PanelMain.gameObject,
self.UiModelGo.transform:FindTransform("UiCamFarMain").gameObject,
self.UiModelGo.transform:FindTransform("UiCamNearMain").gameObject,
},
[UiState.Detail] = {
self.PanelDetail.gameObject,
self.UiModelGo.transform:FindTransform("UiCamFarPanelMatch").gameObject,
self.UiModelGo.transform:FindTransform("UiCamNearPanelMatch").gameObject,
},
}
end
function XUiMultiDimMain:SwitchState(state)
self.UiState = state
for _, v in pairs(self.GameObjectGroup) do
for _, go in pairs(v) do
go:SetActiveEx(false)
end
end
for _, go in pairs(self.GameObjectGroup[state]) do
go:SetActiveEx(true)
end
end
function XUiMultiDimMain:OpenOnceThemeUnlockDialog()
-- 当天赋满足配置的开启condition后 且位于活动主面板时,弹出一次性弹窗
local isUnlock, desc = XDataCenter.MultiDimManager.CheckTalentIsOpen()
local isOpenOnceDialog = XDataCenter.MultiDimManager.CheckThemeOpenOnceDialog()
if isUnlock and not isOpenOnceDialog then
XLuaUiManager.Open("UiMultiDimTalentOpenTip")
end
end
--region 主题相关
function XUiMultiDimMain:InitThemeView()
self:InitThemeBtnGroup()
end
function XUiMultiDimMain:InitThemeBtnGroup()
self.BtnTab.gameObject:SetActiveEx(false)
self.ThemeBtnInfo = {}
local themeIds = XDataCenter.MultiDimManager.GetThemeAllId()
for index, id in pairs(themeIds) do
local go = XUiHelper.Instantiate(self.BtnTab, self.PanelTab.transform)
local btn = go:GetComponent("XUiButton")
btn.gameObject:SetActiveEx(true)
-- 主题名称
local themeName = XDataCenter.MultiDimManager.GetThemeNameById(id)
btn:SetNameByGroup(0, themeName)
-- 多维积分 默认显示暂无积分
btn:ActiveTextByGroup(2, false)
btn:ActiveTextByGroup(4, true)
-- 开启时间
local startText = XDataCenter.MultiDimManager.GetThemeStartTimeText(id)
btn:SetNameByGroup(3, XUiHelper.ConvertLineBreakSymbol(startText))
-- 添加红点
self.ThemeBtnRad[id] = XRedPointManager.AddRedPointEvent(btn, function(_, count)
btn:ShowReddot(count >= 0)
end, self, { XRedPointConditions.Types.CONDITION_MULTI_DIM_FIRST_REWARD }, id, false)
self.ThemeBtnInfo[index] = { Id = id, Button = btn }
end
end
function XUiMultiDimMain:OnClickTabCallBack(tabIndex)
if self.CurrentThemeSelect and self.CurrentThemeSelect == tabIndex then
return
end
self.CurrentThemeSelect = tabIndex
local info = self.ThemeBtnInfo[tabIndex]
self.CurrentThemeId = info.Id
self:RefreshModel()
self:RefreshThemeInfo(self.CurrentThemeId)
self:RefreshTeamBtn()
self:RefreshSingleBtn()
end
function XUiMultiDimMain:RefreshThemeBtnInfo()
local tabGroup = {}
for index, info in pairs(self.ThemeBtnInfo) do
-- 是否开启
local isThemeOpen = XDataCenter.MultiDimManager.CheckThemeIsOpen(info.Id)
info.Button:SetButtonState(isThemeOpen and XUiButtonState.Normal or XUiButtonState.Disable)
-- 每日首通
local isFirstPassOpen = XDataCenter.MultiDimManager.CheckThemeIsFirstPassOpen(info.Id)
info.Button:ShowTag(isThemeOpen and isFirstPassOpen)
-- 多维积分
self:RefreshThemePoint(info)
XRedPointManager.Check(self.ThemeBtnRad[info.Id], info.Id)
-- 主题开启后才添加到Group里
if isThemeOpen then
tabGroup[index] = info.Button
else
info.Button.CallBack = function()
local themeName = XDataCenter.MultiDimManager.GetThemeNameById(info.Id)
local msg = CSXTextManagerGetText("MultiDimThemeNotOpenTip", themeName)
XUiManager.TipMsg(msg)
end
end
end
self.PanelTab:Init(tabGroup, function(tabIndex)
self:OnClickTabCallBack(tabIndex)
end)
if XTool.IsTableEmpty(tabGroup) then
return
end
-- 默认选中上一次挑战过的主题多人or单人均计算在内。无记录时首次打开定位至首个
local tempThemeId = XDataCenter.MultiDimManager.GetDefaultActivityThemeId()
local defaultIndex = 1
if XTool.IsNumberValid(tempThemeId) then
for index, info in pairs(self.ThemeBtnInfo) do
if info.Id == tempThemeId then
defaultIndex = index
end
end
end
self.PanelTab:SelectIndex(defaultIndex)
end
function XUiMultiDimMain:RefreshThemePoint(info)
local point = XDataCenter.MultiDimManager.GetFightRecordPoint(info.Id)
if XTool.IsNumberValid(point) then
info.Button:SetNameByGroup(2, point)
info.Button:ActiveTextByGroup(2, true)
info.Button:ActiveTextByGroup(4, false)
end
end
function XUiMultiDimMain:RefreshThemeInfo(id)
self.TxtNumber.text = string.format("%02d", id)
-- 主题名称
local themeName = XDataCenter.MultiDimManager.GetThemeNameById(id)
self.TxtName.text = themeName
-- 当前排名 默认值是"未挑战"
self.TxtNone.gameObject:SetActiveEx(true)
self.TxtRank.gameObject:SetActiveEx(false)
-- 获取排行信息
XDataCenter.MultiDimManager.MultiDimOpenRankRequest(XMultiDimConfig.RANK_MODEL.SINGLE_RANK, self.CurrentThemeId, function()
local isActive, text = XDataCenter.MultiDimManager.GetCurrentRankMsg(XMultiDimConfig.RANK_MODEL.SINGLE_RANK, self.CurrentThemeId)
self.TxtRank.text = text
self.TxtNone.gameObject:SetActiveEx(not isActive)
self.TxtRank.gameObject:SetActiveEx(isActive)
end)
end
function XUiMultiDimMain:RefreshTeamBtn()
self:RefreshTeamBtnState()
-- 组队进度
local passCount, totalCount = XDataCenter.MultiDimManager.GetMultiDimTeamProgress(self.CurrentThemeId)
self.BtnTeamFight:SetNameByGroup(1, string.format("%d/%d", passCount, totalCount))
-- 组队红点
XRedPointManager.Check(self.TeamFightRad, self.CurrentThemeId)
-- 单人进度
local singlePassCount = XDataCenter.MultiDimManager.GetMultiSinglePassStageCount(self.CurrentThemeId)
local totalSingleStageCount = #XMultiDimConfig.GetMultiSingleStageListByThemeId(self.CurrentThemeId)
local singleProgress = string.format("%d/%d", singlePassCount, totalSingleStageCount)
self.BtnSingleFight:SetNameByGroup(1, singleProgress)
end
function XUiMultiDimMain:RefreshTeamBtnState()
local isTeamOpen = XDataCenter.MultiDimManager.CheckTeamIsOpen(false)
self.BtnTeamFight:ShowTag(isTeamOpen)
self.BtnTeamFight:SetButtonState(isTeamOpen and XUiButtonState.Normal or XUiButtonState.Disable)
end
function XUiMultiDimMain:RefreshSingleBtn()
end
--endregion
--region 红点
-- 任务红点
function XUiMultiDimMain:RefreshTaskRedPoint()
local isShowRed = XDataCenter.MultiDimManager.CheckLimitTaskGroup()
self.BtnTask:ShowReddot(isShowRed)
end
function XUiMultiDimMain:RefreshThemeRedPoint()
XRedPointManager.Check(self.ThemeBtnRad[self.CurrentThemeId], self.CurrentThemeId)
XRedPointManager.Check(self.TeamFightRad, self.CurrentThemeId)
end
function XUiMultiDimMain:TeamFightRedPoint(count)
if self.BtnTeamFight then
self.BtnTeamFight:ShowReddot(count >= 0)
end
end
--endregion
--region 剩余时间
function XUiMultiDimMain:StartTime()
if self.Timer then
self:StopTime()
end
self:UpdateTime()
self.Timer = XScheduleManager.ScheduleForever(function()
self:UpdateTime()
end, XScheduleManager.SECOND)
end
function XUiMultiDimMain:UpdateTime()
if XTool.UObjIsNil(self.TxtTime) then
self:StopTime()
return
end
local endTime = XDataCenter.MultiDimManager.GetEndTime()
local now = XTime.GetServerNowTimestamp()
if now >= endTime then
self:StopTime()
XDataCenter.MultiDimManager.HandleActivityEndTime()
return
end
local timeText = XUiHelper.GetTime(endTime - now, XUiHelper.TimeFormatType.ACTIVITY)
self.TxtTime.text = timeText
-- 刷新多人副本开启状态
self:RefreshTeamBtnState()
end
function XUiMultiDimMain:StopTime()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end
--endregion
return XUiMultiDimMain