PGRData/Script/matrix/xui/xuiescape/XUiEscapeMain.lua

223 lines
7.7 KiB
Lua
Raw Normal View History

local XUiEscapeChapterGrid = require("XUi/XUiEscape/XUiEscapeChapterGrid")
local INTERVAL_GRID_COUNT_SET_BG = 3 --间隔多少个格子增加背景图
--大逃杀玩法主界面
local XUiEscapeMain = XLuaUiManager.Register(XLuaUi, "UiEscapeMain")
function XUiEscapeMain:OnAwake()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.ImgBgList = {}
self.EscapeData = XDataCenter.EscapeManager.GetEscapeData()
self:InitButtonCallBack()
self:InitDynamicList()
CsXGameEventManager.Instance:RegisterEvent(XEventId.EVENT_GUIDE_START, handler(self, self.OnGuideStart))
end
function XUiEscapeMain:OnStart()
self:InitImgBgSize()
self:InitTimes()
end
function XUiEscapeMain:OnEnable()
XUiEscapeMain.Super.OnEnable(self)
self.UpdateImgBgPosSchedule = XScheduleManager.ScheduleForeverEx(handler(self, self.UpdateImgBgPos), 0, 0)
self:Refresh()
end
function XUiEscapeMain:OnDisable()
XUiEscapeMain.Super.OnDisable(self)
if self.UpdateImgBgPosSchedule then
XScheduleManager.UnSchedule(self.UpdateImgBgPosSchedule)
self.UpdateImgBgPosSchedule = nil
end
self:RemoveMoveAnimaTimer()
CsXGameEventManager.Instance:RemoveEvent(XEventId.EVENT_GUIDE_START, handler(self, self.OnGuideStart))
end
function XUiEscapeMain:RemoveMoveAnimaTimer()
if self.MoveAnimaTimer then
XScheduleManager.UnSchedule(self.MoveAnimaTimer)
self.MoveAnimaTimer = nil
end
end
function XUiEscapeMain:OnReleaseInst()
return self.IsNotPlayMoveAnima
end
function XUiEscapeMain:OnResume(value)
self.IsNotPlayMoveAnima = value
end
--更新背景位置
local LerpPosY
local LastImgBg
function XUiEscapeMain:UpdateImgBgPos()
LastImgBg = self.ImgBgList and self.ImgBgList[#self.ImgBgList]
if XTool.UObjIsNil(self.StageListContent) or XTool.UObjIsNil(self.PanelBg) or not self.InitStageListContentPos or XTool.UObjIsNil(LastImgBg) then
return
end
LerpPosY = math.min(math.abs(LastImgBg.transform.localPosition.y), math.abs(self.StageListContent.localPosition.y - self.InitStageListContentPos.y))
self.PanelBg.localPosition = Vector3(0, -LerpPosY, 0)
end
function XUiEscapeMain:InitImgBgSize()
self.ImgBgRectSize = self.RImgBg:GetComponent("RectTransform").rect.size
self.RectSize = self.Ui.GameObject:GetComponent("RectTransform").rect.size
self.ImgBgHeightLerp = (self.ImgBgRectSize.y - self.RectSize.y) / 2 --锚点在中心
end
function XUiEscapeMain:InitTimes()
-- 设置自动关闭和倒计时
self:SetAutoCloseInfo(XDataCenter.EscapeManager.GetActivityEndTime(), function(isClose)
if isClose then
XDataCenter.EscapeManager.HandleActivityEndTime()
return
end
self:UpdateTime()
end, nil, 0)
end
function XUiEscapeMain:InitChapterBgCount()
self.ChapterBgCount = math.ceil(#self.ChapterGroupIdList / 3) --每隔3个章节设置一张背景
end
function XUiEscapeMain:InitDynamicList()
self.ChapterGroupIdList = XEscapeConfigs.GetEscapeChapterGroupIdList()
self.DynamicTable = XDynamicTableNormal.New(self.PanelStageList)
self.DynamicTable:SetProxy(XUiEscapeChapterGrid)
self.DynamicTable:SetDelegate(self)
self.DynamicTable:SetDataSource(self.ChapterGroupIdList)
self.PanelStageContent.gameObject:SetActiveEx(false)
self:InitChapterBgCount()
end
function XUiEscapeMain:InitButtonCallBack()
self:RegisterClickEvent(self.BtnBack, self.Close)
self:RegisterClickEvent(self.BtnMainUi, function() XLuaUiManager.RunMain() end)
self:RegisterClickEvent(self.PanelMission, self.OnPanelMissionClick) --任务
self:BindHelpBtn(self.BtnHelp, XEscapeConfigs.GetHelpKey())
end
function XUiEscapeMain:Refresh()
self:UpdateImgBgList()
self.DynamicTable:ReloadDataSync()
self:CheckRedPoint()
end
function XUiEscapeMain:CheckRedPoint()
local isShow = XDataCenter.EscapeManager.CheckTaskCanReward()
self.PanelMission:ShowReddot(isShow)
end
function XUiEscapeMain:UpdateImgBgList()
local imgBg
local imgBgPath
for index = 1, self.ChapterBgCount do
imgBg = self.ImgBgList[index]
imgBgPath = XEscapeConfigs.GetMainBg(index)
if not imgBg then
imgBg = index == 1 and self.RImgBg or XUiHelper.Instantiate(self.RImgBg, self.PanelBg)
self.ImgBgList[index] = imgBg
if index ~= 1 then
imgBg.transform.localPosition = Vector3(0, self.ImgBgRectSize.y / 2 * index, 0)
end
end
if imgBgPath then
imgBg:SetRawImage(imgBgPath)
end
end
end
function XUiEscapeMain:UpdateTime()
local endTime = XDataCenter.EscapeManager.GetActivityEndTime()
local nowTimeStamp = XTime.GetServerNowTimestamp()
local time, timeDesc = XUiHelper.GetTime(endTime - nowTimeStamp, XUiHelper.TimeFormatType.ESCAPE_ACTIVITY)
self.TxtDay.text = XUiHelper.GetText("EscapeActivityTime", time, timeDesc)
end
function XUiEscapeMain:OnPanelMissionClick()
XLuaUiManager.Open("UiEscapeTask")
end
function XUiEscapeMain:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid.RootUi = self.RootUi
grid.GameObject.name = self.PanelStageContent.name .. index
grid:Refresh(self.ChapterGroupIdList[index], index, index == #self.ChapterGroupIdList)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RELOAD_COMPLETED then
if not self.InitStageListContentPos then
self.InitStageListContentPos = self.StageListContent.localPosition
end
self:PlayMoveAnima()
end
end
--首次打开界面,从最高点的章节,往当前挑战中或最新可挑战的章节移动的动画
function XUiEscapeMain:PlayMoveAnima()
if self.PlayingMoveAnima or self.IsNotPlayMoveAnima then
return
end
self.PlayingMoveAnima = true
self.IsNotPlayMoveAnima = true
XLuaUiManager.SetMask(true)
local reloadDataIndex = self:GetReloadDataIndex()
self.DynamicTable:ReloadDataSync(reloadDataIndex, false)
local jumpLocalPosition = self.StageListContent.localPosition
self.DynamicTable:ReloadDataSync(#self.ChapterGroupIdList, false)
local curContentPos = self.StageListContent.localPosition
local lerp = curContentPos - jumpLocalPosition
local onRefresh = function(f)
self.StageListContent.localPosition = curContentPos - lerp * f
end
local onFinish = function()
XLuaUiManager.SetMask(false)
self.PlayingMoveAnima = false
end
if not XTool.IsNumberValid(lerp.y) then
onFinish()
return
end
self.MoveAnimaTimer = XUiHelper.Tween(1, onRefresh, onFinish)
end
--获得动态列表定位到的格子下标
--一级:正在挑战中
--二级:当前已解锁的最高层区域
function XUiEscapeMain:GetReloadDataIndex()
local reloadDataIndex
local curChapterId = self.EscapeData:GetChapterId()
local chapterOpenId = XDataCenter.EscapeManager.GetChapterOpenId()
local chapterIdList
for index, groupId in ipairs(self.ChapterGroupIdList) do
chapterIdList = XEscapeConfigs.GetEscapeChapterIdListByGroupId(groupId)
for _, chapterId in ipairs(chapterIdList) do
if curChapterId == chapterId then
return index
end
if chapterOpenId == chapterId then
reloadDataIndex = index
end
if reloadDataIndex and not XTool.IsNumberValid(curChapterId) then
return reloadDataIndex
end
end
end
return reloadDataIndex
end
function XUiEscapeMain:OnGuideStart()
self:RemoveMoveAnimaTimer()
XLuaUiManager.ClearMask(true)
self.DynamicTable:ReloadDataSync(1, false)
end