PGRData/Script/matrix/xmanager/XTwoSideTowerManager.lua
2024-09-01 22:49:41 +02:00

315 lines
10 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---@return TwoSideTowerManager
XTwoSideTowerManagerCreator = function()
local XTwoSideTowerChapter = require("XEntity/XTwoSideTower/XTwoSideTowerChapter")
---@class TwoSideTowerManager
local TwoSideTowerManager = {}
local ActivityId = 1
local ActivityCfg = XTwoSideTowerConfigs.GetActivityCfg(1)
local ShowSettle = false
local ChapterDic = {}
local PassStageList = {}
if ActivityCfg then
for _, chapterId in pairs(ActivityCfg.ChapterIds) do
if not ChapterDic[chapterId] then
ChapterDic[chapterId] = XTwoSideTowerChapter.New(chapterId)
end
end
end
---@return XTwoSideTowerChapter
function TwoSideTowerManager.GetChapter(chapterId)
return ChapterDic[chapterId]
end
function TwoSideTowerManager.GetChapterDic()
return ChapterDic
end
function TwoSideTowerManager.GetEndTime()
if not ActivityCfg then
return
end
return XFunctionManager.GetEndTimeByTimeId(ActivityCfg.TimeId)
end
function TwoSideTowerManager.GetStartTime()
if not ActivityCfg then
return
end
return XFunctionManager.GetStartTimeByTimeId(ActivityCfg.TimeId)
end
function TwoSideTowerManager.InitStageInfo()
local stageCfgs = XTwoSideTowerConfigs.GetStageCfgs()
for _, stage in pairs(stageCfgs) do
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stage.Id)
if stageInfo then
stageInfo.Type = XDataCenter.FubenManager.StageType.TwoSideTower
end
end
end
function TwoSideTowerManager.FinishFight(settle)
local result = settle.TwoSideTowerSettleResult or {}
ShowSettle = result.FirstCleared
if settle.IsWin then
XDataCenter.FubenManager.ChallengeWin(settle)
else
XDataCenter.FubenManager.ChallengeLose(settle)
end
end
function TwoSideTowerManager.CheckTaskFinish()
local taskList = XDataCenter.TaskManager.GetTimeLimitTaskListByGroupId(XDataCenter.TwoSideTowerManager.GetLimitTaskId())
for _, task in pairs(taskList) do
if XDataCenter.TaskManager.CheckTaskAchieved(task.Id) then
return true
end
end
return false
end
function TwoSideTowerManager.CheckChapterOpenRed()
local hasNewOpen = false
for _, chapter in pairs(ChapterDic) do
local desc, isOpen = chapter:GetProcess()
local saveKey = TwoSideTowerManager.GetChapterOpenRedKey(chapter:GetId())
if isOpen and (not XSaveTool.GetData(saveKey)) then
hasNewOpen = true
end
end
return hasNewOpen
end
function TwoSideTowerManager.GetChapterOpenRedKey(chapterId)
return string.format("TwoSideTowerNewChapterFlag_%s_%s_%s", XPlayer.Id, ActivityId, chapterId)
end
function TwoSideTowerManager.CheckOpenUiChapterSettle(chapterId)
if ShowSettle then
local chapter = TwoSideTowerManager.GetChapter(chapterId)
XLuaUiManager.Open("UiTwoSideTowerSettle", chapter)
end
ShowSettle = false
end
function TwoSideTowerManager.IsOpen()
if not ActivityCfg then
return false
end
return XFunctionManager.CheckInTimeByTimeId(ActivityCfg.TimeId)
end
function TwoSideTowerManager.GetActivitySaveKey()
return string.format("TwoSideTowerManager_GetActivitySaveKey_XPlayer.Id:%s_ActivityId:%s_", XPlayer.Id, ActivityId)
end
-- 检测打开章节特性总览界面
function TwoSideTowerManager.CheckOpenUiChapterOverview(chapterId)
local key = TwoSideTowerManager.GetChapterOverviewSaveKey(chapterId)
if XSaveTool.GetData(key) then
return
end
XLuaUiManager.Open("UiTwoSideTowerOverview", chapterId)
XSaveTool.SaveData(key, true)
end
-- 章节特性总览key
function TwoSideTowerManager.GetChapterOverviewSaveKey(chapterId)
return XDataCenter.Maverick2Manager.GetActivitySaveKey() .. "TwoSideTowerManager_GetChapterOverviewSaveKey_chapterId:" .. tostring(chapterId)
end
-- 设置关卡是否不再提示
function TwoSideTowerManager.SetDiglogHintCookie(isSelect)
local key = TwoSideTowerManager.GetDiglogHintCookieKey()
XSaveTool.SaveData(key, isSelect)
end
-- 获取关卡是否不再提示
function TwoSideTowerManager.GetDiglogHintCookie()
local key = TwoSideTowerManager.GetDiglogHintCookieKey()
local isSelect = XSaveTool.GetData(key) == true
return isSelect
end
-- 关卡提示key
function TwoSideTowerManager.GetDiglogHintCookieKey()
return XDataCenter.Maverick2Manager.GetActivitySaveKey() .. "GetDiglogHintCookieKey"
end
function TwoSideTowerManager.OnOpenMain()
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.TwoSideTower) then
return
end
if not TwoSideTowerManager.IsOpen() then
XUiManager.TipText("CommonActivityNotStart")
return
end
XLuaUiManager.Open("UiTwoSideTowerMain")
end
function TwoSideTowerManager.OpenUiBattleRoleRoom(stageId)
-- 移除组队数据里上一期失效的机器人id
local team = XDataCenter.TeamManager.GetXTeamByTypeId(CS.XGame.Config:GetInt("TypeIdTwoSideTower"))
local robotIds = XDataCenter.TwoSideTowerManager.GetActivityRobotIds()
local isClear = false
for pos, entityId in pairs(team:GetEntityIds()) do
if entityId and entityId ~= 0 and XEntityHelper.GetIsRobot(entityId) then
local isInclude = false
for _, robotId in ipairs(robotIds) do
if entityId == robotId then
isInclude = true
end
end
isClear = isClear or not isInclude
end
end
if isClear then
team:Clear()
end
local XUiTwoSideTowerBattleRoleRoom = require("XUi/XUiTwoSideTower/XUiTwoSideTowerBattleRoleRoom")
XLuaUiManager.Open("UiBattleRoleRoom", stageId, team, XUiTwoSideTowerBattleRoleRoom)
end
function TwoSideTowerManager.CheckStageIsPassed(stageId)
for _, id in pairs(PassStageList) do
if id == stageId then
return true
end
end
return false
end
function TwoSideTowerManager.GetLimitTaskId()
if not ActivityCfg then
return
end
return ActivityCfg.LimitTaskId
end
function TwoSideTowerManager.GetActivityName()
if not ActivityCfg then
return
end
return ActivityCfg.Name
end
function TwoSideTowerManager.GetActivityRobotIds()
if not ActivityCfg then
return
end
return ActivityCfg.RobotIds
end
function TwoSideTowerManager.GetProgress()
local totalCount = 0
local passCount = 0
for _, chapter in pairs(ChapterDic) do
totalCount = totalCount + 1
if chapter:IsCleared() then
passCount = passCount + 1
end
end
return passCount, totalCount
end
function TwoSideTowerManager.GetActivityChapter()
local chapters = {}
if TwoSideTowerManager.IsOpen() then
local temp = {}
temp.Id = ActivityCfg.Id
temp.Name = ActivityCfg.Name
temp.Background = ActivityCfg.BannerBg
temp.Type = XDataCenter.FubenManager.ChapterType.TwoSideTower
table.insert(chapters, temp)
end
return chapters
end
function TwoSideTowerManager.UpdateChapterData(chapterData)
if not ChapterDic[chapterData.ChapterId] then
ChapterDic[chapterData.ChapterId] = XTwoSideTowerChapter.New(chapterData.ChapterId)
end
ChapterDic[chapterData.ChapterId]:UpdateData(chapterData)
end
function TwoSideTowerManager.HandleActivityData(data)
ActivityId = data.ActivityId
ActivityCfg = XTwoSideTowerConfigs.GetActivityCfg(ActivityId)
PassStageList = data.PassedStages or {}
for _, chapterId in pairs(ActivityCfg.ChapterIds) do
if not ChapterDic[chapterId] then
ChapterDic[chapterId] = XTwoSideTowerChapter.New(chapterId)
end
end
for _, chapterData in pairs(data.ChapterDataList) do
TwoSideTowerManager.UpdateChapterData(chapterData)
end
end
function TwoSideTowerManager.ShieldFeatureRequest(featureId, stageId, isShield, cb)
local req = {
StageId = stageId,
FeatureId = featureId,
IsShield = isShield
}
XNetwork.Call("TwoSideTowerShieldOrUnShieldFeatureIdRequest", req, function(rsp)
if rsp.Code ~= XCode.Success then
XUiManager.TipCode(rsp.Code)
return
end
if cb then
cb(rsp.PointData)
end
end)
end
function TwoSideTowerManager.ResetChapterRequest(chapterId, cb)
local req = {
ChapterId = chapterId
}
XNetwork.Call("TwoSideTowerResetChapterRequest", req, function(rsp)
if rsp.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if rsp.ChapterData then
ChapterDic[chapterId] = XTwoSideTowerChapter.New(chapterId)
ChapterDic[chapterId]:UpdateData(rsp.ChapterData)
if cb then
cb()
end
end
end)
end
function TwoSideTowerManager.SweepPositiveStageRequest(stageId, cb)
local req = {
StageId = stageId
}
XNetwork.Call("TwoSideTowerSweepPositiveStageRequest", req, function(rsp)
if rsp.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
TwoSideTowerManager.UpdateChapterData(rsp.ChapterData)
if cb then
cb()
end
end)
end
return TwoSideTowerManager
end
XRpc.NotifyTwoSideTowerActivityData = function(data)
XDataCenter.TwoSideTowerManager.HandleActivityData(data)
end
XRpc.XTwoSideTowerChapterData = function(data)
XDataCenter.TwoSideTowerManager.UpdateChapterData(data)
end