PGRData/Script/matrix/xui/xuirpgmakergame/main/XUiRpgMakerGameMain.lua

318 lines
No EOL
11 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 XUiRpgMakerGameStages = require("XUi/XUiRpgMakerGame/Main/XUiRpgMakerGameStages")
local XUiRpgMakerGameTabBtn = require("XUi/XUiRpgMakerGame/Main/XUiRpgMakerGameTabBtn")
local XUiPanelTitle = require("XUi/XUiRpgMakerGame/Main/XUiPanelTitle")
local CSUnityEngineObjectInstantiate = CS.UnityEngine.Object.Instantiate
--功能主界面
local XUiRpgMakerGameMain = XLuaUiManager.Register(XLuaUi, "UiRpgMakerGameMain")
function XUiRpgMakerGameMain:OnAwake()
self.NewStageId = 0 --最近解锁的关卡
self:InitObj()
self:UpdateCurChapterGroupId()
XUiHelper.NewPanelActivityAsset({XDataCenter.ItemManager.ItemId.RpgMakerGameHintCoin}, self.PanelSpecialTool)
self:AutoAddListener()
self:InitTabGroup()
end
function XUiRpgMakerGameMain:OnStart()
local defaultButtonGroupIndex = self:GetDefaultButtonGroupIndex()
self:UpdateTabSelect(defaultButtonGroupIndex, self.ChapterIdList)
self:InitTimes()
end
function XUiRpgMakerGameMain:OnEnable()
XUiRpgMakerGameMain.Super.OnEnable(self)
self:UpdateNewStageId()
self:Refresh()
end
function XUiRpgMakerGameMain:InitObj()
self.CurShowBgEffect = nil
local chapterGroupIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterGroupIdList()
local bgEffect
for i, chapterGroupId in ipairs(chapterGroupIdList) do
bgEffect = XUiHelper.TryGetComponent(self.Transform, "FullScreenBackground/BgEffect0" .. i)
self["BgEffect" .. chapterGroupId] = bgEffect
if bgEffect then
bgEffect.gameObject:SetActiveEx(false)
end
end
end
--更新当前选择的第几期章节
function XUiRpgMakerGameMain:UpdateCurChapterGroupId(chapterGroupId)
self.CurChapterGroupId = chapterGroupId or XDataCenter.RpgMakerGameManager.GetDefaultChapterGroupId()
XDataCenter.RpgMakerGameManager.SetCurChapterGroupId(self.CurChapterGroupId)
if not self.CurChapterGroupId then
return
end
local bgEffect = self["BgEffect" .. self.CurChapterGroupId]
if bgEffect then
bgEffect.gameObject:SetActiveEx(true)
if self.CurShowBgEffect then
self.CurShowBgEffect.gameObject:SetActiveEx(false)
end
self.CurShowBgEffect = bgEffect
else
XLog.Error("切换背景特效错误chapterGroupId", self.CurChapterGroupId)
end
end
function XUiRpgMakerGameMain:UpdateNewStageId()
local chapterIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterIdList(XDataCenter.RpgMakerGameManager.GetCurChapterGroupId())
local chapterId = chapterIdList[self.TabGroupIndex]
local allStageIdList = XRpgMakerGameConfigs.GetRpgMakerGameStageIdList(chapterId)
for _, stageId in ipairs(allStageIdList) do
if not XDataCenter.RpgMakerGameManager.IsStageClear(stageId) then
self.NewStageId = stageId
return
end
end
self.NewStageId = 0
end
function XUiRpgMakerGameMain:InitTimes()
-- 设置自动关闭和倒计时
self:SetAutoCloseInfo(XDataCenter.RpgMakerGameManager.GetActivityEndTime(), function(isClose)
if isClose then
XDataCenter.RpgMakerGameManager.CheckActivityIsOpen()
return
end
self:RefreshActivityTime()
self:UpdateActiveRedPoint()
end, nil, 0)
end
function XUiRpgMakerGameMain:RefreshActivityTime()
local id = XRpgMakerGameConfigs.GetDefaultActivityId()
local timeId = XRpgMakerGameConfigs.GetRpgMakerGameActivityTimeId(id)
local endTime = XFunctionManager.GetEndTimeByTimeId(timeId)
local now = XTime.GetServerNowTimestamp()
local offset = endTime - now
if self.PanelTitle then
self.PanelTitle:Refresh(XUiHelper.GetTime(offset, XUiHelper.TimeFormatType.RPG_MAKER_GAME_MAIN))
end
for _, tabBtn in ipairs(self.TabBtnTemplates) do
tabBtn:RefreshTimer()
end
end
function XUiRpgMakerGameMain:InitTabGroup()
self.TabBtns = self.TabBtns or {}
self.TabBtnTemplates = self.TabBtnTemplates or {}
self.ChapterIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterIdList(self.CurChapterGroupId)
for i, chapterId in ipairs(self.ChapterIdList) do
if not self.TabBtns[i] then
self.TabBtns[i] = i == 1 and self.BtnPlotTab or CSUnityEngineObjectInstantiate(self.BtnPlotTab, self.UiContent)
end
if not self.TabBtnTemplates[i] then
self.TabBtnTemplates[i] = XUiRpgMakerGameTabBtn.New(self.TabBtns[i], i)
end
self.TabBtnTemplates[i]:Init(chapterId)
self.TabBtnTemplates[i].GameObject:SetActiveEx(true)
end
for i = #self.ChapterIdList + 1, #self.TabBtnTemplates do
local tabBtn = self.TabBtnTemplates[i]
tabBtn.GameObject:SetActiveEx(false)
end
self.UiContentButtonGroup = self.UiContent:GetComponent("XUiButtonGroup")
self.UiContentButtonGroup:Init(self.TabBtns, function(groupIndex) self:TabGroupSkip(groupIndex) end)
end
function XUiRpgMakerGameMain:GetDefaultButtonGroupIndex()
local defaultGroupIndex = 1
local groupIndex = XDataCenter.RpgMakerGameManager.GetCurrClearButtonGroupIndex()
local chapterId
local isUnLock
if groupIndex then
chapterId = self.ChapterIdList[groupIndex]
isUnLock = XDataCenter.RpgMakerGameManager.IsChapterUnLock(chapterId)
return isUnLock and groupIndex or defaultGroupIndex
end
local allStageIdList = XRpgMakerGameConfigs.GetRpgMakerGameAllStageIdList()
for _, stageId in ipairs(allStageIdList) do
if not XDataCenter.RpgMakerGameManager.IsStageUnLock(stageId) then
chapterId = XRpgMakerGameConfigs.GetRpgMakerGameStageChapterId(stageId)
isUnLock = XDataCenter.RpgMakerGameManager.IsChapterUnLock(chapterId)
groupIndex = isUnLock and self:GetTabBtnIndex(chapterId) or defaultGroupIndex
return groupIndex
end
end
return defaultGroupIndex
end
function XUiRpgMakerGameMain:GetTabBtnIndex(chapterId)
local tabBtnTemplates = self:GetTabBtnTemplates()
for _, v in ipairs(tabBtnTemplates) do
if v:GetChapterId() == chapterId then
return v:GetTabBtnIndex()
end
end
end
function XUiRpgMakerGameMain:TabGroupSkip(groupIndex)
if self.TabGroupIndex == groupIndex then
return
end
local chapterId = self.ChapterIdList[groupIndex]
local isUnLock = XDataCenter.RpgMakerGameManager.IsChapterUnLock(chapterId)
if not isUnLock then
local timeId = XRpgMakerGameConfigs.GetRpgMakerGameChapterOpenTimeId(chapterId)
local time = XFunctionManager.GetStartTimeByTimeId(timeId)
local serverTimestamp = XTime.GetServerNowTimestamp()
local str = CS.XTextManager.GetText("ScheOpenCountdown", XUiHelper.GetTime(time - serverTimestamp, XUiHelper.TimeFormatType.RPG_MAKER_GAME))
XUiManager.TipMsg(str)
if self.TabGroupIndex then
self:UpdateTabSelect(self.TabGroupIndex, self.ChapterIdList)
end
return
end
self:PlayAnimation("QieHuan")
self.TabGroupIndex = groupIndex
XDataCenter.RpgMakerGameManager.SetCurrTabGroupIndexByUiMainTemp(groupIndex)
XDataCenter.RpgMakerGameManager.SetChapterIdOpen(self.ChapterIdList[self.TabGroupIndex])
self:UpdateNewStageId()
self:Refresh()
end
function XUiRpgMakerGameMain:AutoAddListener()
self:RegisterClickEvent(self.SceneBtnBack, self.Close)
self:RegisterClickEvent(self.SceneBtnMainUi, self.OnBtnMainUiClick)
self:RegisterClickEvent(self.BtnTask, self.OnBtnTaskClick)
self:RegisterClickEvent(self.BtnActive, self.OnBtnActiveClick)
self:UpdateHelpBtn()
end
function XUiRpgMakerGameMain:UpdateHelpBtn()
self:BindHelpBtn(self.BtnActDesc, XRpgMakerGameConfigs.GetChapterGroupHelpKey(self.CurChapterGroupId))
end
--系列活动按钮
function XUiRpgMakerGameMain:OnBtnActiveClick()
local closeCb = function(chapterGroupId)
self:UpdateCurChapterGroupId(chapterGroupId)
self:UpdateHelpBtn()
self:InitTabGroup()
self:UpdateTabIndex()
self:UpdateNewStageId()
self:Refresh()
end
XLuaUiManager.Open("UiFubenRpgMakerGameTanChuang", closeCb, self.CurChapterGroupId)
end
function XUiRpgMakerGameMain:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiRpgMakerGameMain:OnBtnTaskClick()
XLuaUiManager.Open("UiRpgMakerGamePlayTask")
end
function XUiRpgMakerGameMain:Refresh()
self:UpdateStagesMap()
self:UpdateTabBtnTemplates()
self:UpdateBtnTask()
self:UpdateBg()
self:UpdateTitle()
end
function XUiRpgMakerGameMain:UpdateTitle()
local prefabPath = XRpgMakerGameConfigs.GetChapterGroupTitlePrefab(self.CurChapterGroupId)
local ui = self.PanelMainlineChapter.gameObject:LoadPrefab(prefabPath)
self.PanelTitle = XUiPanelTitle.New(ui)
self:RefreshActivityTime()
end
function XUiRpgMakerGameMain:UpdateBg()
local bg = XRpgMakerGameConfigs.GetChapterGroupBg(self.CurChapterGroupId)
self.RawImageBg:SetRawImage(bg)
end
function XUiRpgMakerGameMain:UpdateBtnTask()
local isShowTask = XRpgMakerGameConfigs.GetChapterGroupIsShowTask(self.CurChapterGroupId)
self.BtnTask.gameObject:SetActiveEx(isShowTask)
self:UpdateTaskRedPoint()
end
function XUiRpgMakerGameMain:UpdateTaskRedPoint()
local isShowRedPoint = XDataCenter.RpgMakerGameManager.CheckRedPoint()
self.BtnTask:ShowReddot(isShowRedPoint)
end
--更新章节组小红点
function XUiRpgMakerGameMain:UpdateActiveRedPoint()
local isShowRedPoint = XDataCenter.RpgMakerGameManager.CheckAllChapterGroupRedPoint()
self.BtnActive:ShowReddot(isShowRedPoint)
end
function XUiRpgMakerGameMain:UpdateTabIndex()
if not self.TabGroupIndex then
return
end
local chapterIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterIdList(self.CurChapterGroupId)
if self.TabGroupIndex >= #chapterIdList then
local tabIndex = #chapterIdList
self.TabGroupIndex = tabIndex
XDataCenter.RpgMakerGameManager.SetCurrTabGroupIndexByUiMainTemp(tabIndex)
end
self:UpdateTabSelect(self.TabGroupIndex, chapterIdList)
end
function XUiRpgMakerGameMain:UpdateTabSelect(tabGroupIndex, ChapterIdList)
self.UiContentButtonGroup:SelectIndex(tabGroupIndex)
-- 章节小红点
XDataCenter.RpgMakerGameManager.SetChapterIdOpen(ChapterIdList[tabGroupIndex])
end
function XUiRpgMakerGameMain:UpdateStagesMap()
if not self.TabGroupIndex then
return
end
local chapterId = self.ChapterIdList[self.TabGroupIndex]
if not chapterId then
XLog.Error(string.format("不存在的章节IdTabGroupIndex%", self.TabGroupIndex), self.ChapterIdList)
return
end
if chapterId ~= self.ChapterId then
local prefabName = XRpgMakerGameConfigs.GetRpgMakerGameChapterPrefab(chapterId)
local prefab = self.PanelChapter:LoadPrefab(prefabName)
if prefab == nil or not prefab:Exist() then
return
end
self.ChapterId = chapterId
self.CurStages = XUiRpgMakerGameStages.New(prefab, chapterId, function(stageId) self:OpenEnterDialog(stageId) end)
end
local newStageId = self:GetNewStageId()
self.CurStages:Refresh(newStageId)
end
function XUiRpgMakerGameMain:UpdateTabBtnTemplates()
for _, tabBtn in ipairs(self.TabBtnTemplates) do
tabBtn:Refresh()
end
end
function XUiRpgMakerGameMain:GetTabBtnTemplates()
return self.TabBtnTemplates
end
function XUiRpgMakerGameMain:GetNewStageId()
return self.NewStageId
end