707 lines
26 KiB
Lua
707 lines
26 KiB
Lua
|
-- 异构阵线2.0章节界面
|
|||
|
local XUiMaverick2Explore = XLuaUiManager.Register(XLuaUi, "UiMaverick2Explore")
|
|||
|
local XUiDoomsdayDragZoomProxy = require("XUi/XUiDoomsday/XUiDoomsdayDragZoomProxy")
|
|||
|
|
|||
|
local Select = CS.UiButtonState.Select
|
|||
|
local Normal = CS.UiButtonState.Normal
|
|||
|
local StagePrefabName =
|
|||
|
{
|
|||
|
"GridMaverick2Stage", -- 主线M
|
|||
|
"GridMaverick2StageCamp", -- 主线Boss
|
|||
|
"GridMaverick2Stage", -- 角色
|
|||
|
"GridMaverick2Stage", -- 挑战
|
|||
|
"GridMaverick2Stage", -- 每日关卡
|
|||
|
"GridMaverick2Stage", -- 积分关卡
|
|||
|
}
|
|||
|
|
|||
|
local CSVector2 = CS.UnityEngine.Vector2
|
|||
|
local CSVector3 = CS.UnityEngine.Vector3
|
|||
|
local ANIM_TIME = 0.5 --镜头移动动画时间
|
|||
|
local SELECT_STAGE_WIDTH_OFFSET = 0.382 -- 选中关卡时,聚焦关卡的宽度偏移值
|
|||
|
local GUIDE_DAILY_CHAPTER_ID = 2 -- 指引每日关卡的章节id
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnAwake()
|
|||
|
-- 章节页签
|
|||
|
self.BtnList = {} -- 当前显示页签按钮列表
|
|||
|
self.ChapterCfgs = {} --页签对应章节配置表列表
|
|||
|
self.SelectTabIndex = nil -- 当前选中页签下标
|
|||
|
self.IsDifficult = nil -- 获取当前是否困难模式
|
|||
|
self.UnOpenTabList = {} -- 未开放的页签列表
|
|||
|
|
|||
|
-- 章节地图
|
|||
|
self.MapDic = {} -- 地图对象,有根节点预制体、关卡预制体列表
|
|||
|
self.StageLoadDic = {} -- 记录地图节点加载完的关卡预置,包括普通难度和困难难度
|
|||
|
self.StageIdToUiObj = {} -- 记录关卡id对应的关卡预置的UiObject
|
|||
|
self.SelectStageId = nil -- 当前选中的关卡id
|
|||
|
|
|||
|
self:SetButtonCallBack()
|
|||
|
self:InitTimes()
|
|||
|
self:InitMap()
|
|||
|
self:InitAssetPanel()
|
|||
|
self:PlayChapterEndMovie()
|
|||
|
self.DragProxy = XUiDoomsdayDragZoomProxy.New(self.PanelDrag)
|
|||
|
self.Stage.gameObject:SetActiveEx(false)
|
|||
|
self.StageDifficult.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnStart()
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnEnable()
|
|||
|
self.Super.OnEnable(self)
|
|||
|
self:InitLastSelect()
|
|||
|
self:Refresh()
|
|||
|
|
|||
|
-- 战斗胜利回到关卡界面
|
|||
|
XDataCenter.Maverick2Manager.PlayBGM()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnDisable()
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:SetButtonCallBack()
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.OnClickBtnClose)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, function() XLuaUiManager.RunMain() end)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnMember, function() XLuaUiManager.Open("UiMaverick2Character") end)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnRank, function() XDataCenter.Maverick2Manager.OpenUiRank() end)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnMental, function() XLuaUiManager.Open("UiMaverick2Talent") end)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnNightmareStage, function() self:OnChangeDifficult(true) end)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnNormalStage, function() self:OnChangeDifficult(false) end)
|
|||
|
self:BindHelpBtn(self.BtnHelp, XMaverick2Configs.GetHelpKey())
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnClickBtnClose()
|
|||
|
self:Close()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnChangeDifficult(isDifficult)
|
|||
|
self.IsDifficult = isDifficult
|
|||
|
--self.SelectTabIndex = nil
|
|||
|
|
|||
|
-- 获取章节列表
|
|||
|
self.ChapterCfgs = self:GetShowChapterCfgs()
|
|||
|
|
|||
|
-- 确定当前选中页签下标
|
|||
|
local tabIndex = 1
|
|||
|
local chapterId = XDataCenter.Maverick2Manager.GetLastSelChapterId()
|
|||
|
for index, chapterCfg in ipairs(self.ChapterCfgs) do
|
|||
|
if chapterCfg.ChapterId == chapterId then
|
|||
|
tabIndex = index
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
self:PlayAnimation("QieHuan")
|
|||
|
self:RefreshTabList(tabIndex)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:Refresh()
|
|||
|
-- 主线指引提示
|
|||
|
self:RefreshMainLineTips()
|
|||
|
|
|||
|
-- 心智等级
|
|||
|
self:RefreshMentalLevel()
|
|||
|
XDataCenter.Maverick2Manager.CheckMentalLvUp(function()
|
|||
|
self:RefreshMentalLevel()
|
|||
|
end)
|
|||
|
|
|||
|
-- 新角色解锁/支援技能解锁弹窗tips
|
|||
|
self:ShowUnlockTips()
|
|||
|
|
|||
|
self:UpdateAssetPanel()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:InitTimes()
|
|||
|
self:SetAutoCloseInfo(XDataCenter.Maverick2Manager.GetActivityEndTime(), function(isClose)
|
|||
|
if isClose then
|
|||
|
XLuaUiManager.RunMain()
|
|||
|
XUiManager.TipMsg(XUiHelper.GetText("ActivityAlreadyOver"))
|
|||
|
else
|
|||
|
self:RefreshTabListOpenTime()
|
|||
|
self:RefreshDailyListTime()
|
|||
|
end
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnGetEvents()
|
|||
|
return { XEventId.EVENT_MAVERICK2_UPDATE_DAILY }
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnNotify(evt)
|
|||
|
if evt == XEventId.EVENT_MAVERICK2_UPDATE_DAILY then
|
|||
|
self:RefreshMap()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
---------------------------------------- 章节页签 begin ----------------------------------------
|
|||
|
|
|||
|
-- 初始化上次的选中
|
|||
|
function XUiMaverick2Explore:InitLastSelect()
|
|||
|
local chapterId = XDataCenter.Maverick2Manager.GetLastSelChapterId()
|
|||
|
local config = XMaverick2Configs.GetMaverick2Chapter(chapterId, true)
|
|||
|
local isDifficult = config.IfFlag == 1 and XDataCenter.Maverick2Manager.IsChapterUnlock(chapterId)
|
|||
|
self:OnChangeDifficult(isDifficult)
|
|||
|
end
|
|||
|
|
|||
|
-- 获取当前显示的章节配置表列表
|
|||
|
function XUiMaverick2Explore:GetShowChapterCfgs()
|
|||
|
local showCfgs = {}
|
|||
|
local cfgs = XMaverick2Configs.GetMaverick2Chapter()
|
|||
|
for _, cfg in ipairs(cfgs) do
|
|||
|
local isDifficult = cfg.IfFlag == 1
|
|||
|
if isDifficult == self.IsDifficult and XDataCenter.Maverick2Manager.IsChapterUnlock(cfg.ChapterId) then
|
|||
|
table.insert(showCfgs, cfg)
|
|||
|
end
|
|||
|
end
|
|||
|
return showCfgs
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新章节页签列表
|
|||
|
function XUiMaverick2Explore:RefreshTabList(selectIndex)
|
|||
|
-- 刷新页签ui
|
|||
|
self.BtnList = {}
|
|||
|
self.UnOpenTabList = {}
|
|||
|
XUiHelper.RefreshCustomizedList(self.BtnContent.transform, self.BtnTab.gameObject, #self.ChapterCfgs, function(index, go)
|
|||
|
local chapterCfg = self.ChapterCfgs[index]
|
|||
|
local btn = go:GetComponent("XUiButton")
|
|||
|
table.insert(self.BtnList, btn)
|
|||
|
btn:SetNameByGroup(0, chapterCfg.Name)
|
|||
|
local passStageCnt, allStageCnt = XDataCenter.Maverick2Manager.GetChapterProgress(chapterCfg.ChapterId)
|
|||
|
local isPass = passStageCnt >= allStageCnt
|
|||
|
local txtProgress = isPass and "" or XUiHelper.GetText("Maverick2ChapterCompleteProgress", math.floor(passStageCnt * 100 / allStageCnt))
|
|||
|
btn:SetNameByGroup(1, txtProgress)
|
|||
|
btn:ShowTag(isPass)
|
|||
|
btn:SetButtonState(Normal)
|
|||
|
local isRed = XDataCenter.Maverick2Manager.IsChapterShowRed(chapterCfg.ChapterId)
|
|||
|
btn:ShowReddot(isRed)
|
|||
|
|
|||
|
-- 开启时间
|
|||
|
local uiObj = go:GetComponent("UiObject")
|
|||
|
local txtProgress = uiObj:GetObject("TxtProgress")
|
|||
|
local txtOpenTime = uiObj:GetObject("TxtOpenTime")
|
|||
|
self:RefreshTabOpenTime(chapterCfg.ChapterId, txtProgress, txtOpenTime)
|
|||
|
local isOpen = XDataCenter.Maverick2Manager.IsChapterOpenTime(chapterCfg.ChapterId)
|
|||
|
if not isOpen then
|
|||
|
table.insert(self.UnOpenTabList, { ChapterId = chapterCfg.ChapterId, TxtProgress = txtProgress, TxtOpenTime = txtOpenTime })
|
|||
|
end
|
|||
|
|
|||
|
-- 章节解锁动画
|
|||
|
if isRed then
|
|||
|
uiObj:GetObject("BtnTabEnable").transform:PlayTimelineAnimation()
|
|||
|
end
|
|||
|
|
|||
|
local tempIndex = index
|
|||
|
XUiHelper.RegisterClickEvent(self, btn, function()
|
|||
|
self:OnBtnTabClick(tempIndex)
|
|||
|
end)
|
|||
|
end)
|
|||
|
|
|||
|
-- 刷新切换章节组按钮
|
|||
|
self:RefreshSwitchChapterListBtn()
|
|||
|
|
|||
|
-- 刷新ButtonGroup组件
|
|||
|
self.BtnContent:Init(self.BtnList,function(index)
|
|||
|
self:OnBtnTabClick(index)
|
|||
|
end)
|
|||
|
self.BtnContent:SelectIndex(selectIndex)
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新章节页签列表的开启时间
|
|||
|
function XUiMaverick2Explore:RefreshTabListOpenTime()
|
|||
|
if #self.UnOpenTabList > 0 then
|
|||
|
local cnt = #self.UnOpenTabList
|
|||
|
for i = cnt, 1, -1 do
|
|||
|
local tabInfo = self.UnOpenTabList[i]
|
|||
|
self:RefreshTabOpenTime(tabInfo.ChapterId, tabInfo.TxtProgress, tabInfo.TxtOpenTime)
|
|||
|
local isOpen = XDataCenter.Maverick2Manager.IsChapterOpenTime(tabInfo.ChapterId)
|
|||
|
if isOpen then
|
|||
|
table.remove(self.UnOpenTabList, i)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新每日关卡的倒计时时间
|
|||
|
function XUiMaverick2Explore:RefreshDailyListTime()
|
|||
|
local dailyStageDic = XDataCenter.Maverick2Manager.GetDailyStage()
|
|||
|
for stageId, isExit in pairs(dailyStageDic) do
|
|||
|
if stageId and isExit and self.StageIdToUiObj[stageId] then
|
|||
|
local refreshTime = XTime.GetSeverNextRefreshTime()
|
|||
|
local nowTime = XTime.GetServerNowTimestamp()
|
|||
|
local showTime = XUiHelper.GetTime(refreshTime - nowTime, XUiHelper.TimeFormatType.ACTIVITY)
|
|||
|
local textTime = self.StageIdToUiObj[stageId]:GetObject("TxtTime")
|
|||
|
textTime.text = XUiHelper.GetText("DrawFreeTicketCoolDown", showTime)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新章节页签的开启时间
|
|||
|
function XUiMaverick2Explore:RefreshTabOpenTime(chapterId, txtProgress, txtOpenTime)
|
|||
|
local isOpen = XDataCenter.Maverick2Manager.IsChapterOpenTime(chapterId)
|
|||
|
txtProgress.gameObject:SetActiveEx(isOpen)
|
|||
|
txtOpenTime.gameObject:SetActiveEx(not isOpen)
|
|||
|
if not isOpen then
|
|||
|
local openTime = XDataCenter.Maverick2Manager.GetChapterOpenTime(chapterId)
|
|||
|
txtOpenTime.text = XUiHelper.GetTime(openTime, XUiHelper.TimeFormatType.DAY_HOUR)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnBtnTabClick(index)
|
|||
|
if self.SelectTabIndex == index then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- 检测页签是否到开放时间
|
|||
|
local chapterId = self.ChapterCfgs[index].ChapterId
|
|||
|
for _, info in ipairs(self.UnOpenTabList) do
|
|||
|
if info.ChapterId == chapterId then
|
|||
|
XUiManager.TipText("RiftChapterTimeLimit")
|
|||
|
self.BtnContent:SelectIndex(self.SelectTabIndex)
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 切换按钮状态
|
|||
|
self.SelectTabIndex = index
|
|||
|
for index, btn in ipairs(self.BtnList) do
|
|||
|
local state = index == self.SelectTabIndex and Select or Normal
|
|||
|
btn:SetButtonState(state)
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新列表
|
|||
|
self:RefreshMap()
|
|||
|
|
|||
|
-- 保存最后选中章节记录
|
|||
|
XDataCenter.Maverick2Manager.SaveLastSelChapterId(chapterId)
|
|||
|
|
|||
|
-- 移除红点
|
|||
|
self.BtnList[index]:ShowReddot(false)
|
|||
|
local characterId = self:GetCurChapterId()
|
|||
|
XDataCenter.Maverick2Manager.RemveChapterRed(characterId)
|
|||
|
|
|||
|
-- 播放剧情
|
|||
|
self:PlayChapterStartMovie()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:GetCurChapterId()
|
|||
|
local chapterId = self.ChapterCfgs[self.SelectTabIndex].ChapterId
|
|||
|
return chapterId
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
---------------------------------------- 章节页签 end ----------------------------------------
|
|||
|
|
|||
|
|
|||
|
---------------------------------------- 章节地图 begin ----------------------------------------
|
|||
|
-- 播放第一次打开章节的开幕剧情
|
|||
|
function XUiMaverick2Explore:PlayChapterStartMovie()
|
|||
|
local curChapterId = self:GetCurChapterId()
|
|||
|
XDataCenter.Maverick2Manager.PlayChapterMovie(curChapterId, function()
|
|||
|
-- 剧情播放结束,重新播音效
|
|||
|
XDataCenter.Maverick2Manager.PlayBGM()
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
-- 初始化预制体上的地图
|
|||
|
function XUiMaverick2Explore:InitMap()
|
|||
|
self.MapDic = {}
|
|||
|
|
|||
|
local index = 1
|
|||
|
while(self["Map" .. index])
|
|||
|
do
|
|||
|
local map = {}
|
|||
|
self.MapDic[index] = map
|
|||
|
|
|||
|
local mapGo = self["Map" .. index]
|
|||
|
map.gameObject = mapGo.gameObject
|
|||
|
map.StageGos = {}
|
|||
|
local maxCnt = mapGo.transform.childCount
|
|||
|
for i = 1, maxCnt do
|
|||
|
local stageGo = mapGo:GetObject("Stage"..i)
|
|||
|
if stageGo then
|
|||
|
table.insert(map.StageGos, stageGo)
|
|||
|
end
|
|||
|
end
|
|||
|
index = index + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新地图
|
|||
|
function XUiMaverick2Explore:RefreshMap()
|
|||
|
local chapterId = self:GetCurChapterId()
|
|||
|
local config = XMaverick2Configs.GetMaverick2Chapter(chapterId, true)
|
|||
|
|
|||
|
-- 显示当前章节的地图
|
|||
|
for _, map in pairs(self.MapDic) do
|
|||
|
map.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新背景图
|
|||
|
self.RImgMapBg:SetRawImage(config.MapBg)
|
|||
|
-- 刷新特效
|
|||
|
local showEffect = config.MapEffect and config.MapEffect ~= ""
|
|||
|
self.Effect.gameObject:SetActiveEx(showEffect)
|
|||
|
if showEffect then
|
|||
|
self.Effect:LoadUiEffect(config.MapEffect)
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新当前地图关卡
|
|||
|
self.MapDic[config.Map].gameObject:SetActiveEx(true)
|
|||
|
local stageGos = self.MapDic[config.Map].StageGos
|
|||
|
for _, stageGo in ipairs(stageGos) do
|
|||
|
stageGo.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
local stageCfgs = XMaverick2Configs.GetChapterStages(chapterId)
|
|||
|
for index, stageCfg in ipairs(stageCfgs) do
|
|||
|
local stageGo = stageGos[stageCfg.IconPos]
|
|||
|
local isUnlock = false
|
|||
|
local isActiveDailyStage = false
|
|||
|
if stageCfg then
|
|||
|
isUnlock = XDataCenter.Maverick2Manager.IsStageUnlock(stageCfg.StageId)
|
|||
|
isActiveDailyStage = XDataCenter.Maverick2Manager.IsShowDailyStage(stageCfg.StageId)
|
|||
|
end
|
|||
|
local isShowStage = isUnlock or isActiveDailyStage
|
|||
|
if isShowStage then
|
|||
|
stageGo.gameObject:SetActiveEx(true)
|
|||
|
self:RefreshStage(stageCfg, stageGo)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新每日关卡倒计时
|
|||
|
self:RefreshDailyListTime()
|
|||
|
|
|||
|
-- 聚焦关卡
|
|||
|
local focusStage = nil -- 聚焦关卡
|
|||
|
for _, stageCfg in ipairs(stageCfgs) do
|
|||
|
local isCompare = false
|
|||
|
if stageCfg.StageType == XMaverick2Configs.StageType.Daily then
|
|||
|
local isActive = XDataCenter.Maverick2Manager.IsShowDailyStage(stageCfg.StageId)
|
|||
|
isCompare = isActive
|
|||
|
else
|
|||
|
local isUnlock = XDataCenter.Maverick2Manager.IsStageUnlock(stageCfg.StageId)
|
|||
|
local isPass = XDataCenter.Maverick2Manager.IsStagePassed(stageCfg.StageId)
|
|||
|
isCompare = isUnlock and not isPass
|
|||
|
end
|
|||
|
|
|||
|
if isCompare then
|
|||
|
if focusStage == nil or XMaverick2Configs.FocusStageOrder[stageCfg.StageType] < XMaverick2Configs.FocusStageOrder[focusStage.StageType] then
|
|||
|
focusStage = stageCfg
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 特写指引聚焦每日关卡的章节id
|
|||
|
local isNotOpenedDaily = not XDataCenter.Maverick2Manager.IsOpenedDailyStage()
|
|||
|
if chapterId == GUIDE_DAILY_CHAPTER_ID and isNotOpenedDaily then
|
|||
|
for _, stageCfg in ipairs(stageCfgs) do
|
|||
|
if stageCfg.StageType == XMaverick2Configs.StageType.Daily then
|
|||
|
local isActive = XDataCenter.Maverick2Manager.IsShowDailyStage(stageCfg.StageId)
|
|||
|
if isActive then
|
|||
|
focusStage = stageCfg
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if focusStage then
|
|||
|
local uiObj = self.StageIdToUiObj[focusStage.StageId]
|
|||
|
uiObj:GetObject("Effect").gameObject:SetActiveEx(true)
|
|||
|
self:FocusStage(uiObj.gameObject, nil, nil, ANIM_TIME)
|
|||
|
else
|
|||
|
self:FocusStage(nil, nil, nil, ANIM_TIME)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:RefreshStage(stageCfg, goParent)
|
|||
|
local stageId = stageCfg.StageId
|
|||
|
local instanceID = goParent:GetInstanceID()
|
|||
|
|
|||
|
-- 隐藏Stage和StageDifficult两种关卡
|
|||
|
if self.StageLoadDic[instanceID] then
|
|||
|
local stage = self.StageLoadDic[instanceID].Stage
|
|||
|
|
|||
|
if stage then
|
|||
|
stage.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
local stageDifficult = self.StageLoadDic[instanceID].StageDifficult
|
|||
|
if stageDifficult then
|
|||
|
stageDifficult.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
else
|
|||
|
self.StageLoadDic[instanceID] = {}
|
|||
|
end
|
|||
|
|
|||
|
-- 显示、加载、刷新当前关卡
|
|||
|
local isDifficult = self:IsCurDifficult()
|
|||
|
local uiObj = isDifficult and self.StageLoadDic[instanceID].StageDifficult or self.StageLoadDic[instanceID].Stage
|
|||
|
|
|||
|
-- 创建预制体
|
|||
|
if not uiObj then
|
|||
|
if isDifficult then
|
|||
|
local go = CS.UnityEngine.GameObject.Instantiate(self.StageDifficult, goParent)
|
|||
|
self.StageLoadDic[instanceID].StageDifficult = go
|
|||
|
uiObj = go:GetComponent("UiObject")
|
|||
|
else
|
|||
|
local go = CS.UnityEngine.GameObject.Instantiate(self.Stage, goParent)
|
|||
|
self.StageLoadDic[instanceID].Stage = go
|
|||
|
uiObj = go:GetComponent("UiObject")
|
|||
|
end
|
|||
|
end
|
|||
|
self.StageIdToUiObj[stageId] = uiObj
|
|||
|
|
|||
|
-- 刷新ui
|
|||
|
uiObj.gameObject:SetActiveEx(true)
|
|||
|
uiObj:GetObject("BgNormal").gameObject:SetActiveEx(true)
|
|||
|
uiObj:GetObject("BgSelect").gameObject:SetActiveEx(false)
|
|||
|
local typeConfig = XMaverick2Configs.GetMaverick2StageType(stageCfg.StageType, true)
|
|||
|
uiObj:GetObject("IconNormal"):SetSprite(typeConfig.Icon)
|
|||
|
uiObj:GetObject("IconSelect"):SetSprite(typeConfig.Icon)
|
|||
|
local isPass = XDataCenter.Maverick2Manager.IsStagePassed(stageId)
|
|||
|
uiObj:GetObject("ImgClearNormal").gameObject:SetActiveEx(isPass)
|
|||
|
uiObj:GetObject("ImgClearSelect").gameObject:SetActiveEx(isPass)
|
|||
|
uiObj:GetObject("Effect").gameObject:SetActiveEx(false)
|
|||
|
|
|||
|
-- 积分关卡
|
|||
|
local isScore = XMaverick2Configs.StageType.Score == stageCfg.StageType
|
|||
|
local txtScore = uiObj:GetObject("TxtScore")
|
|||
|
txtScore.gameObject:SetActiveEx(isScore)
|
|||
|
if isScore then
|
|||
|
local record = XDataCenter.Maverick2Manager.GetScoreStageRecord()
|
|||
|
txtScore.text = record.Score and tostring(record.Score) or "0"
|
|||
|
end
|
|||
|
|
|||
|
-- 每日关卡,这里只控制显示,刷新在RefreshDailyListTime()函数
|
|||
|
local isDaily = stageCfg.StageType == XMaverick2Configs.StageType.Daily
|
|||
|
local txtTime = uiObj:GetObject("TxtTime")
|
|||
|
txtTime.gameObject:SetActiveEx(isDaily)
|
|||
|
|
|||
|
-- 注册事件
|
|||
|
XUiHelper.RegisterClickEvent(self, uiObj:GetObject("BtnClick"), function()
|
|||
|
self:OnClickStage(stageId)
|
|||
|
end)
|
|||
|
|
|||
|
-- 解锁动画
|
|||
|
local isPlay = XDataCenter.Maverick2Manager.IsStagePlayUnlockAnim(stageId)
|
|||
|
if isPlay then
|
|||
|
XDataCenter.Maverick2Manager.SetStagePlayUnlockAnim(stageId)
|
|||
|
uiObj:GetObject("AnimEnable").transform:PlayTimelineAnimation()
|
|||
|
local line = goParent:Find("GridMaverick2StageLine")
|
|||
|
if line then
|
|||
|
local lineUiObj = line:GetComponent("UiObject")
|
|||
|
lineUiObj:GetObject("AnimEnable"):PlayTimelineAnimation()
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:OnClickStage(stageId)
|
|||
|
if self.SelectStageId == stageId then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self:CloseStageSelect()
|
|||
|
self:OpenStageSelect(stageId)
|
|||
|
self:CloseAllStageTipsEffect()
|
|||
|
|
|||
|
local uiObj = self.StageIdToUiObj[stageId]
|
|||
|
self:FocusStage(uiObj.gameObject, SELECT_STAGE_WIDTH_OFFSET, nil, ANIM_TIME)
|
|||
|
|
|||
|
-- 选中动画
|
|||
|
uiObj:GetObject("BgSelectEnable").transform:PlayTimelineAnimation(function()
|
|||
|
uiObj:GetObject("BgSelectLoop").transform:PlayTimelineAnimation(nil, nil, CS.UnityEngine.Playables.DirectorWrapMode.Loop)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
-- 打开关卡选中
|
|||
|
function XUiMaverick2Explore:OpenStageSelect(stageId)
|
|||
|
self.SelectStageId = stageId
|
|||
|
local isDifficult = self:IsCurDifficult()
|
|||
|
local uiObj = self.StageIdToUiObj[stageId]
|
|||
|
uiObj:GetObject("BgNormal").gameObject:SetActiveEx(false)
|
|||
|
uiObj:GetObject("BgSelect").gameObject:SetActiveEx(true)
|
|||
|
XLuaUiManager.Open("UiMaverick2StageDetail", stageId, function()
|
|||
|
self:CloseStageSelect()
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
-- 关闭关卡选中
|
|||
|
function XUiMaverick2Explore:CloseStageSelect()
|
|||
|
if not self.SelectStageId then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local stageId = self.SelectStageId
|
|||
|
self.SelectStageId = nil
|
|||
|
local isDifficult = self:IsCurDifficult()
|
|||
|
local uiObj = self.StageIdToUiObj[stageId]
|
|||
|
uiObj:GetObject("BgNormal").gameObject:SetActiveEx(true)
|
|||
|
uiObj:GetObject("BgSelect").gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
-- 聚焦在关卡
|
|||
|
function XUiMaverick2Explore:FocusStage(stageObj, widthOffset, heightOffset, duration, easeType)
|
|||
|
widthOffset = widthOffset or 0.5
|
|||
|
heightOffset = heightOffset or 0.5
|
|||
|
duration = duration or 0
|
|||
|
easeType = easeType or CS.DG.Tweening.Ease.Linear
|
|||
|
local midScreenPos =
|
|||
|
CS.UnityEngine.Vector2(CS.UnityEngine.Screen.width * widthOffset, CS.UnityEngine.Screen.height * heightOffset)
|
|||
|
local _, midPos =
|
|||
|
CS.UnityEngine.RectTransformUtility.ScreenPointToLocalPointInRectangle(
|
|||
|
self.PanelStages,
|
|||
|
midScreenPos,
|
|||
|
CS.UnityEngine.Camera.main
|
|||
|
)
|
|||
|
local offset = CSVector3(midPos.x, midPos.y, 0)
|
|||
|
if stageObj then
|
|||
|
-- 避免地图节点缩放影响
|
|||
|
local stagePos = stageObj.transform.parent.localPosition
|
|||
|
local mapGo = stageObj.transform.parent.parent
|
|||
|
stagePos.x = stagePos.x * mapGo.localScale.x
|
|||
|
stagePos.y = stagePos.y * mapGo.localScale.y
|
|||
|
|
|||
|
offset = offset - stagePos
|
|||
|
end
|
|||
|
|
|||
|
-- 避免缩放影响
|
|||
|
offset.x = offset.x * self.PanelStages.localScale.x
|
|||
|
offset.y = offset.y * self.PanelStages.localScale.y
|
|||
|
self.AnimOffset = offset
|
|||
|
self.PanelStages:DOLocalMove(self.PanelStages.localPosition + offset, duration)
|
|||
|
end
|
|||
|
|
|||
|
-- 关闭所有关卡提示特效
|
|||
|
function XUiMaverick2Explore:CloseAllStageTipsEffect()
|
|||
|
local chapterId = self:GetCurChapterId()
|
|||
|
local stageCfgs = XMaverick2Configs.GetChapterStages(chapterId)
|
|||
|
for _, stageCfg in ipairs(stageCfgs) do
|
|||
|
local uiObj = self.StageIdToUiObj[stageCfg.StageId]
|
|||
|
if uiObj then
|
|||
|
uiObj:GetObject("Effect").gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
---------------------------------------- 章节地图 end ----------------------------------------
|
|||
|
|
|||
|
---------------------------------------- 资源栏 begin ----------------------------------------
|
|||
|
|
|||
|
function XUiMaverick2Explore:InitAssetPanel()
|
|||
|
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
|
|||
|
XDataCenter.ItemManager.AddCountUpdateListener(
|
|||
|
{
|
|||
|
XDataCenter.ItemManager.ItemId.Maverick2Coin,
|
|||
|
},
|
|||
|
handler(self, self.UpdateAssetPanel),
|
|||
|
self.AssetActivityPanel
|
|||
|
)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMaverick2Explore:UpdateAssetPanel()
|
|||
|
self.AssetActivityPanel:Refresh(
|
|||
|
{
|
|||
|
XDataCenter.ItemManager.ItemId.Maverick2Coin,
|
|||
|
}
|
|||
|
)
|
|||
|
end
|
|||
|
---------------------------------------- 资源栏 end ----------------------------------------
|
|||
|
|
|||
|
-- 刷新主线提示目的
|
|||
|
function XUiMaverick2Explore:RefreshMainLineTips()
|
|||
|
local tips = nil
|
|||
|
local stageCfgs = XMaverick2Configs.GetMaverick2Stage()
|
|||
|
for _, stageCfg in pairs(stageCfgs) do
|
|||
|
local isUnlock = XDataCenter.Maverick2Manager.IsStageUnlock(stageCfg.StageId)
|
|||
|
local isPass = XDataCenter.Maverick2Manager.IsStagePassed(stageCfg.StageId)
|
|||
|
if isUnlock and not isPass and stageCfg.MainlineTips then
|
|||
|
tips = stageCfg.MainlineTips
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local isShow = tips ~= nil
|
|||
|
self.PanelGuide.gameObject:SetActiveEx(isShow)
|
|||
|
if isShow then
|
|||
|
self.TxtGuideTips.text = tips
|
|||
|
local isDifficult = self:IsCurDifficult()
|
|||
|
self.RImgGuideNormal.gameObject:SetActiveEx(not isDifficult)
|
|||
|
self.RImgGuidNightmare.gameObject:SetActiveEx(isDifficult)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新心智等级
|
|||
|
function XUiMaverick2Explore:RefreshMentalLevel()
|
|||
|
local mentalLv = XDataCenter.Maverick2Manager.GetMentalLv()
|
|||
|
local maxMentalLv = XDataCenter.Maverick2Manager.GetMentalMaxLv()
|
|||
|
self.MentalLevel.text = tostring(mentalLv)
|
|||
|
self.MentalProgress.fillAmount = mentalLv / maxMentalLv
|
|||
|
|
|||
|
local isMax = mentalLv == maxMentalLv
|
|||
|
if isMax then
|
|||
|
self.TxtUnitNumber.text = "MAX"
|
|||
|
self.RawImageUnit.gameObject:SetActiveEx(false)
|
|||
|
self.MentalProgress.fillAmount = 1
|
|||
|
else
|
|||
|
local unitCnt = XDataCenter.Maverick2Manager.GetUnitCount()
|
|||
|
local config = XMaverick2Configs.GetMaverick2Mental(mentalLv + 1, true)
|
|||
|
self.TxtUnitNumber.text = string.format("<color=#C64141>%s</color>/%s", unitCnt, config.NeedUnit)
|
|||
|
self.RawImageUnit.gameObject:SetActiveEx(true)
|
|||
|
local itemIcon = XItemConfigs.GetItemIconById(XDataCenter.ItemManager.ItemId.Maverick2Unit)
|
|||
|
self.RawImageUnit:SetRawImage(itemIcon)
|
|||
|
self.MentalProgress.fillAmount = unitCnt / config.NeedUnit
|
|||
|
end
|
|||
|
|
|||
|
-- 红点
|
|||
|
local robotId = XDataCenter.Maverick2Manager.GetLastSelRobotId()
|
|||
|
local isRed = XDataCenter.Maverick2Manager.IsShowTalentRed(robotId)
|
|||
|
self.BtnMental.transform:Find("Red").gameObject:SetActiveEx(isRed)
|
|||
|
end
|
|||
|
|
|||
|
-- 新角色解锁/支援技能解锁弹窗tips
|
|||
|
function XUiMaverick2Explore:ShowUnlockTips()
|
|||
|
XDataCenter.Maverick2Manager.CheckRobotUnlock()
|
|||
|
XDataCenter.Maverick2Manager.CheckAssistTalentLvUp()
|
|||
|
end
|
|||
|
|
|||
|
-- 当前是否处于困难模式
|
|||
|
function XUiMaverick2Explore:IsCurDifficult()
|
|||
|
return self.IsDifficult == true
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新切换章节组按钮
|
|||
|
function XUiMaverick2Explore:RefreshSwitchChapterListBtn()
|
|||
|
local isUnlock = XDataCenter.Maverick2Manager.IsUnlockDifficultChapterList()
|
|||
|
if isUnlock then
|
|||
|
local isDifficult = self:IsCurDifficult()
|
|||
|
self.BtnNormalStage.gameObject:SetActiveEx(isDifficult)
|
|||
|
self.BtnNightmareStage.gameObject:SetActiveEx(not isDifficult)
|
|||
|
else
|
|||
|
self.BtnNormalStage.gameObject:SetActiveEx(false)
|
|||
|
self.BtnNightmareStage.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 战斗结束回到主界面播章节结束剧情
|
|||
|
function XUiMaverick2Explore:PlayChapterEndMovie()
|
|||
|
local lastPassStageId = XDataCenter.Maverick2Manager.GetLastPassStageId()
|
|||
|
if lastPassStageId then
|
|||
|
local key = XDataCenter.Maverick2Manager.GetActivitySaveKey() .. "UiMaverick2Explore_PlayChapterEndMovie_" .. tostring(lastPassStageId)
|
|||
|
if XSaveTool.GetData(key) then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local stageCfg = XMaverick2Configs.GetMaverick2Stage(lastPassStageId, true)
|
|||
|
local movieCfgs = XMaverick2Configs.GetMaverick2Movie()
|
|||
|
for _, movieCfg in ipairs(movieCfgs) do
|
|||
|
for i, stageId in ipairs(movieCfg.CloseStageIds) do
|
|||
|
if stageId == lastPassStageId then
|
|||
|
local movieId = movieCfg.CloseMovieIds[i]
|
|||
|
XDataCenter.MovieManager.PlayMovie(movieId)
|
|||
|
XSaveTool.SaveData(key, true)
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|