PGRData/Script/matrix/xui/xuifubenextra/XUiFubenExtraChapter.lua

1024 lines
38 KiB
Lua
Raw Normal View History

local XUiGridChapter = require("XUi/XUiFubenMainLineChapter/XUiGridChapter")
local XUiGridExploreChapter = require("XUi/XUiFubenMainLineChapter/XUiGridExploreChapter")
local XUiFubenExtraChapter = XLuaUiManager.Register(XLuaUi, "UiFubenMainLineChapterFw")
function XUiFubenExtraChapter:OnAwake()
self:AddListener()
end
function XUiFubenExtraChapter:OnStart(chapter, stageId, hideDiffTog)
self.UnderBg = self.Transform:Find("SafeAreaContentPane/ImageUnder")
self.SafeAreaContentPane = self.Transform:Find("SafeAreaContentPane")
self.Camera = self.Transform:GetComponent("Canvas").worldCamera
if self.LastData then
self.Chapter = self.LastData.Chapter or chapter
self.StageId = self.LastData.StageId or stageId
self.HideDiffTog = self.LastData.HideDiffTog or hideDiffTog
self.LastData = nil
else
self.Chapter = chapter
self.StageId = stageId
self.HideDiffTog = hideDiffTog
end
self.Opened = false
self.IsOnZhouMu = false
self.GridTreasureList = {}
self.GridMultipleWeeksTaskList = {}
self.GridChapterList = {} --存的是各种Chapter的预制体实例列表
self.QuickJumpBtnList = {}
self.PanelExploreBottom = {}
self.CurChapterGrid = nil
self.CurChapterGridName = ""
self.PanelStageDetailInst = nil
self.CurDiff = self.Chapter.Difficult
self.PanelTreasure.gameObject:SetActiveEx(false)
self.ImgRedProgress.gameObject:SetActiveEx(false)
self.ExtraChapterId = self.Chapter.ChapterId
self.IsExploreMod = XDataCenter.ExtraChapterManager.CheckChapterTypeIsExplore(self.Chapter)
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfo(self.Chapter.ChapterId)
self.ChapterMainId = (chapterInfo or {}).ChapterMainId or 0
self.ZhouMuId = XFubenExtraChapterConfigs.GetZhouMuId(self.ChapterMainId)
--保存初始颜色
self.OriginalColors = {
TxtChapterNameColor = self.TxtChapterName.color, --章节名称
TxtLeftTimeTipColor = self.Text_1.color, --剩余时间描述
TxtLeftTimeColor = self.TxtLeftTime.color, --剩余时间
StarColor = self.ImageLine.color, --星星
ImageBottomColor = self.ImageBottom.color, --底部栏
TxtStarNumColor = self.TxtStarNum.color, --星星数量
TxtDescrColor = self.Txet.color, --收集进度
Triangle0Color = self.Triangle0.color, --底部栏左侧三角形
Triangle1Color = self.Triangle1.color,
Triangle2Color = self.Triangle2.color,
Triangle3Color = self.Triangle3.color,
}
-- 注册红点事件
self.RedPointId = XRedPointManager.AddRedPointEvent(self.ImgRedProgress, self.OnCheckRewards, self, { XRedPointConditions.Types.CONDITION_EXTRA_TREASURE }, self.Chapter.ChapterId, false)
self.RedPointZhouMuId = XRedPointManager.AddRedPointEvent(self.ImgRedProgress, self.OnCheckRewards, self, { XRedPointConditions.Types.CONDITION_ZHOUMU_TASK }, self.ZhouMuId, false)
XRedPointManager.AddRedPointEvent(self.BtnExItem, self.OnCheckExploreItemNews, self, { XRedPointConditions.Types.CONDITION_EXTRA_EXPLORE_ITEM_GET }, self.ExtraChapterId)
-- 注册stage事件
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_STAGE_SYNC, self.OnSyncStage, self)
XEventManager.AddEventListener(XEventId.EVENT_AUTO_FIGHT_START, self.OnAutoFightStart, self)
-- 难度toggle
if not self.HideDiffTog then
self.IsShowDifficultPanel = false
self:UpdateDifficultToggles()
else
self.PanelTopDifficult.gameObject:SetActiveEx(false)
end
self:InitPanelBottom()
end
function XUiFubenExtraChapter:OnEnable()
-- 是否显示周目挑战按钮
self.ZhouMuNumber = XDataCenter.FubenZhouMuManager.GetZhouMuNumber(self.ZhouMuId)
self.PanelMultipleWeeksInfo.gameObject:SetActiveEx(self.ZhouMuNumber ~= 0)
if self.GridChapterList then
for _, v in pairs(self.GridChapterList) do
v:OnEnable()
end
end
self:UpdateDifficultToggles()
self:UpdateCurChapter(self.Chapter)
self:GoToLastPassStage()
end
function XUiFubenExtraChapter:OnDisable()
if self.GridChapterList then
for _, v in pairs(self.GridChapterList) do
v:OnDisable()
end
end
if not self.IsExploreMod then
local childUi = self:GetCurDetailChildUi()
self:CloseChildUi(childUi)
self:OnCloseStageDetail()
end
end
function XUiFubenExtraChapter:OnDestroy()
self:DestroyActivityTimer()
XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_STAGE_SYNC, self.OnSyncStage, self)
XEventManager.RemoveEventListener(XEventId.EVENT_AUTO_FIGHT_START, self.OnAutoFightStart, self)
end
function XUiFubenExtraChapter:InitPanelBottom()
self.PanelExploreBottom.Transform = self.PanelExploreBottomObj.transform
self.PanelExploreBottom.GameObject = self.PanelExploreBottomObj.gameObject
XTool.InitUiObject(self.PanelExploreBottom)
self.PanelExploreBottom.BtnNormalJump.gameObject:SetActiveEx(false)
self.PanelExploreBottom.BtnHardlJump.gameObject:SetActiveEx(false)
end
function XUiFubenExtraChapter:GoToLastPassStage()
if self.CurChapterGrid then
if self.IsExploreMod then
if self.IsCanGoNearestStage or not self.Opened then
self.CurChapterGrid:GoToNearestStage(self.LastStageIndex[self.CurDiff])
self.Opened = true
self.IsCanGoNearestStage = false
end
else
if not self.Opened then
local lastPassStageId = XDataCenter.ExtraChapterManager.GetLastPassStage(self.Chapter.ChapterId)
self.CurChapterGrid:GoToStage(lastPassStageId)
self.Opened = true
end
end
end
end
function XUiFubenExtraChapter:StageLevelChangeAutoMove()
if self.CurChapterGrid then
if self.IsExploreMod then
self.CurChapterGrid:GoToNearestStage(self.LastStageIndex[self.CurDiff])
else
local lastPassStageId = XDataCenter.ExtraChapterManager.GetLastPassStage(self.Chapter.ChapterId)
self.CurChapterGrid:GoToStage(lastPassStageId)
end
end
end
-- 打开关卡详情
function XUiFubenExtraChapter:OpenStage(stageId, needRefreshChapter)
local orderId
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
orderId = stageInfo.OrderId
self.CurDiff = stageInfo.Difficult
XDataCenter.ExtraChapterManager.SetCurDifficult(self.CurDiff)
self:UpdateDifficultToggles()
if needRefreshChapter then
local chapter = self:GetChapterCfgByStageId(stageId)
self:UpdateCurChapter(chapter)
end
self.CurChapterGrid:ClickStageGridByIndex(orderId)
end
function XUiFubenExtraChapter:EnterFight(stage)
if not XDataCenter.FubenManager.CheckPreFight(stage) then
return
end
if XTool.USENEWBATTLEROOM then
XLuaUiManager.Open("UiBattleRoleRoom", stage.StageId)
else
XLuaUiManager.Open("UiNewRoomSingle", stage.StageId)
end
end
-- 是否显示红点
function XUiFubenExtraChapter:OnCheckRewards(count, chapterId)
if self.IsOnZhouMu then
if self.ImgRedProgress and chapterId == self.ZhouMuId then
self.ImgRedProgress.gameObject:SetActiveEx(count >= 0)
end
else
if self.ImgRedProgress and chapterId == self.Chapter.ChapterId then
self.ImgRedProgress.gameObject:SetActiveEx(count >= 0)
end
end
end
function XUiFubenExtraChapter:AddListener()
self:RegisterClickEvent(self.BtnTreasureBg, self.OnBtnTreasureBgClick)
self:RegisterClickEvent(self.Scrollbar, self.OnScrollbarClick)
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
self:RegisterClickEvent(self.BtnTreasure, self.OnBtnTreasureClick)
self:RegisterClickEvent(self.BtnCloseDifficult, self.OnBtnCloseDifficultClick)
self:RegisterClickEvent(self.BtnCloseDetail, self.OnBtnCloseDetailClick)
self.BtnExItem.CallBack = function()
self:OnBtnExItemClick()
end
self.BtnNormal.CallBack = function()
self:OnBtnNormalClick(true)
end
self.BtnHard.CallBack = function()
self:OnBtnHardClick(true)
end
self.BtnSwitch1MultipleWeeks.CallBack = function()
self:OnBtnSwitch1MultipleWeeksClick()
end
self.BtnSwitch2Normal.CallBack = function()
self:OnBtnSwitch2NormalClidk()
end
end
-- auto
function XUiFubenExtraChapter:OnBtnCloseDetailClick()
self:OnCloseStageDetail()
end
function XUiFubenExtraChapter:OnBtnCloseDifficultClick()
self:UpdateDifficultToggles()
end
function XUiFubenExtraChapter:OnScrollbarClick()
end
function XUiFubenExtraChapter:OnBtnExItemClick()
XLuaUiManager.Open("UiFubenExItemTip", self)
end
function XUiFubenExtraChapter:OnBtnBackClick()
if self:CloseStageDetail() then
return
end
self:Close()
end
function XUiFubenExtraChapter:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
--[[function XUiFubenExtraChapter:OpenDifficultPanel()
end]]
function XUiFubenExtraChapter:OnBtnNormalClick(IsAutoMove)
if self.IsShowDifficultPanel then
if self.CurDiff ~= XDataCenter.FubenManager.DifficultNormal then
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfoForOrderId(XDataCenter.FubenManager.DifficultNormal, self.Chapter.OrderId)
if not (chapterInfo and chapterInfo.Unlock) then
XUiManager.TipMsg(XDataCenter.FubenManager.GetFubenOpenTips(chapterInfo.FirstStage), XUiManager.UiTipType.Wrong)
return false
end
self.CurDiff = XDataCenter.FubenManager.DifficultNormal
XDataCenter.ExtraChapterManager.SetCurDifficult(self.CurDiff)
self:RefreshForChangeDiff(IsAutoMove)
end
self:UpdateDifficultToggles()
else
self:UpdateDifficultToggles(true)
end
return true
end
function XUiFubenExtraChapter:OnBtnHardClick(IsAutoMove)
if self.IsShowDifficultPanel then
if self.CurDiff ~= XDataCenter.FubenManager.DifficultHard then
-- 检查困难开启
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.FubenDifficulty) then
return false
end
-- 检查主线副本活动
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfoForOrderId(XDataCenter.FubenManager.DifficultHard, self.Chapter.OrderId)
if chapterInfo.IsActivity then
local chapterId = XDataCenter.ExtraChapterManager.GetChapterIdByChapterExtraId(chapterInfo.ChapterMainId, XDataCenter.FubenManager.DifficultHard)
local ret, desc = XDataCenter.ExtraChapterManager.CheckActivityCondition(chapterId)
if not ret then
XUiManager.TipMsg(desc, XUiManager.UiTipType.Wrong)
return false
end
end
-- 检查困难这个章节解锁
if not chapterInfo or not chapterInfo.IsOpen then
local chapterId = XDataCenter.ExtraChapterManager.GetChapterIdByChapterExtraId(chapterInfo.ChapterMainId, XDataCenter.FubenManager.DifficultHard)
local ret, desc = XDataCenter.ExtraChapterManager.CheckOpenCondition(chapterId)
if not ret then
XUiManager.TipError(desc)
return false
end
local tipMsg = XDataCenter.FubenManager.GetFubenOpenTips(chapterInfo.FirstStage)
XUiManager.TipMsg(tipMsg)
return false
end
self.CurDiff = XDataCenter.FubenManager.DifficultHard
XDataCenter.ExtraChapterManager.SetCurDifficult(self.CurDiff)
self:RefreshForChangeDiff(IsAutoMove)
end
self:UpdateDifficultToggles()
else
self:UpdateDifficultToggles(true)
end
return true
end
function XUiFubenExtraChapter:UpdateDifficultToggles(showAll)
if showAll then
self:SetBtnTogleActive(true, true, true)
self.BtnCloseDifficult.gameObject:SetActiveEx(true)
else
if self.CurDiff == XDataCenter.FubenManager.DifficultNormal then
self:SetBtnTogleActive(true, false, false)
self.BtnNormal.transform:SetAsFirstSibling()
elseif self.CurDiff == XDataCenter.FubenManager.DifficultHard then
self:SetBtnTogleActive(false, true, false)
self.BtnHard.transform:SetAsFirstSibling()
else
self:SetBtnTogleActive(false, false, true)
end
self.BtnCloseDifficult.gameObject:SetActiveEx(false)
end
self.IsShowDifficultPanel = showAll
--progress
local pageDatas = XDataCenter.ExtraChapterManager.GetChapterExtraCfgs(self.CurDiff)
local chapterIds = {}
for _, v in pairs(pageDatas) do
if v.OrderId == self.Chapter.OrderId then
chapterIds = v.ChapterId
break
end
end
if chapterIds then
self.TxtNormalProgress.text = XDataCenter.ExtraChapterManager.GetProgressByChapterId(chapterIds[1])
self.TxtHardProgress.text = XDataCenter.ExtraChapterManager.GetProgressByChapterId(chapterIds[2])
end
-- 抢先体验活动倒计时
self:UpdateActivityTime()
end
function XUiFubenExtraChapter:UpdateChapterTxt()
local extraTitle = self.Chapter.StageTitle
self.TxtChapter.text = (extraTitle or "")
self.TxtChapterName.text = self.Chapter.ChapterEn
end
function XUiFubenExtraChapter:SetBtnTogleActive(isNormal, isHard)
self.BtnNormal.gameObject:SetActiveEx(isNormal)
self.BtnHard.gameObject:SetActiveEx(isHard)
if isHard then
local hardOpen = XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.FubenDifficulty)
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfoForOrderId(XDataCenter.FubenManager.DifficultHard, self.Chapter.OrderId)
hardOpen = hardOpen and chapterInfo and chapterInfo.IsOpen
self.PanelHardOn.gameObject:SetActiveEx(hardOpen)
self.PanelHardOff.gameObject:SetActiveEx(not hardOpen)
end
end
function XUiFubenExtraChapter:RefreshForChangeDiff(IsAutoMove)
if XTool.UObjIsNil(self.GameObject) then return end
XDataCenter.ExtraChapterManager.SetCurDifficult(self.CurDiff)
local chapterList = XDataCenter.ExtraChapterManager.GetChapterList(self.CurDiff)
local chapter = XDataCenter.ExtraChapterManager.GetChapterDetailsCfg(chapterList[self.Chapter.OrderId])
self:UpdateCurChapter(chapter)
if IsAutoMove then
self:StageLevelChangeAutoMove()
end
self:PlayAnimation("AnimEnable2")
end
function XUiFubenExtraChapter:SetPanelBottomActive(isActive)
local panelParent = self.IsExploreMod and self.ExPanel or self.NorPanel
self.PanelBottom.gameObject:SetActiveEx(isActive)
self.PanelExploreBottom.GameObject:SetActiveEx(isActive and self.IsExploreMod and not self.IsOnZhouMu)
self.PanelBottom.transform:SetParent(panelParent, false)
self.PanelBottom.transform.localPosition = CS.UnityEngine.Vector3.zero
self.FubenEx.gameObject:SetActiveEx(self.IsExploreMod)
end
function XUiFubenExtraChapter:UpdateCurChapter(chapter)
if self.IsOnZhouMu then
-- 切换到周目模式
self:OnBtnSwitch1MultipleWeeksClick()
return
end
if not chapter then
return
end
self.Chapter = chapter
self.IsExploreMod = XDataCenter.ExtraChapterManager.CheckChapterTypeIsExplore(self.Chapter)
self.ExtraChapterId = self.Chapter.ChapterId
for _, v in pairs(self.GridChapterList) do
v:Hide()
end
local data = {
Chapter = self.Chapter,
HideStageCb = handler(self, self.HideStageDetail),
ShowStageCb = handler(self, self.ShowStageDetail),
}
data.StageList = self.Chapter.StageId
local chapterId = self.Chapter.ChapterId
local grid = self.CurChapterGrid
local prefabName = self.Chapter.PrefabName
if self.CurChapterGridName ~= prefabName then
local gameObject = self.PanelChapter:LoadPrefab(prefabName)
if gameObject == nil or not gameObject:Exist() then
return
end
if self.IsExploreMod then
grid = XUiGridExploreChapter.New(self, gameObject, XDataCenter.FubenManager.StageType.ExtraChapter)
else
self.AnimBeijingEnable = gameObject:FindTransform("BgQieHuan1")
self.AnimBeijingDisable = gameObject:FindTransform("BgQieHuan2")
local autoChangeBgArgs
if self.AnimBeijingEnable and self.AnimBeijingDisable then
self.RImgBg1 = gameObject:FindTransform("RImgChapterBg1"):GetComponent("CanvasGroup")
self.RImgBg2 = gameObject:FindTransform("RImgChapterBg2"):GetComponent("CanvasGroup")
autoChangeBgArgs = {
AutoChangeBgCb = function(seletBgIndex, isPlayAnim)
-- if autoChangeBgFlag then
-- self.AnimBeijingEnable:PlayTimelineAnimation()
-- else
-- if self.FirstSetBg then
-- self.FirstSetBg = nil
-- return
-- end
-- self.AnimBeijingDisable:PlayTimelineAnimation()
-- end
local selectOrder = math.abs(seletBgIndex)
for i = 1, #autoChangeBgArgs.StageIndexList + 1 do
local tempCanvasGroup = gameObject:FindTransform("RImgChapterBg"..i):GetComponent("CanvasGroup")
if i ~= selectOrder then
tempCanvasGroup.alpha = 0
else
tempCanvasGroup.alpha = 1
end
end
if isPlayAnim then
gameObject:FindTransform("BgQieHuan"..seletBgIndex):PlayTimelineAnimation()
end
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.UiActivityBranch_SwitchBg)
end,
DatumLinePrecent = XDataCenter.ExtraChapterManager.GetAutoChangeBgDatumLinePrecent(chapterId),
StageIndexList = XDataCenter.ExtraChapterManager.GetAutoChangeBgStageIndex(chapterId),
}
end
grid = XUiGridChapter.New(self, gameObject, autoChangeBgArgs)
end
grid.Transform:SetParent(self.PanelChapter, false)
self.CurChapterGridColors = grid:GetColors()
--保存星星颜色传给XUiPanelStars与XUiGriTreasureGrade改变星星颜色
self.StarColor = self.CurChapterGridColors.StarColor
self.StarDisColor = self.CurChapterGridColors.StarDisColor
self.CurChapterGridName = prefabName
self.CurChapterGrid = grid
self.GridChapterList[prefabName] = grid
end
grid:UpdateChapterGrid(data)
grid:Show()
self:UpdateChapterStars()
if self.AnimBeijingEnable and self.AnimBeijingDisable then
-- CS.XTool.WaitForEndOfFrame(function()
-- local fitCondition = grid.FirstSetBg
-- if fitCondition then
-- self.RImgBg1.gameObject:SetActiveEx(true)
-- self.AnimBeijingEnable.gameObject:SetActiveEx(false)
-- self.AnimBeijingEnable.gameObject:SetActiveEx(true)
-- self.RImgBg1.alpha = 1
-- else
-- self.RImgBg2.gameObject:SetActiveEx(true)
-- self.AnimBeijingDisable.gameObject:SetActiveEx(false)
-- self.AnimBeijingDisable.gameObject:SetActiveEx(true)
-- self.RImgBg2.alpha = 1
-- end
-- end)
end
--进入首先显示第一个bg
if self.RImgBg1 then
self.RImgBg1.gameObject:SetActiveEx(true)
self.RImgBg1.alpha = 1
end
if self.StageId then
self:OpenStage(self.StageId)
self.StageId = nil
end
XEventManager.DispatchEvent(XEventId.EVENT_GUIDE_STEP_OPEN_EVENT)
self:UpdateChapterTxt()
self:UpdateColor()
self:UpdateExploreBottom()
self:SetPanelBottomActive(true)
self:UpdateFubenExploreItem()
end
function XUiFubenExtraChapter:UpdateColor()
--章节标题
self.TxtChapter.color = self.CurChapterGridColors.TxtChapterNameColor or self.OriginalColors.TxtChapterNameColor
self.TxtChapterName.color = self.CurChapterGridColors.TxtChapterNameColor or self.OriginalColors.TxtChapterNameColor
--剩余时间
self.Text_1.color = self.CurChapterGridColors.TxtLeftTimeTipColor or self.OriginalColors.TxtLeftTimeTipColor
self.TxtLeftTime.color = self.CurChapterGridColors.TxtLeftTimeColor or self.OriginalColors.TxtLeftTimeColor
--底部栏
self.ImageBottom.color = self.CurChapterGridColors.ImageBottomColor or self.OriginalColors.ImageBottomColor
--底部栏左侧三角形
self.Triangle0.color = self.CurChapterGridColors.Triangle0Color or self.OriginalColors.Triangle0Color
self.Triangle1.color = self.CurChapterGridColors.Triangle1Color or self.OriginalColors.Triangle1Color
self.Triangle2.color = self.CurChapterGridColors.Triangle2Color or self.OriginalColors.Triangle2Color
self.Triangle3.color = self.CurChapterGridColors.Triangle3Color or self.OriginalColors.Triangle3Color
--章节奖励描述的星星图标
self.ImageLine.color = self.CurChapterGridColors.StarColor or self.OriginalColors.StarColor
--章节奖励描述的星星数量描述
self.TxtStarNum.color = self.CurChapterGridColors.TxtStarNumColor or self.OriginalColors.TxtStarNumColor
--章节奖励描述的收集进度
self.Txet.color = self.CurChapterGridColors.TxtDescrColor or self.OriginalColors.TxtDescrColor
end
function XUiFubenExtraChapter:UpdateExploreBottom()
if not self.IsExploreMod then
return
end
self.CanPlayList = {}
self.LastStageIndex = {} --最后一次通关的关卡索引
local chapterList = XDataCenter.ExtraChapterManager.GetChapterList(XDataCenter.FubenManager.DifficultNormal)
local normalChapter = XDataCenter.ExtraChapterManager.GetChapterDetailsCfg(chapterList[self.Chapter.OrderId])
chapterList = XDataCenter.ExtraChapterManager.GetChapterList(XDataCenter.FubenManager.DifficultHard)
local hardChapter = XDataCenter.ExtraChapterManager.GetChapterDetailsCfg(chapterList[self.Chapter.OrderId])
self:SetCanPlayStageList(normalChapter, XDataCenter.FubenManager.DifficultNormal)
self:SetCanPlayStageList(hardChapter, XDataCenter.FubenManager.DifficultHard)
self:ReSetQuickJumpButton(normalChapter, XDataCenter.FubenManager.DifficultNormal, self.PanelExploreBottom.BtnNormalJump)
self:ReSetQuickJumpButton(hardChapter, XDataCenter.FubenManager.DifficultHard, self.PanelExploreBottom.BtnHardlJump)
if self.CurChapterGrid then
self.CurChapterGrid:SetCanPlayList(self.CanPlayList[self.CurDiff])
end
end
function XUiFubenExtraChapter:SetCanPlayStageList(chapter, diff)
local lastPassStageId = XDataCenter.ExtraChapterManager.GetLastPassStage(self.Chapter.ChapterId)
for index, stageId in pairs(chapter.StageId) do
if not self.CanPlayList[diff] then
self.CanPlayList[diff] = {}
end
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
local IsEgg = stageCfg.StageType == XFubenConfigs.STAGETYPE_FIGHTEGG or stageCfg.StageType == XFubenConfigs.STAGETYPE_STORYEGG
local exploreInfoList = XDataCenter.ExtraChapterManager.GetExploreGroupInfoByGroupId(chapter.ExploreGroupId)
local exploreInfo = exploreInfoList[index] or {}
local IsShow = true
for _, idx in pairs(exploreInfo.PreShowIndex or {}) do
local Info = XDataCenter.FubenManager.GetStageInfo(chapter.StageId[idx])
if not Info or not Info.Passed then
IsShow = false
end
end
if stageInfo.Unlock and IsShow then
if not stageInfo.Passed and not IsEgg then
table.insert(self.CanPlayList[diff], index)
end
if lastPassStageId == stageCfg.StageId then
self.LastStageIndex[diff] = index
end
end
end
end
function XUiFubenExtraChapter:ReSetQuickJumpButton(chapter, diff, jumpButton)
if not self.QuickJumpBtnList[diff] then
self.QuickJumpBtnList[diff] = {}
end
local canPlayList = self.CanPlayList[diff]
local quickJumpBtnList = self.QuickJumpBtnList[diff]
local lenght = #canPlayList
for i = 1, lenght do
local stageId = chapter.StageId[canPlayList[i]]
local quickJumpBtn = quickJumpBtnList[i]
if not quickJumpBtn then
local tempBtn = CS.UnityEngine.Object.Instantiate(jumpButton)
tempBtn.gameObject:SetActiveEx(true)
quickJumpBtn = XUiFubenMainLineQuickJumpBtn.New(tempBtn, canPlayList[i], chapter,
function(index, clickStageId)
self:OnQuickJumpClick(diff, index)
XDataCenter.ExtraChapterManager.MarkNewJumpStageButtonEffectByStageId(clickStageId)
quickJumpBtn.Transform:GetComponent("XUiButton"):ShowTag(false)
end, XDataCenter.FubenManager.StageType.ExtraChapter)
quickJumpBtnList[i] = quickJumpBtn
else
quickJumpBtn:UpdateNode(canPlayList[i], chapter)
quickJumpBtn.GameObject:SetActiveEx(true)
end
quickJumpBtn.Transform:SetParent(self.transform, false)
quickJumpBtn.Transform:SetParent(self.PanelExploreBottom.PanelNodeList, false)
XDataCenter.ExtraChapterManager.SaveNewJumpStageButtonEffect(stageId)
local IsHaveNew = XDataCenter.ExtraChapterManager.CheckHaveNewJumpStageButtonByStageId(stageId)
quickJumpBtn.Transform:GetComponent("XUiButton"):ShowTag(IsHaveNew)
end
lenght = #quickJumpBtnList
for i = #canPlayList + 1, lenght do
quickJumpBtnList[i].GameObject:SetActiveEx(false)
end
end
function XUiFubenExtraChapter:OnQuickJumpClick(diff, index)
if diff ~= self.CurDiff then
local IsLock = false
self.IsShowDifficultPanel = true
if diff == XDataCenter.FubenManager.DifficultNormal then
IsLock = self:OnBtnNormalClick(false)
elseif diff == XDataCenter.FubenManager.DifficultHard then
IsLock = self:OnBtnHardClick(false)
end
if IsLock then
self.CurChapterGrid:OnQuickJumpClick(index)
end
else
self.CurChapterGrid:OnQuickJumpClick(index)
end
end
function XUiFubenExtraChapter:CheckDetailOpen()
local childUi = self:GetCurDetailChildUi()
return XLuaUiManager.IsUiShow(childUi)
end
function XUiFubenExtraChapter:ShowStageDetail(stage)
self.Stage = stage
if self.IsExploreMod or self.IOnZhouMu then
self:OpenExploreDetail()
else
local childUi = self:GetCurDetailChildUi()
self:OpenOneChildUi(childUi, self)
end
end
function XUiFubenExtraChapter:OnEnterStory(stageId)
self.Stage = XDataCenter.FubenManager.GetStageCfg(stageId)
local childUi = self:GetCurDetailChildUi()
self:OpenOneChildUi(childUi, self)
end
function XUiFubenExtraChapter:HideStageDetail()
if not self.Stage then
return
end
local childUi = self:GetCurDetailChildUi()
local childUiObj = self:FindChildUiObj(childUi)
if childUiObj then
childUiObj:Hide()
end
end
function XUiFubenExtraChapter:OnCloseStageDetail()
if self.CurChapterGrid then
self.CurChapterGrid:CancelSelect()
end
end
-- 更新左下角的奖励按钮的状态
function XUiFubenExtraChapter:UpdateChapterStars()
local curStars
local totalStars
local received = true
self.PanelDesc.gameObject:SetActiveEx(true)
if self.IsOnZhouMu then
-- 周目奖励
self.MultipleWeeksTxet.gameObject:SetActiveEx(true)
self.TxtDesc.gameObject:SetActiveEx(false)
self.ImgStarIcon.gameObject:SetActiveEx(false)
curStars, totalStars = XDataCenter.FubenZhouMuManager.GetZhouMuTaskProgress(self.ZhouMuId)
received = XDataCenter.FubenZhouMuManager.ZhouMuTaskIsAllFinish(self.ZhouMuId)
XRedPointManager.Check(self.RedPointZhouMuId, self.ZhouMuId)
else
-- 收集奖励
curStars, totalStars = XDataCenter.ExtraChapterManager.GetChapterStars(self.Chapter.ChapterId)
local chapterTemplate = XDataCenter.ExtraChapterManager.GetChapterDetailsCfg(self.Chapter.ChapterId)
for _, v in pairs(chapterTemplate.TreasureId) do
if not XDataCenter.ExtraChapterManager.IsTreasureGet(v) then
received = false
break
end
end
self.MultipleWeeksTxet.gameObject:SetActiveEx(false)
self.TxtDesc.gameObject:SetActiveEx(true)
self.ImgStarIcon.gameObject:SetActiveEx(true)
XRedPointManager.Check(self.RedPointId, self.Chapter.ChapterId)
end
self.ImgJindu.fillAmount = totalStars > 0 and curStars / totalStars or 0
self.ImgJindu.gameObject:SetActiveEx(true)
self.TxtStarNum.text = CS.XTextManager.GetText("Fract", curStars, totalStars)
self.ImgLingqu.gameObject:SetActiveEx(received)
end
function XUiFubenExtraChapter:OnBtnTreasureClick()
if self:CloseStageDetail() then
return
end
self:InitTreasureGrade()
self.PanelTreasure.gameObject:SetActiveEx(true)
self.PanelTop.gameObject:SetActiveEx(true)
self:SetPanelBottomActive(true)
self:PlayAnimation("TreasureEnable")
end
function XUiFubenExtraChapter:CloseStageDetail()
if self:CheckDetailOpen() then
if self.CurChapterGrid then
self.CurChapterGrid:ScrollRectRollBack()
end
self:HideStageDetail()
return true
end
return false
end
function XUiFubenExtraChapter:OnBtnTreasureBgClick()
self:PlayAnimation("TreasureDisable", handler(self, function()
self.PanelTreasure.gameObject:SetActiveEx(false)
self.PanelTop.gameObject:SetActiveEx(true)
self:SetPanelBottomActive(true)
self:UpdateChapterStars()
end))
end
-- 点击切换到周目模式
function XUiFubenExtraChapter:OnBtnSwitch1MultipleWeeksClick()
self.IsOnZhouMu = true
self.TxtCurMWNum.text = self.ZhouMuNumber
local zhouMuChapter = XDataCenter.FubenZhouMuManager.GetZhouMuChapterData(self.ChapterMainId, true)
for _, v in pairs(self.GridChapterList) do
v:Hide()
end
local data = {
Chapter = zhouMuChapter,
HideStageCb = handler(self, self.HideStageDetail),
ShowStageCb = handler(self, self.ShowStageDetail),
}
data.StageList = XFubenZhouMuConfigs.GetZhouMuChapterStages(zhouMuChapter.Id)
local grid = self.CurChapterGrid
local prefabName = zhouMuChapter.PrefabName
if self.CurChapterGridName ~= prefabName then
local gameObject = self.PanelChapter:LoadPrefab(prefabName)
if gameObject == nil or not gameObject:Exist() then
return
end
grid = XUiGridChapter.New(self, gameObject, nil, true)
grid.Transform:SetParent(self.PanelChapter, false)
self.CurChapterGridName = prefabName
self.CurChapterGrid = grid
self.GridChapterList[prefabName] = grid
end
grid:UpdateChapterGrid(data)
grid:Show()
self:UpdateChapterStars()
self:UpdateChapterTxt()
self:SetPanelBottomActive(true)
self.BtnSwitch1MultipleWeeks.gameObject:SetActiveEx(false)
self.BtnSwitch2Normal.gameObject:SetActiveEx(true)
self.PanelTopDifficult.gameObject:SetActiveEx(false)
self.TxtCurMWNum.gameObject:SetActiveEx(true)
self:PlayAnimation("AnimEnable2")
end
function XUiFubenExtraChapter:OnBtnSwitch2NormalClidk()
self.IsOnZhouMu = false
self:RefreshForChangeDiff(true)
self.BtnSwitch1MultipleWeeks.gameObject:SetActiveEx(true)
self.BtnSwitch2Normal.gameObject:SetActiveEx(false)
self.TxtCurMWNum.gameObject:SetActiveEx(false)
self.PanelTopDifficult.gameObject:SetActiveEx(true)
end
-- 初始化 treasure grade grid panel填充数据
-- 周目奖励和进度奖励使用不同的Grid模板用GridTreasureList、GridMultipleWeeksTaskList分别存储
function XUiFubenExtraChapter:InitTreasureGrade()
local baseItem = self.IsOnZhouMu and self.GridMultipleWeeksTask or self.GridTreasureGrade
self.GridMultipleWeeksTask.gameObject:SetActiveEx(false)
self.GridTreasureGrade.gameObject:SetActiveEx(false)
-- 先把所有的格子隐藏
for j = 1, #self.GridTreasureList do
self.GridTreasureList[j].GameObject:SetActiveEx(false)
end
for j = 1, #self.GridMultipleWeeksTaskList do
self.GridMultipleWeeksTaskList[j].GameObject:SetActiveEx(false)
end
local targetList
if self.IsOnZhouMu then
targetList = XFubenZhouMuConfigs.GetZhouMuTasks(self.ZhouMuId)
else
targetList = self.Chapter.TreasureId
end
if not targetList then
return
end
local offsetValue = 260
local gridCount = #targetList
for i = 1, gridCount do
local offerY = (1 - i) * offsetValue
local grid
if self.IsOnZhouMu then
grid = self.GridMultipleWeeksTaskList[i]
else
grid = self.GridTreasureList[i]
end
if not grid then
local item = CS.UnityEngine.Object.Instantiate(baseItem) -- 复制一个item
grid = XUiGridTreasureGrade.New(self, item, XDataCenter.FubenManager.StageType.ExtraChapter)
grid.Transform:SetParent(self.PanelGradeContent, false)
grid.Transform.localPosition = CS.UnityEngine.Vector3(item.transform.localPosition.x, item.transform.localPosition.y + offerY, item.transform.localPosition.z)
if self.IsOnZhouMu then
self.GridMultipleWeeksTaskList[i] = grid
else
self.GridTreasureList[i] = grid
end
end
if self.IsOnZhouMu then
grid:UpdateGradeGridTask(targetList[i])
else
local treasureCfg = XDataCenter.ExtraChapterManager.GetTreasureCfg(targetList[i])
local chapterInfo = XDataCenter.ExtraChapterManager.GetChapterInfo(self.Chapter.ChapterId)
grid:UpdateGradeGrid(chapterInfo.Stars, treasureCfg, self.Chapter.ChapterId)
end
grid:InitTreasureList()
grid.GameObject:SetActiveEx(true)
end
end
function XUiFubenExtraChapter:OnSyncStage(stageId)
if not stageId then
return
end
local stageData = XDataCenter.FubenManager.GetStageData(stageId)
if not stageData then
return
end
if stageData.PassTimesToday > 1 then
return
end
if not self.CurDiff or self.CurDiff < 0 then
return
end
local chapter = self:GetChapterCfgByStageId(stageId)
if chapter then
self:UpdateCurChapter(chapter)
end
if self.CurChapterGrid then
if self.CurChapterGrid.IsNotPassedFightStage then
self.IsCanGoNearestStage = true
end
end
end
function XUiFubenExtraChapter:GetChapterCfgByStageId(stageId)
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
local chapter
if stageInfo.Type == XDataCenter.FubenManager.StageType.ExtraChapter then
chapter = XDataCenter.ExtraChapterManager.GetChapterDetailsCfg(stageInfo.ChapterId)
else
return
end
return chapter
end
function XUiFubenExtraChapter:OnGetEvents()
return { XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL, XEventId.EVENT_FUBEN_ENTERFIGHT }
end
--事件监听
function XUiFubenExtraChapter:OnNotify(evt, ...)
if evt == XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL then
self:OnCloseStageDetail()
elseif evt == XEventId.EVENT_FUBEN_ENTERFIGHT then
self:EnterFight(...)
end
end
function XUiFubenExtraChapter:UpdateActivityTime()
if not XDataCenter.ExtraChapterManager.IsExtraActivityOpen() then
self:DestroyActivityTimer()
self.PanelActivityTime.gameObject:SetActiveEx(false)
return
end
self:CreateActivityTimer()
local curDiffHasActivity = XDataCenter.ExtraChapterManager.CheckDiffHasAcitivity(self.Chapter)
self.PanelActivityTime.gameObject:SetActiveEx(curDiffHasActivity)
end
function XUiFubenExtraChapter:UpdateFubenExploreItem()
local itemCurCount = #XDataCenter.ExtraChapterManager.GetChapterExploreItemList(self.ExtraChapterId)
self.PanelFubenExItem.gameObject:SetActiveEx(itemCurCount > 0 and self.IsExploreMod)
end
function XUiFubenExtraChapter:CreateActivityTimer()
self:DestroyActivityTimer()
local time = XTime.GetServerNowTimestamp()
local endTime = XDataCenter.ExtraChapterManager.GetActivityEndTime()
self.TxtLeftTime.text = XUiHelper.GetTime(endTime - time, XUiHelper.TimeFormatType.ACTIVITY)
self.ActivityTimer = XScheduleManager.ScheduleForever(function()
if XTool.UObjIsNil(self.TxtLeftTime) then
self:DestroyActivityTimer()
return
end
local leftTime = endTime - time
time = time + 1
if leftTime >= 0 then
self.TxtLeftTime.text = XUiHelper.GetTime(leftTime, XUiHelper.TimeFormatType.ACTIVITY)
else
self:DestroyActivityTimer()
XDataCenter.ExtraChapterManager.OnActivityEnd()
end
end, XScheduleManager.SECOND, 0)
end
function XUiFubenExtraChapter:DestroyActivityTimer()
if self.ActivityTimer then
XScheduleManager.UnSchedule(self.ActivityTimer)
self.ActivityTimer = nil
end
end
function XUiFubenExtraChapter:GetCurDetailChildUi()
local stageCfg = self.Stage
if not stageCfg then return "" end
if stageCfg.StageType == XFubenConfigs.STAGETYPE_STORY or stageCfg.StageType == XFubenConfigs.STAGETYPE_STORYEGG then
return "UiStoryStageDetailFw"
else
return "UiFubenMainLineDetailFw"
end
end
function XUiFubenExtraChapter:GoToStage(stageId)
if self.CurChapterGrid then
self.CurChapterGrid:GoToStage(stageId)
end
end
function XUiFubenExtraChapter:OpenExploreDetail()
XLuaUiManager.Open("UiFubenExploreDetail", self, self.Stage, function()
if (self.CurChapterGrid or {}).ScaleBack and self.IsExploreMod then
self.CurChapterGrid:ScaleBack()
end
self:OnCloseStageDetail()
end, XDataCenter.FubenManager.StageType.ExtraChapter)
end
function XUiFubenExtraChapter:OnCheckExploreItemNews(count)
self.BtnExItem:ShowReddot(count >= 0)
end
function XUiFubenExtraChapter:OnAutoFightStart(stageId)
if self.Stage.StageId == stageId then
if self.CurChapterGrid and self.IsExploreMod then
self.CurChapterGrid:ScaleBack()
end
self:OnCloseStageDetail()
XLuaUiManager.Remove("UiFubenExploreDetail")
end
end
function XUiFubenExtraChapter:OnReleaseInst()
return { Chapter = self.Chapter, StageId = self.StageId, HideDiffTog = self.HideDiffTog }
end
function XUiFubenExtraChapter:OnResume(data)
self.LastData = data
end