forked from endernon/PGRData
402 lines
No EOL
14 KiB
Lua
402 lines
No EOL
14 KiB
Lua
--大秘境主界面
|
||
local XUiRiftMain = XLuaUiManager.Register(XLuaUi, "UiRiftMain")
|
||
local XUiPanel3DMap = require("XUi/XUiRift/Grid/XUiPanelRiftMain3D")
|
||
local XUiGridRiftChapterOutliers = require("XUi/XUiRift/Grid/XUiGridRiftChapterOutliers") -- 主界面看异常点用的,对应作战层
|
||
|
||
function XUiRiftMain:OnAwake()
|
||
self.CurrSelectIndex = 1
|
||
self.CurrSelectChapter = nil
|
||
self.OutliersGridDic = {}
|
||
self.FuncUnlockItemId = nil -- 特权解锁的道具id
|
||
self.ChildUi = nil
|
||
self.RewardGridList = {}
|
||
|
||
self:InitButton()
|
||
self:Init3DPanel()
|
||
self:InitAssetPanel()
|
||
|
||
CsXGameEventManager.Instance:RegisterEvent(XEventId.EVENT_GUIDE_START, handler(self, self.OnGuideStart))
|
||
end
|
||
|
||
function XUiRiftMain:InitButton()
|
||
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, function() XLuaUiManager.RunMain() end)
|
||
self:BindHelpBtn(self.BtnHelp, "RiftHelp")
|
||
XUiHelper.RegisterClickEvent(self, self.BtnRiftFightLayerSelect, self.OnBtniRiftFightLayerSelectClick)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnFullScreenQuitTip, self.OnBtnFullScreenQuitTipClick)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnTask, function() XLuaUiManager.Open("UiRiftTask") end)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnTask2, self.OnBtnFuncUnlockClick)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnRanking, function() XDataCenter.RiftManager.OpenUiPluginRanking() end)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnShop, function() XDataCenter.RiftManager.OpenUiShop() end)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnForGuide, self.OnBtnForGuideClick)
|
||
end
|
||
|
||
function XUiRiftMain:Init3DPanel()
|
||
local root = self.UiModelGo.transform
|
||
self.Panel3D = XUiPanel3DMap.New(root, self)
|
||
end
|
||
|
||
function XUiRiftMain:OnChildUiClose()
|
||
self:SetChapterInfoBubbleActive(false)
|
||
self:OpenChildToShowOrHide(true)
|
||
self.Panel3D:SetCameraAngleByChapterId(nil) -- 默认关闭区域层级俯视镜头
|
||
XScheduleManager.ScheduleOnce(function()
|
||
if XTool.UObjIsNil(self.GameObject) or XTool.UObjIsNil(self.Panel3D.GameObject) then
|
||
return
|
||
end
|
||
|
||
self.Panel3D:SetOtherGameObjectShowByChapterId(nil)
|
||
end, 300)
|
||
self.ChildUi = nil
|
||
self.Panel3D:Refresh()
|
||
self:RefreshUiShow()
|
||
end
|
||
|
||
function XUiRiftMain:OnEnable()
|
||
self:SetChapterInfoBubbleActive(false) -- 默认关闭数据构建层气泡
|
||
self.Panel3D:SetCameraAngleByChapterId(nil) -- 默认关闭区域层级俯视镜头
|
||
self.Panel3D:SetOtherGameObjectShowByChapterId(nil)
|
||
self.Panel3D:Refresh()
|
||
self:AutoPositioning()
|
||
self:RefreshUiShow()
|
||
self:SetTimer()
|
||
|
||
self:AutoOpenChild()
|
||
end
|
||
|
||
function XUiRiftMain:RefreshUiShow()
|
||
-- 目标(任务/权限回收)
|
||
self:RefreshUiTask()
|
||
self:RefreshFuncUnlock()
|
||
-- 资源栏
|
||
self:UpdateAssetPanel()
|
||
-- 商店展示道具
|
||
self:RefreshShopReward()
|
||
end
|
||
|
||
-- (被3D面板调用)
|
||
function XUiRiftMain:RefreshChapterInfoShow(xChapter)
|
||
self.TxtTitle.text = xChapter:GetConfig().Name
|
||
|
||
local textUnKnown = CS.XTextManager.GetText("UnKnown")
|
||
local isLock = xChapter:CheckHasLock()
|
||
-- 危险值
|
||
self.TxtDangerTip.text = isLock and textUnKnown or xChapter:GetConfig().DangerValue
|
||
|
||
-- 深度范围:第一个作战层id ~ 最后1个作战层id
|
||
local fightLayerList = xChapter:GetAllFightLayersOrderList()
|
||
local firstDeep = fightLayerList[1]:GetId()
|
||
local lastDeep = fightLayerList[#fightLayerList]:GetId()
|
||
self.TxtDepth.text = isLock and textUnKnown or CS.XTextManager.GetText("RiftChapterDepthRange", firstDeep, lastDeep)
|
||
-- 已探测
|
||
local currMaxFightLayer = xChapter:GetPassedLayerOrderMaxFightLayer()
|
||
local depth = currMaxFightLayer and currMaxFightLayer:GetId() or 0
|
||
self.TxtCurrPos.gameObject:SetActiveEx(not isLock)
|
||
self.TxtCurrPos.text = CS.XTextManager.GetText("RiftDepth", depth)
|
||
|
||
-- 层进度(清理进度)
|
||
local curr, total = xChapter:GetProgress()
|
||
self.TxtChapterClearProgress.text = isLock and textUnKnown or math.floor((curr/total)*100).."%"
|
||
-- 异常点
|
||
local outliersFightLayerList = xChapter:GetAllOutliersList() -- 所有异常点(多队伍层)
|
||
-- 刷新前先隐藏一遍
|
||
local text = ""
|
||
for i = 1, 4 do -- 最多只显示4个异常点,且只有固定的4个格子
|
||
local gridTrans = self.PanelOutliers:Find("Grid"..i)
|
||
gridTrans.gameObject:SetActiveEx(false)
|
||
end
|
||
for i = 1, 4 do
|
||
local gridTrans = self.PanelOutliers:Find("Grid"..i)
|
||
if i > #outliersFightLayerList then
|
||
gridTrans.gameObject:SetActiveEx(false)
|
||
else
|
||
local grid = self.OutliersGridDic[i]
|
||
if not grid then
|
||
grid = XUiGridRiftChapterOutliers.New(gridTrans, self)
|
||
self.OutliersGridDic[i] = grid
|
||
end
|
||
local xFightLayer = outliersFightLayerList[i]
|
||
grid:UpdateData(xFightLayer)
|
||
text = text..xFightLayer:GetId().."KM "
|
||
end
|
||
end
|
||
self.TxtOutlier.text = isLock and textUnKnown or text
|
||
-- 倒计时(没到时间不显示入口)
|
||
self.BtnRiftFightLayerSelect.gameObject:SetActive(not isLock)
|
||
self.PanelTime.gameObject:SetActive(isLock)
|
||
if xChapter:CheckTimeLock() then
|
||
local leftTime = xChapter:GetOpenLeftTime()
|
||
local leftTimeStr = XUiHelper.GetTime(leftTime, XUiHelper.TimeFormatType.PIVOT_COMBAT)
|
||
local leftText = CS.XTextManager.GetText("Residue")
|
||
local openText = CS.XTextManager.GetText("EscapeTimeCondition", leftTimeStr)
|
||
self.TxtLeftTime.text = leftText..openText
|
||
elseif xChapter:CheckPreLock() then
|
||
self.TxtLeftTime.text = CS.XTextManager.GetText("RiftChapterPreLimit")
|
||
end
|
||
end
|
||
|
||
-- (被3D面板调用)
|
||
-- 显示区域信息气泡
|
||
function XUiRiftMain:SetChapterInfoBubbleActive(flag)
|
||
self.PanelOutliers.gameObject:SetActiveEx(flag)
|
||
self.PanelTangchuan.gameObject:SetActiveEx(flag)
|
||
self.ImgLineChargeShadow.gameObject:SetActiveEx(flag)
|
||
self.BtnFullScreenQuitTip.gameObject:SetActiveEx(flag)
|
||
end
|
||
|
||
function XUiRiftMain:AutoOpenChild()
|
||
if self.ResumeLayer then -- 如果是战斗返回的, 重现出战斗前的ui情况
|
||
self:OpenOneChildUi("UiRiftFightLayerSelect", self, self.Panel3D, self.ResumeLayer:GetParent():GetId())
|
||
self:OpenChildToShowOrHide(false)
|
||
return
|
||
end
|
||
|
||
local curPlayingChapter, curPlayingLayer = XDataCenter.RiftManager.GetCurrPlayingChapter()
|
||
-- 如果有正在作战的战斗层 自动打开其所在区域
|
||
if curPlayingLayer then
|
||
if curPlayingLayer and curPlayingLayer:CheckHasStarted() then
|
||
self:OpenOneChildUi("UiRiftFightLayerSelect", self, self.Panel3D, curPlayingLayer:GetParent():GetId())
|
||
self:OpenChildToShowOrHide(false)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 自动滑动定位区域
|
||
-- 1.如果有正在作战的作战层 优先定位到区域
|
||
-- 2.如果有记录最后一次进入过查看的作战层 再定位到该区域
|
||
function XUiRiftMain:AutoPositioning()
|
||
local targetIndex = 1
|
||
|
||
local curPlayingChapter = XDataCenter.RiftManager.GetCurrPlayingChapter()
|
||
if curPlayingChapter then
|
||
targetIndex = curPlayingChapter:GetId()
|
||
else
|
||
local lastFightLayerData = XDataCenter.RiftManager.GetLastRecordFightLayer()
|
||
if not XTool.IsTableEmpty(lastFightLayerData) then
|
||
targetIndex = lastFightLayerData.ChapterId
|
||
end
|
||
end
|
||
self.CurrSelectIndex = targetIndex
|
||
-- 滑动chapter列表
|
||
self.Panel3D:FocusTargetNodeIndex(targetIndex, -1)
|
||
end
|
||
|
||
-- 自动滑动并打开目标区域的bubble
|
||
function XUiRiftMain:AutoPositioningToOpenBubbleByChapterId(chapterId)
|
||
self.Panel3D:FocusTargetNodeIndex(chapterId, -1, function ()
|
||
self.CurrSelectIndex = chapterId
|
||
self.CurrSelectChapter = XDataCenter.RiftManager.GetEntityChapterById(chapterId)
|
||
self:RefreshChapterInfoShow(self.CurrSelectChapter)
|
||
self:SetChapterInfoBubbleActive(true)
|
||
end)
|
||
end
|
||
|
||
function XUiRiftMain:OpenChildToShowOrHide(flag)
|
||
self.SafeAreaContentPane.gameObject:SetActiveEx(flag)
|
||
end
|
||
|
||
-- 进入区域
|
||
function XUiRiftMain:OnBtniRiftFightLayerSelectClick()
|
||
local currPlayingChapter = XDataCenter.RiftManager.GetCurrPlayingChapter()
|
||
if currPlayingChapter and currPlayingChapter ~= self.CurrSelectChapter then
|
||
XUiManager.TipError(CS.XTextManager.GetText("RiftChapterFightingLock"))
|
||
return
|
||
end
|
||
|
||
if not self.CurrSelectChapter or self.CurrSelectChapter:CheckHasLock() then
|
||
if self.CurrSelectChapter:CheckPreLock() then
|
||
XUiManager.TipError(CS.XTextManager.GetText("RiftChapterPreLimit"))
|
||
return
|
||
end
|
||
|
||
if self.CurrSelectChapter:CheckTimeLock() then
|
||
XUiManager.TipError(CS.XTextManager.GetText("RiftChapterTimeLimit"))
|
||
return
|
||
end
|
||
end
|
||
self:OpenOneChildUi("UiRiftFightLayerSelect", self, self.Panel3D, self.CurrSelectIndex)
|
||
self:OpenChildToShowOrHide(false)
|
||
self.CurrSelectChapter:SaveFirstEnter()
|
||
end
|
||
|
||
-- 点击选中Chapter
|
||
function XUiRiftMain:OnChapterSelected(gridRiftChapter3D)
|
||
self.CurrSelectChapter = gridRiftChapter3D.XChapter
|
||
self.CurrSelectIndex = self.CurrSelectChapter:GetId()
|
||
self:RefreshChapterInfoShow(self.CurrSelectChapter)
|
||
self.Panel3D:FocusTargetNodeIndex(self.CurrSelectIndex, -1, function ()
|
||
self:SetChapterInfoBubbleActive(true)
|
||
end)
|
||
end
|
||
|
||
-- 隐藏区域信息气泡
|
||
function XUiRiftMain:OnBtnFullScreenQuitTipClick()
|
||
self:SetChapterInfoBubbleActive(false)
|
||
end
|
||
|
||
-- 临时新手点击按钮,写死进入chapter1
|
||
function XUiRiftMain:OnBtnForGuideClick()
|
||
self.CurrSelectChapter = XDataCenter.RiftManager.GetEntityChapterById(1)
|
||
self.CurrSelectIndex = self.CurrSelectChapter:GetId()
|
||
self:RefreshChapterInfoShow(self.CurrSelectChapter)
|
||
self:SetChapterInfoBubbleActive(true)
|
||
|
||
self.BtnRiftFightLayerSelect.gameObject:GetComponent("CanvasGroup").alpha = 1
|
||
self.PanelTangchuan.gameObject:GetComponent("CanvasGroup").alpha = 1
|
||
self.TxtDepth.gameObject:GetComponent("CanvasGroup").alpha = 1
|
||
self.TxtCurrPos.gameObject:GetComponent("CanvasGroup").alpha = 1
|
||
self.TxtOutlier.gameObject:GetComponent("CanvasGroup").alpha = 1
|
||
self.TxtChapterClearProgress.transform.parent:GetComponent("CanvasGroup").alpha = 1
|
||
self.PanelTime.gameObject:GetComponent("CanvasGroup").alpha = 1
|
||
|
||
self.BtnForGuide.gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
-- 点击特权解锁
|
||
function XUiRiftMain:OnBtnFuncUnlockClick()
|
||
if self.FuncUnlockItemId then
|
||
local data = {
|
||
Id = self.FuncUnlockItemId,
|
||
Count = "0"
|
||
}
|
||
XLuaUiManager.Open("UiTip", data)
|
||
|
||
XDataCenter.RiftManager.CloseFuncUnlockRed()
|
||
self:RefreshFuncUnlock()
|
||
end
|
||
end
|
||
|
||
function XUiRiftMain:SetTimer()
|
||
self:StopTimer()
|
||
self:SetResetTime()
|
||
self.Timer = XScheduleManager.ScheduleForever(function()
|
||
self:SetResetTime()
|
||
end, XScheduleManager.SECOND, 0)
|
||
end
|
||
|
||
--显示倒计时与处理倒计时完成时事件
|
||
function XUiRiftMain:SetResetTime()
|
||
local startTime, endTimeSecond = XDataCenter.RiftManager.GetTime()
|
||
local now = XTime.GetServerNowTimestamp()
|
||
local leftTime = endTimeSecond - now
|
||
local remainTime = XUiHelper.GetTime(leftTime, XUiHelper.TimeFormatType.ACTIVITY)
|
||
self.TxtTime.text = CS.XTextManager.GetText("ShopActivityItemCount", remainTime)
|
||
if leftTime <= 0 then
|
||
self:OnActivityReset()
|
||
end
|
||
end
|
||
|
||
--停止界面计时器
|
||
function XUiRiftMain:StopTimer()
|
||
if self.Timer then
|
||
XScheduleManager.UnSchedule(self.Timer)
|
||
self.Timer = nil
|
||
end
|
||
end
|
||
|
||
--活动周期结束时弹回主界面
|
||
function XUiRiftMain:OnActivityReset()
|
||
if self.IsReseting then return end
|
||
self.IsReseting = true
|
||
self:StopTimer()
|
||
XLuaUiManager.RunMain()
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("RiftFinish"))
|
||
end
|
||
|
||
function XUiRiftMain:OnGuideStart()
|
||
if not self.ChildUi then
|
||
self.BtnForGuide.gameObject:SetActiveEx(true) -- 新手指引临时按钮
|
||
end
|
||
end
|
||
|
||
function XUiRiftMain:OnDisable()
|
||
self:StopTimer()
|
||
end
|
||
|
||
function XUiRiftMain:OnDestroy()
|
||
CsXGameEventManager.Instance:RemoveEvent(XEventId.EVENT_GUIDE_START, handler(self, self.OnGuideStart))
|
||
end
|
||
|
||
-- 记录战斗前后数据
|
||
function XUiRiftMain:OnReleaseInst()
|
||
return {
|
||
CurrFightLayer = XDataCenter.RiftManager.GetCurrSelectRiftStageGroup():GetParent(),
|
||
}
|
||
end
|
||
|
||
function XUiRiftMain:OnResume(data)
|
||
data = data or {}
|
||
self.ResumeLayer = {}
|
||
local xFightLayer = data.CurrFightLayer
|
||
if xFightLayer then
|
||
self.ResumeLayer = xFightLayer
|
||
end
|
||
end
|
||
|
||
function XUiRiftMain:InitAssetPanel()
|
||
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
|
||
XDataCenter.ItemManager.AddCountUpdateListener(
|
||
{
|
||
XDataCenter.ItemManager.ItemId.RiftGold,
|
||
XDataCenter.ItemManager.ItemId.RiftCoin
|
||
},
|
||
handler(self, self.UpdateAssetPanel),
|
||
self.AssetActivityPanel
|
||
)
|
||
end
|
||
|
||
function XUiRiftMain:UpdateAssetPanel()
|
||
self.AssetActivityPanel:Refresh(
|
||
{
|
||
XDataCenter.ItemManager.ItemId.RiftGold,
|
||
XDataCenter.ItemManager.ItemId.RiftCoin
|
||
}
|
||
)
|
||
end
|
||
|
||
-- 刷新任务ui
|
||
function XUiRiftMain:RefreshUiTask()
|
||
local titleName, desc = XDataCenter.RiftManager.GetBtnShowTask()
|
||
local isShow = titleName ~= nil
|
||
self.PanelTask.gameObject:SetActiveEx(isShow)
|
||
if isShow then
|
||
self.TxtTaskName.text = titleName
|
||
self.TxtTaskDesc.text = desc
|
||
local isShowRed = XDataCenter.RiftManager.CheckTaskCanReward()
|
||
self.BtnTask:ShowReddot(isShowRed)
|
||
end
|
||
end
|
||
|
||
-- 刷新特权解锁ui
|
||
function XUiRiftMain:RefreshFuncUnlock()
|
||
local unlockConfig = XDataCenter.RiftManager.GetNextFuncUnlockConfig()
|
||
local isShow = unlockConfig ~= nil
|
||
self.PanelTask2.gameObject:SetActiveEx(isShow)
|
||
if isShow then
|
||
self.FuncUnlockItemId = unlockConfig.ItemId
|
||
self.TxtTaskDesc2.text = unlockConfig.Desc
|
||
|
||
local isRed = XDataCenter.RiftManager.IsFuncUnlockRed()
|
||
self.BtnTask2:ShowReddot(isRed)
|
||
end
|
||
end
|
||
|
||
-- 刷新商店展示道具
|
||
function XUiRiftMain:RefreshShopReward()
|
||
local config = XRiftConfig.GetCfgByIdKey(XRiftConfig.TableKey.RiftShop, 1)
|
||
for i, itemId in ipairs(config.ShowItemId) do
|
||
local grid = self.RewardGridList[i]
|
||
if grid == nil then
|
||
local obj = self.GridReward
|
||
if i > 1 then
|
||
obj = CS.UnityEngine.GameObject.Instantiate(self.GridReward, self.GridReward.transform.parent)
|
||
end
|
||
grid = XUiGridCommon.New(self, obj)
|
||
table.insert(self.RewardGridList, grid)
|
||
end
|
||
|
||
grid:Refresh({TemplateId = itemId})
|
||
end
|
||
end
|
||
|
||
return XUiRiftMain |