PGRData/Script/matrix/xui/xuimemorysave/XUiMemorySave.lua

294 lines
11 KiB
Lua
Raw Normal View History

local XUiMemorySaveTreasure = require("XUi/XUiMemorySave/XUiMemorySaveTreasure")
local XUiMemorySaveStageLine = require("XUi/XUiMemorySave/XUiMemorySaveStageLine")
local XUiMemorySave = XLuaUiManager.Register(XLuaUi, "UiMemorySave")
local LINE_OBJ_LENGTH = 9 -- 关卡之间的线数量
-- 页签按钮下标
XUiMemorySave.BtnTabIndex = {
Chapter1 = 1,
Chapter2 = 2,
Chapter3 = 3,
Chapter4 = 4,
}
function XUiMemorySave:OnAwake()
self:InitUI()
self:InitCB()
end
function XUiMemorySave:OnStart()
self:InitData()
self:InitTabButton()
self:RegisterRedPointEvent()
-- 资产面板
self.PanelAsset = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.TxtChapterName.text = XDataCenter.MemorySaveManager.GetActivityName()
end
function XUiMemorySave:OnEnable()
if XDataCenter.MemorySaveManager.OnActivityEnd() then
return
end
self:OnOpenUi()
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_CHAPTER_REWARD, self.RedPointCheck, self)
end
function XUiMemorySave:OnDisable()
XDataCenter.MemorySaveManager.UpdateSelectIndex(self.CurrentSelect)
self.StageLinePanel:UpdateScrollPos()
XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_CHAPTER_REWARD, self.RedPointCheck, self)
end
function XUiMemorySave:OnGetEvents()
return {
XEventId.EVENT_MEMORYSAVE_ACTIVITY_END,
}
end
function XUiMemorySave:OnNotify(evt, ...)
if evt == XEventId.EVENT_MEMORYSAVE_ACTIVITY_END then
XDataCenter.MemorySaveManager.OnActivityEnd()
end
end
--region Init
function XUiMemorySave:InitUI()
--region find component
self.GridCommon.gameObject:SetActiveEx(false)
self.BtnChapter.gameObject:SetActiveEx(false)
self.StageLinePanel = XUiMemorySaveStageLine.New(self.PanelStageLine, {
HideDetailCB = handler(self, self.OnHideDetailCallBack),
ShowDetailCB = handler(self, self.OnShowDetailCallBack),
})
--endregion
end
function XUiMemorySave:InitCB()
--region 初始化普通按钮
self.SceneBtnBack.CallBack = function () self:OnClickBtnBack() end
self.SceneBtnMainUi.CallBack = function () self:OnClickBtnMainUi() end
self.BtnCloseDetail.CallBack = function () self:OnHideDetailCallBack() end
self.BtnTanchuangClose.CallBack = function () self:OnBtnTreasureBgClick() end
self:RegisterClickEvent(self.BtnTreasureBg, self.OnBtnTreasureBgClick) -- 适配旧版按钮
--endregion
end
function XUiMemorySave:InitData()
self.ChapterIds = XDataCenter.MemorySaveManager.GetActivityChapterIds()
self.CurrentSelect = XDataCenter.MemorySaveManager.GetSelectIndex() or self.BtnTabIndex.Chapter1
end
-- 注册红点
function XUiMemorySave:RegisterRedPointEvent()
for index, chapterId in ipairs(self.ChapterIds) do
self["ChapterRedDotId"..index] = XRedPointManager.AddRedPointEvent(
self["BtnChapter"..index], -- node
function (_, count) -- callback
self["BtnChapter"..index]:ShowReddot(count >= 0)
end,
self, {
XRedPointConditions.Types.CONDITION_MEMORYSAVE_CHAPTER_REWARD,
XRedPointConditions.Types.CONDITION_MEMORYSAVE_CHAPTER_REWARD_NEW_CHAPTER,
}, chapterId, false)
end
self.RewardRedDotId = XRedPointManager.AddRedPointEvent(self.ImgRedProgress, self.OnCheckRewardRedDot,self , {
XRedPointConditions.Types.CONDITION_MEMORYSAVE_CHAPTER_REWARD
}, self:GetCurrentChapterId(), false)
end
-- 初始化页签按钮
function XUiMemorySave:InitTabButton()
local tabGroup = {}
for idx, chapterId in ipairs(self.ChapterIds) do
local btnChapter = CS.UnityEngine.Object.Instantiate(self.BtnChapter)
btnChapter.transform:SetParent(self.PanelChapter.transform, false)
btnChapter.gameObject:SetActiveEx(true)
self["BtnChapter"..idx] = btnChapter
table.insert(tabGroup, btnChapter)
end
self.PanelChapter:Init(tabGroup, function (tabIndex)
self:OnClickTabGroup(tabIndex)
end)
end
-- 检查是否生成红点
function XUiMemorySave:RedPointCheck()
for index, chapterId in ipairs(self.ChapterIds) do
XRedPointManager.Check(self["ChapterRedDotId"..index], chapterId)
end
XRedPointManager.Check(self.RewardRedDotId, self:GetCurrentChapterId())
end
function XUiMemorySave:InitRewardList()
self.GridMultipleWeeksTask.gameObject:SetActiveEx(false)
self.GridTreasureGrade.gameObject:SetActiveEx(false)
local chapterId = self.ChapterIds[self.CurrentSelect]
local baseItem = self.GridTreasureGrade
local rewardIds = XMemorySaveConfig.GetChapterRewardIds(chapterId)
-- 创建奖励数量个item
if not self.RewardGrids or #self.RewardGrids ~= #rewardIds then
self.RewardGrids = {}
for _, rewardId in ipairs(rewardIds) do
local item = CS.UnityEngine.Object.Instantiate(baseItem)
local grid = XUiMemorySaveTreasure.New(self, item, XDataCenter.FubenManager.StageType.MemorySave)
grid.Transform:SetParent(self.PanelGradeContent, false)
table.insert(self.RewardGrids, grid)
end
end
for idx, rewardId in ipairs(rewardIds) do
local pass = XDataCenter.MemorySaveManager.GetChapterPassed(chapterId)
local total = XMemorySaveConfig.GetChapterRequirePass(chapterId, idx)
self.RewardGrids[idx]:UpdateGradeGrid(pass, total, rewardId, chapterId, idx)
self.RewardGrids[idx]:InitTreasureList()
self.RewardGrids[idx].GameObject:SetActiveEx(true)
end
end
--endregion
--region CallBack
function XUiMemorySave:OnClickBtnReward()
self:OnHideDetailCallBack()
self:InitRewardList()
self.PanelTreasure.gameObject:SetActiveEx(true)
self:PlayAnimation("TreasureEnable")
end
function XUiMemorySave:OnBtnTreasureBgClick()
self:PlayAnimation("TreasureDisable", handler(self, function ()
self.PanelTreasure.gameObject:SetActiveEx(false)
end))
end
function XUiMemorySave:OnClickBtnBack()
self:Close()
end
function XUiMemorySave:OnClickBtnMainUi()
XLuaUiManager.RunMain()
end
function XUiMemorySave:OnClickTabGroup(tabIndex)
if tabIndex == self.CurrentSelect then
return
end
self:ShowUIByTabIndex(tabIndex)
end
function XUiMemorySave:OnOpenUi()
self.BtnCloseDetail.gameObject:SetActiveEx(self.IsShowDetail)
self.PanelTreasure.gameObject:SetActiveEx(false)
self.ImgRedProgress.gameObject:SetActiveEx(false)
-- 显示活动剩余时间
local now = XTime.GetServerNowTimestamp()
local eTime = XDataCenter.MemorySaveManager.GetActivityEndTime()
self.TxtDay.text = XUiHelper.GetTime(eTime - now, XUiHelper.TimeFormatType.ACTIVITY)
-- 更新按钮的名称
for idx, chapterId in ipairs(self.ChapterIds) do
local btn = self["BtnChapter"..idx]
btn:SetDisable(not XDataCenter.MemorySaveManager.IsChapterOpen(chapterId))
local btnName = XMemorySaveConfig.GetChapterBtnName(chapterId)
btn:SetNameByGroup(0, btnName)
btn:SetNameByGroup(1, XMemorySaveConfig.GetChapterName(chapterId))
btn:SetRawImage(XDataCenter.MemorySaveManager.GetChapterBtnBg(chapterId))
btn:SetSprite(XMemorySaveConfig.GetChapterBtnIcon(chapterId))
end
-- 界面刷新
self.PanelChapter:SelectIndex(self.CurrentSelect)
-- 回调中有判断tabIndex与self.CurrentSelect所以初始化时需要手动执行一次
self:ShowUIByTabIndex(self.CurrentSelect)
end
function XUiMemorySave:OnShowDetailCallBack(stage)
self.PanelAsset.GameObject:SetActiveEx(false)
self.BtnCloseDetail.gameObject:SetActiveEx(true)
self.Stage = stage
self.IsShowDetail = true
if not self.Stage then
XLog.Error("XUiMemorySave:OnShowDetailCallBack: 未能找到对应的Stage")
end
self:OpenOneChildUi("UiMemorySaveDetail", self)
end
function XUiMemorySave:OnHideDetailCallBack()
self.PanelAsset.GameObject:SetActiveEx(true)
self.BtnCloseDetail.gameObject:SetActiveEx(false)
self.StageLinePanel:SetPanelStageListMovementType()
self.StageLinePanel:OnUpdateSelectStage()
local childUi = self:FindChildUiObj("UiMemorySaveDetail")
if childUi then
childUi:OnBtnCloseClick()
self.IsShowDetail = false
end
end
function XUiMemorySave:OnCheckRewardRedDot(count)
self.ImgRedProgress.gameObject:SetActiveEx(count >= 0)
end
--endregion
function XUiMemorySave:ShowUIByTabIndex(tabIndex)
self:PlayAnimation("QieHuan")
local chapterId = self.ChapterIds[tabIndex]
if not XDataCenter.MemorySaveManager.IsChapterOpen(chapterId) then
local msgTips = CsXTextManagerGetText("MemorySaveStageNotOpen", XMemorySaveConfig.GetChapterOpenTime(chapterId))
XUiManager.TipMsg(msgTips)
return
end
-- 切换页签存储一下位置属性放在CurrentSelect更新之前
self.StageLinePanel:UpdateScrollPos()
self.CurrentSelect = tabIndex
local rewardIds = XMemorySaveConfig.GetChapterRewardIds(self.ChapterIds[self.CurrentSelect])
local rewardList = XRewardManager.GetRewardList(rewardIds[1])
local reward = rewardList and rewardList[1] or {}
if not self.GirdCommonReward then
local ui = CS.UnityEngine.Object.Instantiate(self.GridCommon)
self.GirdCommonReward = XUiGridCommon.New(self, ui)
self.GirdCommonReward.Transform:SetParent(self.PanelConsciousness, false)
self.GirdCommonReward.GameObject:SetActiveEx(true)
self.GirdCommonReward:SetClickCallback(handler(self, self.OnClickBtnReward))
--将红点显示到上层
local gridIndex = self.GirdCommonReward.Transform:GetSiblingIndex()
self.ImgRedProgress.transform:SetSiblingIndex(gridIndex)
end
self.GirdCommonReward:Refresh(reward) -- 每次Refresh都会让数量重新显示
self.GirdCommonReward:ShowCount(false)
self.RImgFestivalBg:SetRawImage(XDataCenter.MemorySaveManager.GetChapterBannerBg(chapterId))
self.StageLinePanel:Refresh(chapterId)
self:UpdateChapterProgress()
self:UpdateChapterBtnPass()
XDataCenter.MemorySaveManager.SetFirstEntryFlag(chapterId)
self:RedPointCheck()
end
function XUiMemorySave:UpdateChapterProgress()
self.TxtProgress.text = XDataCenter.MemorySaveManager.GetCurChapterProgress(self:GetCurrentChapterId())
end
function XUiMemorySave:UpdateChapterBtnPass()
for idx, chapterId in ipairs(self.ChapterIds) do
local passed = XDataCenter.MemorySaveManager.IsFinishCurChapter(chapterId)
self["BtnChapter"..idx]:SetNameByGroup(2, passed and "Cleared" or "")
end
end
--region get and set
function XUiMemorySave:GetCurrentChapterId()
return self.ChapterIds[self.CurrentSelect]
end
--endregion