535 lines
No EOL
18 KiB
Lua
535 lines
No EOL
18 KiB
Lua
local XUiSummerEpisode = XLuaUiManager.Register(XLuaUi, "UiSummerEpisode")
|
|
local XUiSummerEpisodeChapter = require("XUi/XUiSummerEpisode/XUiSummerEpisodeChapter")
|
|
local XUiGridNewSpecialReward = require("XUi/XUiSummerEpisode/XUiGridNewSpecialReward")
|
|
function XUiSummerEpisode:OnAwake()
|
|
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
|
|
self.TabPool = {}
|
|
self.CurChapterIndex = 1
|
|
|
|
self.BtnBack.CallBack = function() self:OnBtnBackClick() end
|
|
self.BtnMainUi.CallBack = function() self:OnBtnMainUiClick() end
|
|
-- self.BtnHelpCourse.CallBack = function() self:OnBtnHelpCourseClick() end
|
|
self.HelpDataFunc = function () return self:GetHelpDataFunc() end
|
|
self:BindHelpBtnNew(self.BtnHelpCourse, self.HelpDataFunc)
|
|
self.BtnMatchGame.CallBack = function() self:OnBtnHMatchGameClick() end
|
|
self.BtnTemplate.gameObject:SetActiveEx(false)
|
|
|
|
self.Red.gameObject:SetActiveEx(false)
|
|
self.PanelAsset.gameObject:SetActiveEx(false)
|
|
|
|
CsXUiHelper.RegisterClickEvent(self.BtnTreasure, handler(self, self.OnBtnTreasure))
|
|
|
|
self.BtnTask.CallBack = function() self:OnBtnTreasure() end
|
|
end
|
|
|
|
function XUiSummerEpisode:OnStart(id, chapterId, bOpenTask)
|
|
self.CurActivityId = id
|
|
self.NewRewardGridList = {}
|
|
|
|
XDataCenter.FubenSpecialTrainManager.CurActiveId = id
|
|
self.ActivityConfig = XFubenSpecialTrainConfig.GetActivityConfigById(id)
|
|
self.Chapters = self.ActivityConfig.ChapterIds
|
|
self.ChapterConfig = {}
|
|
for i, v in ipairs(self.Chapters) do
|
|
if chapterId and chapterId == v then
|
|
self.CurChapterIndex = i
|
|
end
|
|
|
|
local chapeter = XFubenSpecialTrainConfig.GetChapterConfigById(v)
|
|
table.insert(self.ChapterConfig, chapeter)
|
|
end
|
|
|
|
if self.ActivityConfig.EliminateGameId == 0 then
|
|
self.BtnMatchGame.gameObject:SetActiveEx(false)
|
|
else
|
|
self.BtnMatchGame.gameObject:SetActiveEx(true)
|
|
end
|
|
|
|
self.ChapterPanel = XUiSummerEpisodeChapter.New(self.FubenChapter, self)
|
|
self.CurChapter = self.ChapterConfig[self.CurChapterIndex]
|
|
|
|
self:SetupPanel()
|
|
self:TryShowHelpTip()
|
|
|
|
if bOpenTask and bOpenTask > 0 then
|
|
self:OnBtnTreasure()
|
|
end
|
|
end
|
|
|
|
--设置面板
|
|
function XUiSummerEpisode:SetupPanel()
|
|
self:SetupTitle()
|
|
self:SetupChapter()
|
|
self:SetupEliminateGame()
|
|
end
|
|
|
|
--弹出帮助
|
|
function XUiSummerEpisode:TryShowHelpTip()
|
|
local value = XDataCenter.FubenSpecialTrainManager.GetSpecialTrainPrefs(self.CurActivityId, self.CurChapter.Id)
|
|
if value == 0 then
|
|
XUiManager.ShowHelpTipNew(self.HelpDataFunc)
|
|
XDataCenter.FubenSpecialTrainManager.SaveSpecialTrainPrefs(1, self.CurActivityId, self.CurChapter.Id)
|
|
end
|
|
end
|
|
|
|
function XUiSummerEpisode:SetupEliminateGame()
|
|
self.Red.gameObject:SetActiveEx(false)
|
|
|
|
self.TxtGame.gameObject:SetActiveEx(false)
|
|
if not XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.EliminateGame) then
|
|
return
|
|
end
|
|
|
|
local id = self.ActivityConfig.EliminateGameId
|
|
if XDataCenter.EliminateGameManager.CheckTimeOut(id) then
|
|
return
|
|
end
|
|
|
|
XDataCenter.EliminateGameManager.TryGetEliminateGameData(id, function()
|
|
local gameData = XDataCenter.EliminateGameManager.GetEliminateGameData(id)
|
|
|
|
local totalRewardCount = #gameData.Rewards
|
|
local finish = #gameData.RewardIds
|
|
self.TxtGame.text = string.format("%s/%s", finish, totalRewardCount)
|
|
self.TxtGame.gameObject:SetActiveEx(true)
|
|
self.Red.gameObject:SetActiveEx(XDataCenter.EliminateGameManager.CheckGameHasReward(id))
|
|
end)
|
|
end
|
|
|
|
--设置标题
|
|
function XUiSummerEpisode:SetupTitle()
|
|
self:SetTimer()
|
|
end
|
|
|
|
--停止计时器
|
|
function XUiSummerEpisode:StopTimer()
|
|
if self.Timer then
|
|
XScheduleManager.UnSchedule(self.Timer)
|
|
self.Timer = nil
|
|
end
|
|
end
|
|
|
|
--活动时间倒计时
|
|
function XUiSummerEpisode:SetTimer()
|
|
local endTimeSecond = XFunctionManager.GetEndTimeByTimeId(self.ActivityConfig.TimeId)
|
|
local now = XTime.GetServerNowTimestamp()
|
|
if now <= endTimeSecond then
|
|
local activeOverStr = CS.XTextManager.GetText("ArenaOnlineLeftTimeOver")
|
|
self:StopTimer()
|
|
if now <= endTimeSecond then
|
|
self.TextTime.text = string.format("%s", XUiHelper.GetTime(endTimeSecond - now, XUiHelper.TimeFormatType.ACTIVITY))
|
|
else
|
|
self.TextTime.text = activeOverStr
|
|
end
|
|
|
|
self.Timer = XScheduleManager.ScheduleForever(function()
|
|
now = XTime.GetServerNowTimestamp()
|
|
if now > endTimeSecond then
|
|
self:OnActivityEnd()
|
|
return
|
|
end
|
|
if now <= endTimeSecond then
|
|
self.TextTime.text = string.format("%s", XUiHelper.GetTime(endTimeSecond - now, XUiHelper.TimeFormatType.ACTIVITY))
|
|
else
|
|
self.TextTime.text = activeOverStr
|
|
end
|
|
end, XScheduleManager.SECOND, 0)
|
|
end
|
|
end
|
|
|
|
--活动结束
|
|
function XUiSummerEpisode:OnActivityEnd()
|
|
XUiManager.TipMsg(CS.XTextManager.GetText("SpecialTrainTimeOut"))
|
|
self:StopTimer()
|
|
self:Close()
|
|
end
|
|
|
|
|
|
function XUiSummerEpisode:OnDestroy()
|
|
--XDataCenter.FubenSpecialTrainManager.CurActiveId = -1
|
|
end
|
|
|
|
--设置奖励
|
|
function XUiSummerEpisode:SetupReward()
|
|
if self.ActivityConfig.PointItemId ~= 0 then
|
|
self.PanelBottom.gameObject:SetActiveEx(false)
|
|
self.PanelCourse.gameObject:SetActiveEx(true)
|
|
local func = function ()
|
|
self:SetupRewardNew()
|
|
end
|
|
XDataCenter.ItemManager.AddCountUpdateListener(self.ActivityConfig.PointItemId, func, self.GameObject)
|
|
self:SetupRewardNew()
|
|
end
|
|
self:SetupRewardOld()
|
|
end
|
|
|
|
function XUiSummerEpisode:SetupRewardNew()
|
|
local pointCount = XDataCenter.ItemManager.GetCount(self.ActivityConfig.PointItemId)
|
|
self.TxtPoint.text = pointCount
|
|
local defaultIndex
|
|
for index, pointId in ipairs(self.ActivityConfig.PointRewardId) do
|
|
local tmpPointCfg = XFubenSpecialTrainConfig.GetSpecialPointRewardConfig(pointId)
|
|
local nextPointCfg = self.ActivityConfig.PointRewardId[index + 1] and XFubenSpecialTrainConfig.GetSpecialPointRewardConfig(self.ActivityConfig.PointRewardId[index + 1]) or nil
|
|
local grid
|
|
if not self.NewRewardGridList[index] then
|
|
if index == 1 then
|
|
grid = XUiGridNewSpecialReward.New(self.GridCourse, self)
|
|
self.GridCourse.gameObject:SetActiveEx(true)
|
|
self.GridCourse.transform:SetParent(self.PanelCourseContainer, false)
|
|
else
|
|
local ui = CS.UnityEngine.Object.Instantiate(self.GridCourse)
|
|
ui.gameObject:SetActiveEx(true)
|
|
ui.transform:SetParent(self.PanelCourseContainer, false)
|
|
grid = XUiGridNewSpecialReward.New(ui, self)
|
|
end
|
|
self.NewRewardGridList[index] = grid
|
|
else
|
|
grid = self.NewRewardGridList[index]
|
|
end
|
|
grid:UpdateData(tmpPointCfg, nextPointCfg, pointCount)
|
|
if not defaultIndex and not XDataCenter.FubenSpecialTrainManager.CheckPointRewardGet(pointId) then
|
|
defaultIndex = index
|
|
end
|
|
end
|
|
-- 针对全部领取的情况处理滑动
|
|
if not defaultIndex then
|
|
defaultIndex = #self.ActivityConfig.PointRewardId
|
|
local pointId = self.ActivityConfig.PointRewardId[defaultIndex]
|
|
--如果最后一个没有被领取则不是全部被领取
|
|
if not XDataCenter.FubenSpecialTrainManager.CheckPointRewardGet(pointId) then
|
|
defaultIndex = nil
|
|
end
|
|
end
|
|
|
|
if defaultIndex then
|
|
self:SetSViewIndex(defaultIndex)
|
|
end
|
|
end
|
|
|
|
function XUiSummerEpisode:SetSViewIndex(defaultIndex)
|
|
local length = #self.ActivityConfig.PointRewardId or 0
|
|
if defaultIndex then
|
|
if defaultIndex <= 1 then
|
|
defaultIndex = 0
|
|
elseif defaultIndex >= 16 then
|
|
defaultIndex = 1
|
|
end
|
|
|
|
local percentage = 0
|
|
if length > 0 then
|
|
percentage = (defaultIndex - 1) / length
|
|
end
|
|
self.SViewCourse.horizontalNormalizedPosition = percentage
|
|
CS.UnityEngine.Canvas.ForceUpdateCanvases()
|
|
end
|
|
end
|
|
|
|
function XUiSummerEpisode:SetupRewardOld()
|
|
if self.CurChapter.RewardType == XDataCenter.FubenSpecialTrainManager.RewardType.StarReward then
|
|
local totalStars = 0
|
|
local isRed = false
|
|
local curStars = XDataCenter.FubenSpecialTrainManager.GetSpecialTrainNormalChapterStar(self.CurChapter.Id)
|
|
local starRewardList = XDataCenter.FubenSpecialTrainManager.GetSpecialTrainNormalChapterReward(self.CurChapter.Id)
|
|
|
|
for i, v in ipairs(starRewardList) do
|
|
totalStars = totalStars < v.RequireStar and v.RequireStar or totalStars
|
|
if v.IsFinish and not v.IsReward then
|
|
isRed = true
|
|
end
|
|
end
|
|
|
|
self.ImgJindu.fillAmount = totalStars > 0 and curStars / totalStars or 0
|
|
self.ImgJindu.gameObject:SetActiveEx(true)
|
|
self.ImgLingqu.gameObject:SetActiveEx(totalStars <= curStars and (not isRed))
|
|
self.ImgRedProgress.gameObject:SetActiveEx(isRed)
|
|
|
|
self.MultiyPlayerNum.gameObject:SetActiveEx(false)
|
|
self.SinglePlayerNum.gameObject:SetActiveEx(true)
|
|
|
|
self.TxtSinglePlayerFinishNum.text = string.format("%s<size=30>/%s</size>", curStars, totalStars)
|
|
-- self.TxtSinglePlayerTotalNum.text = "/" .. tostring(totalStars)
|
|
elseif self.CurChapter.RewardType == XDataCenter.FubenSpecialTrainManager.RewardType.Task then
|
|
local isRed = false
|
|
local tasks = XDataCenter.FubenSpecialTrainManager.GetSpecialTrainChapterTask(self.CurChapter.Id)
|
|
local finishCount = 0
|
|
local achievedCount = 0
|
|
|
|
for i, v in ipairs(tasks) do
|
|
local task = XDataCenter.TaskManager.GetTaskDataById(v)
|
|
if task.State == XDataCenter.TaskManager.TaskState.Achieved then
|
|
achievedCount = achievedCount + 1
|
|
isRed = true
|
|
end
|
|
|
|
if task.State == XDataCenter.TaskManager.TaskState.Finish then
|
|
finishCount = finishCount + 1
|
|
end
|
|
end
|
|
|
|
local taskCount = #tasks
|
|
|
|
self.ImgJindu.fillAmount = taskCount > 0 and (finishCount + achievedCount) / taskCount or 0
|
|
self.ImgLingqu.gameObject:SetActiveEx(taskCount == finishCount)
|
|
self.ImgRedProgress.gameObject:SetActiveEx(isRed)
|
|
|
|
self.TaskRed.gameObject:SetActiveEx(isRed)
|
|
|
|
self.MultiyPlayerNum.gameObject:SetActiveEx(true)
|
|
self.SinglePlayerNum.gameObject:SetActiveEx(false)
|
|
|
|
self.TxtMultiyPlayerFinishNum.text = tostring(finishCount)
|
|
self.TxtMultiyPlayerTotalNum.text = tostring(taskCount)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--设置章节
|
|
function XUiSummerEpisode:SetupChapter()
|
|
if not self.ChapterConfig then
|
|
return
|
|
end
|
|
|
|
--self.HelpIds = {}
|
|
--小型缓冲池
|
|
if self.BtnTabList and #self.BtnTabList then
|
|
for i, v in ipairs(self.BtnTabList) do
|
|
table.insert(self.TabPool, v)
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
|
|
self.BtnTabList = {}
|
|
local chapterCount = 0
|
|
|
|
for i, v in ipairs(self.ChapterConfig) do
|
|
if not self.TabPool or #self.TabPool <= 0 then
|
|
local go = CS.UnityEngine.GameObject.Instantiate(self.BtnTemplate.gameObject)
|
|
go.transform:SetParent(self.PanelTab.transform, false)
|
|
local btn = go:GetComponent("XUiButton")
|
|
table.insert(self.TabPool, btn)
|
|
end
|
|
|
|
local tab = table.remove(self.TabPool, 1)
|
|
tab.gameObject:SetActive(true)
|
|
table.insert(self.BtnTabList, tab)
|
|
|
|
tab:SetSprite(v.TabImage)
|
|
tab:SetNameByGroup(0, v.Name)
|
|
tab:SetNameByGroup(1, v.SecondName)
|
|
|
|
chapterCount = chapterCount + 1
|
|
end
|
|
|
|
-- 初始化按钮
|
|
self.PanelTab:Init(self.BtnTabList, function(index) self:OnBtnTabListClick(index) end)
|
|
self.PanelTab:SelectIndex(self.CurChapterIndex)
|
|
|
|
self.PanelTab.gameObject:SetActiveEx(chapterCount > 1)
|
|
|
|
end
|
|
|
|
function XUiSummerEpisode:OnBtnTabListClick(index)
|
|
if self.CurChapterIndex == index then
|
|
return
|
|
end
|
|
|
|
if XDataCenter.RoomManager.Matching then
|
|
local title = CS.XTextManager.GetText("TipTitle")
|
|
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceCancelMatch")
|
|
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, function() self.PanelTab:SelectIndex(self.CurChapterIndex) end, function()
|
|
XDataCenter.RoomManager.CancelMatch(function()
|
|
self:ChangeChapter(index)
|
|
end)
|
|
end)
|
|
else
|
|
self:ChangeChapter(index)
|
|
end
|
|
end
|
|
|
|
function XUiSummerEpisode:ChangeChapter(index)
|
|
self.CurChapterIndex = index
|
|
self.CurChapter = self.ChapterConfig[self.CurChapterIndex]
|
|
self:SetupChapterStage()
|
|
|
|
self:TryShowHelpTip()
|
|
|
|
self:PlayAnimation("AnimStartEnable", function()
|
|
XLuaUiManager.SetMask(false)
|
|
end, function()
|
|
XLuaUiManager.SetMask(true)
|
|
end)
|
|
end
|
|
|
|
--设置关卡
|
|
function XUiSummerEpisode:SetupChapterStage()
|
|
if not self.CurChapter then
|
|
return
|
|
end
|
|
|
|
self:SwitchChapterBg()
|
|
self:SetupReward()
|
|
self.ChapterPanel:SetupChapterStage(self.CurChapter)
|
|
end
|
|
|
|
--切换背景
|
|
function XUiSummerEpisode:SwitchChapterBg()
|
|
local icon = self.CurChapter.BgIcon
|
|
self.Background:SetRawImage(icon)
|
|
end
|
|
|
|
|
|
function XUiSummerEpisode:OnEnable()
|
|
if XDataCenter.FubenSpecialTrainManager.CheckActivityTimeout(self.CurActivityId, true) then
|
|
XLuaUiManager.RunMain()
|
|
return
|
|
end
|
|
|
|
self:SetupChapterStage()
|
|
self:SetupEliminateGame()
|
|
self:SetTimer()
|
|
|
|
self:PlayAnimation("AnimStartEnable", function()
|
|
XLuaUiManager.SetMask(false)
|
|
end, function()
|
|
XLuaUiManager.SetMask(true)
|
|
end)
|
|
end
|
|
|
|
function XUiSummerEpisode:OnDisable()
|
|
self:StopTimer()
|
|
end
|
|
|
|
function XUiSummerEpisode:OnNotify(evt, ...)
|
|
if evt == XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL then
|
|
self.StageDetailOpen = false
|
|
self.ChildUi = nil
|
|
-- self.PanelAsset.gameObject:SetActiveEx(true)
|
|
elseif evt == XEventId.EVENT_FUBEN_SPECIAL_TRAIN_REWARD or evt == XEventId.EVENT_TASK_SYNC then
|
|
self:SetupReward()
|
|
end
|
|
end
|
|
|
|
function XUiSummerEpisode:OnGetEvents()
|
|
return { XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL, XEventId.EVENT_FUBEN_SPECIAL_TRAIN_ACTIVITY_CHANGE, XEventId.EVENT_FUBEN_SPECIAL_TRAIN_REWARD, XEventId.EVENT_TASK_SYNC }
|
|
end
|
|
|
|
function XUiSummerEpisode:OnBtnMainUiClick()
|
|
XLuaUiManager.RunMain()
|
|
end
|
|
|
|
function XUiSummerEpisode:OnBtnBackClick()
|
|
if XDataCenter.RoomManager.Matching then
|
|
local title = CS.XTextManager.GetText("TipTitle")
|
|
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceCancelMatch")
|
|
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
|
|
XDataCenter.RoomManager.CancelMatch(function()
|
|
self:Close()
|
|
end)
|
|
end)
|
|
else
|
|
self:Close()
|
|
end
|
|
end
|
|
|
|
-- 获取教程数据函数
|
|
function XUiSummerEpisode:GetHelpDataFunc()
|
|
self.ChapterPanel:CancelSelect()
|
|
|
|
local helpIds = {}
|
|
for _, var in ipairs(self.CurChapter.HelpId) do
|
|
table.insert(helpIds, var)
|
|
end
|
|
|
|
if not helpIds then
|
|
return
|
|
end
|
|
|
|
local helpConfigs = {}
|
|
for i = 1, #helpIds do
|
|
helpConfigs[i] = XHelpCourseConfig.GetHelpCourseTemplateById(helpIds[i])
|
|
end
|
|
|
|
return helpConfigs
|
|
end
|
|
|
|
--打开小游戏
|
|
function XUiSummerEpisode:OnBtnHMatchGameClick()
|
|
if XDataCenter.RoomManager.Matching then
|
|
local title = CS.XTextManager.GetText("TipTitle")
|
|
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceCancelMatch")
|
|
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
|
|
XDataCenter.RoomManager.CancelMatch(function()
|
|
self:OpenMatchGame()
|
|
end)
|
|
end)
|
|
else
|
|
self:OpenMatchGame()
|
|
end
|
|
end
|
|
|
|
function XUiSummerEpisode:OpenMatchGame()
|
|
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.EliminateGame) then
|
|
return
|
|
end
|
|
|
|
self.ChapterPanel:CancelSelect()
|
|
|
|
local id = self.ActivityConfig.EliminateGameId
|
|
if XDataCenter.EliminateGameManager.CheckTimeOut(id, true) then
|
|
return
|
|
end
|
|
XDataCenter.EliminateGameManager.TryGetEliminateGameData(id, function()
|
|
XLuaUiManager.Open("UiSummerMatch", self.ActivityConfig.EliminateGameId)
|
|
end)
|
|
end
|
|
|
|
--打开关卡详情
|
|
function XUiSummerEpisode:OpenStageDetail(stage)
|
|
if not stage then
|
|
return
|
|
end
|
|
|
|
local childUi
|
|
|
|
if stage.IsMultiplayer then
|
|
childUi = "UiSummerOnlineSection"
|
|
else
|
|
childUi = "UiSummerStageDetail"
|
|
end
|
|
|
|
|
|
-- if self.StageDetailOpen and childUi == self.ChildUi then
|
|
-- return
|
|
-- end
|
|
self.StageDetailOpen = true
|
|
|
|
self.ChildUi = childUi
|
|
|
|
self.Stage = stage
|
|
|
|
self:OpenOneChildUi(self.ChildUi, self, stage)
|
|
|
|
--self.PanelAsset.gameObject:SetActiveEx(false)
|
|
end
|
|
|
|
--关闭关卡详情
|
|
function XUiSummerEpisode:CloseStageDetail()
|
|
if self.StageDetailOpen and self.ChildUi then
|
|
self:CloseChildUi(self.ChildUi)
|
|
self.StageDetailOpen = false
|
|
self.ChildUi = nil
|
|
|
|
--self.PanelAsset.gameObject:SetActiveEx(true)
|
|
end
|
|
end
|
|
|
|
--打开任务或者任务
|
|
function XUiSummerEpisode:OnBtnTreasure()
|
|
self.ChapterPanel:CancelSelect()
|
|
if self.CurChapter.RewardType == XDataCenter.FubenSpecialTrainManager.RewardType.StarReward then
|
|
self:OpenOneChildUi("UiSummerStarReward", self)
|
|
else
|
|
self:OpenOneChildUi("UiSummerTaskReward", self)
|
|
end
|
|
end |