340 lines
7.6 KiB
Lua
340 lines
7.6 KiB
Lua
local LuaSystemBase = require_ex('LuaSystem/LuaSystemBase')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CommonTaskTrackSystem = HL.Class('CommonTaskTrackSystem', LuaSystemBase.LuaSystemBase)
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.m_pendingRequests = HL.Field(HL.Table)
|
|
|
|
|
|
CommonTaskTrackSystem.configs = HL.Field(HL.Table)
|
|
|
|
|
|
CommonTaskTrackSystem.m_nextRequestId = HL.Field(HL.Number) << 1
|
|
|
|
|
|
CommonTaskTrackSystem.m_isShowing = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
CommonTaskTrackSystem.m_tryStartPanelTimerId = HL.Field(HL.Number) << -1
|
|
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.CommonTaskTrackSystem = HL.Constructor() << function(self)
|
|
self:_InitConfigs()
|
|
self.m_pendingRequests = {}
|
|
|
|
self:RegisterMessage(MessageConst.ON_ONE_COMMON_TASK_PANEL_FINISH, function(type)
|
|
self:OnOneCommonTaskPanelFinish(type)
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self:RegisterMessage(MessageConst.ON_PHASE_LEVEL_ON_TOP, function()
|
|
self:_TryAddStartPanelTimer()
|
|
end)
|
|
self:RegisterMessage(MessageConst.ON_PHASE_LEVEL_NOT_ON_TOP, function()
|
|
self:Interrupt()
|
|
end)
|
|
|
|
|
|
self:RegisterMessage(MessageConst.ALL_MAIN_HUD_ACTION_FINISH, function()
|
|
self:_TryAddStartPanelTimer()
|
|
end)
|
|
|
|
|
|
|
|
self:RegisterMessage(MessageConst.ON_ENTER_DUNGEON, function()
|
|
self:_ForceClearRequest()
|
|
end)
|
|
self:RegisterMessage(MessageConst.ON_LEAVE_DUNGEON, function()
|
|
self:_ForceClearRequest()
|
|
end)
|
|
self:RegisterMessage(MessageConst.ON_SUB_GAME_RESET, function()
|
|
self:_ForceClearRequest()
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.OnInit = HL.Override() << function(self)
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem._InitConfigs = HL.Method() << function(self)
|
|
self.configs = {
|
|
|
|
|
|
DungeonInfo = {
|
|
needWait = true,
|
|
order = 1,
|
|
},
|
|
|
|
|
|
|
|
|
|
ForceClearTrackHud = {
|
|
needWait = false,
|
|
order = 1,
|
|
forceClear = true,
|
|
},
|
|
|
|
|
|
TrackHud = {
|
|
needWait = false,
|
|
order = 1,
|
|
},
|
|
|
|
TrackHudShowEndEffect = {
|
|
needWait = true,
|
|
order = 1,
|
|
},
|
|
|
|
|
|
TrackStartToast = {
|
|
needWait = true,
|
|
order = 1,
|
|
},
|
|
|
|
|
|
TrackStartCountdown = {
|
|
needWait = false,
|
|
order = 1,
|
|
},
|
|
|
|
|
|
|
|
TrackEndToast = {
|
|
needWait = false,
|
|
order = 1,
|
|
},
|
|
|
|
TrackEndToastNW = {
|
|
needWait = true,
|
|
order = 1,
|
|
},
|
|
|
|
|
|
DungeonSettlement = {
|
|
needWait = false,
|
|
order = 1,
|
|
},
|
|
|
|
|
|
DeathInfo = {
|
|
needWait = false,
|
|
order = 100,
|
|
},
|
|
|
|
BlackboxDiff = {
|
|
needWait = false,
|
|
order = 100,
|
|
},
|
|
}
|
|
|
|
for k, v in pairs(self.configs) do
|
|
v.name = k
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.AddRequest = HL.Method(HL.String, HL.Function, HL.Opt(HL.Function))
|
|
<< function(self, type, action, interruptAction)
|
|
local requestId = self.m_nextRequestId
|
|
self.m_nextRequestId = self.m_nextRequestId + 1
|
|
local cfg = self.configs[type]
|
|
if cfg.forceClear then
|
|
for _, request in ipairs(self.m_pendingRequests) do
|
|
if request.interruptAction then
|
|
request.interruptAction()
|
|
end
|
|
end
|
|
self.m_pendingRequests = {}
|
|
self.m_isShowing = false
|
|
end
|
|
|
|
local request = {
|
|
id = requestId,
|
|
type = type,
|
|
action = action,
|
|
order = cfg.order,
|
|
noRemoveRequests = cfg.noRemoveRequests,
|
|
interruptAction = interruptAction,
|
|
}
|
|
table.insert(self.m_pendingRequests, request)
|
|
table.sort(self.m_pendingRequests, Utils.genSortFunction({ "order", "id" }, true))
|
|
self:_TryAddStartPanelTimer()
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem._TryAddStartPanelTimer = HL.Method() << function(self)
|
|
if self.m_isShowing or self.m_pendingRequests[1] == nil then
|
|
logger.info("CommonTaskTrackSystem._TryAddStartPanelTimer Skipped")
|
|
return
|
|
end
|
|
if self.m_tryStartPanelTimerId > 0 then
|
|
logger.info("CommonTaskTrackSystem._TryAddStartPanelTimer Duplicated")
|
|
return
|
|
end
|
|
logger.info("CommonTaskTrackSystem._TryAddStartPanelTimer Succ")
|
|
self.m_tryStartPanelTimerId = self:_StartTimer(0, function()
|
|
self:_TryStartPanel()
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
|
|
CommonTaskTrackSystem._TryStartPanel = HL.Method() << function(self)
|
|
logger.info("CommonTaskTrackSystem._TryStartPanel")
|
|
|
|
self.m_tryStartPanelTimerId = -1
|
|
|
|
local hasPhaseLevel = PhaseManager:IsOpen(PhaseId.Level)
|
|
if not hasPhaseLevel then
|
|
logger.info("CommonTaskTrackSystem._TryStartPanel fail, no phase level")
|
|
return
|
|
end
|
|
|
|
local topPhase = PhaseManager:GetTopPhaseId()
|
|
if topPhase ~= PhaseId.Level then
|
|
logger.info("CommonTaskTrackSystem._TryStartPanel fail, not on phaseLevel")
|
|
return
|
|
end
|
|
|
|
if LuaSystemManager.mainHudActionQueue.m_isShowing then
|
|
logger.info("CommonTaskTrackSystem._TryStartPanel fail, mainHudActionQueue is showing")
|
|
return
|
|
end
|
|
|
|
self.m_isShowing = true
|
|
self:_StartFirstRequest()
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem._StartFirstRequest = HL.Method() << function(self)
|
|
local request = self.m_pendingRequests[1]
|
|
request.order = 0
|
|
local cfg = self.configs[request.type]
|
|
logger.info("CommonTaskTrackSystem._StartFirstRequest", request.type, request)
|
|
request.action()
|
|
if not cfg.needWait then
|
|
self:OnOneCommonTaskPanelFinish(request.type)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem._ForceClearRequest = HL.Method() << function(self)
|
|
self.m_pendingRequests = {}
|
|
self.m_isShowing = false
|
|
|
|
if self.m_tryStartPanelTimerId > 0 then
|
|
self:_ClearTimer(self.m_tryStartPanelTimerId)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.OnOneCommonTaskPanelFinish = HL.Method(HL.String) << function(self, type)
|
|
logger.info("CommonTaskTrackSystem.OnOneCommonTaskPanelFinish", type)
|
|
if not self.m_isShowing then
|
|
logger.error("OnOneCommonTaskPanelFinish: Not isShowing", type)
|
|
return
|
|
end
|
|
local request = self.m_pendingRequests[1]
|
|
if request.type ~= type then
|
|
logger.error("OnOneCommonTaskPanelFinish: Type Not Match", type, request)
|
|
return
|
|
end
|
|
table.remove(self.m_pendingRequests, 1)
|
|
Notify(MessageConst.ON_ONE_COMMON_TASK_REQUEST_FINISH)
|
|
if self.m_pendingRequests[1] then
|
|
self:_StartFirstRequest()
|
|
else
|
|
self.m_isShowing = false
|
|
logger.info("CommonTaskTrackSystem showing finished")
|
|
end
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.Interrupt = HL.Method() << function(self)
|
|
self.m_tryStartPanelTimerId = self:_ClearTimer(self.m_tryStartPanelTimerId)
|
|
if not self.m_isShowing then
|
|
return
|
|
end
|
|
logger.info("CommonTaskTrackSystem.Interrupt")
|
|
self.m_isShowing = false
|
|
|
|
local request = self.m_pendingRequests[1]
|
|
if request.interruptAction then
|
|
request.interruptAction()
|
|
end
|
|
if not request.noRemoveRequests then
|
|
table.remove(self.m_pendingRequests, 1)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.NeedPendingManiHudToast = HL.Method().Return(HL.Boolean) << function(self)
|
|
if self.m_pendingRequests[1] == nil then
|
|
return false
|
|
end
|
|
|
|
|
|
if self.m_pendingRequests[1].type == "TrackEndToastNW" then
|
|
return false
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
|
|
CommonTaskTrackSystem.HasRequest = HL.Method().Return(HL.Boolean) << function(self)
|
|
return self.m_pendingRequests[1] ~= nil and self.configs[self.m_pendingRequests[1].type].needWait == true
|
|
end
|
|
|
|
HL.Commit(CommonTaskTrackSystem)
|
|
return CommonTaskTrackSystem
|