08b515afd9
EN: 2.0.0.143 CN: 2.0.0.142 JP: 2.0.0.145 KR: 2.0.0.150
114 lines
3.5 KiB
Lua
114 lines
3.5 KiB
Lua
local StarTowerSettingGate = {}
|
|
local objLevelData
|
|
local nSerial = 0
|
|
local objReadyOwner
|
|
local mapTransition = {}
|
|
local mapOwnerVersion = {}
|
|
local mapRequests = {}
|
|
function StarTowerSettingGate.Start(objData)
|
|
EventManager.Remove("StarTowerSettingRequestFailed", StarTowerSettingGate, StarTowerSettingGate.OnRequestFailed)
|
|
objLevelData = objData
|
|
nSerial = nSerial + 1
|
|
objReadyOwner = nil
|
|
mapTransition = {}
|
|
mapOwnerVersion = {}
|
|
mapRequests = {}
|
|
if objData ~= nil then
|
|
EventManager.Add("StarTowerSettingRequestFailed", StarTowerSettingGate, StarTowerSettingGate.OnRequestFailed)
|
|
end
|
|
end
|
|
function StarTowerSettingGate.Stop(objData)
|
|
if objLevelData == objData then
|
|
StarTowerSettingGate.Start(nil)
|
|
end
|
|
end
|
|
function StarTowerSettingGate.Begin()
|
|
nSerial = nSerial + 1
|
|
objReadyOwner = nil
|
|
return nSerial
|
|
end
|
|
function StarTowerSettingGate.Ready(objOwner, nExpectedSerial)
|
|
if objLevelData ~= nil and nExpectedSerial == nSerial then
|
|
objReadyOwner = objOwner
|
|
end
|
|
end
|
|
function StarTowerSettingGate.ReadyAfter(objOwner, nExpectedSerial, nDuration)
|
|
if objLevelData == nil then
|
|
return
|
|
end
|
|
local nOwnerVersion = mapOwnerVersion[objOwner] or 0
|
|
objOwner:AddTimer(1, nDuration, function()
|
|
if (mapOwnerVersion[objOwner] or 0) == nOwnerVersion then
|
|
StarTowerSettingGate.Ready(objOwner, nExpectedSerial)
|
|
end
|
|
end, true, true, true)
|
|
end
|
|
function StarTowerSettingGate.Transition(objOwner, nDuration)
|
|
if objLevelData == nil then
|
|
return
|
|
end
|
|
local mapToken = {}
|
|
mapTransition[mapToken] = objOwner
|
|
objOwner:AddTimer(1, nDuration, function()
|
|
mapTransition[mapToken] = nil
|
|
end, true, true, true)
|
|
end
|
|
function StarTowerSettingGate.Clear(objOwner)
|
|
mapOwnerVersion[objOwner] = (mapOwnerVersion[objOwner] or 0) + 1
|
|
if objReadyOwner == objOwner then
|
|
StarTowerSettingGate.Begin()
|
|
end
|
|
for mapToken, objTransitionOwner in pairs(mapTransition) do
|
|
if objTransitionOwner == objOwner then
|
|
mapTransition[mapToken] = nil
|
|
end
|
|
end
|
|
end
|
|
function StarTowerSettingGate.ResumeAfterSetting()
|
|
local objOwner = objReadyOwner
|
|
if objLevelData == nil or objOwner == nil then
|
|
return
|
|
end
|
|
local nExpectedSerial = StarTowerSettingGate.Begin()
|
|
local nOwnerVersion = mapOwnerVersion[objOwner] or 0
|
|
cs_coroutine.start(function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
if (mapOwnerVersion[objOwner] or 0) == nOwnerVersion then
|
|
StarTowerSettingGate.Ready(objOwner, nExpectedSerial)
|
|
end
|
|
end)
|
|
end
|
|
function StarTowerSettingGate.BeginRequest(failedCallback)
|
|
StarTowerSettingGate.Begin()
|
|
local mapToken = {failedCallback = failedCallback}
|
|
if objLevelData ~= nil then
|
|
mapRequests[mapToken] = nSerial
|
|
end
|
|
return mapToken
|
|
end
|
|
function StarTowerSettingGate.FinishRequest(mapToken)
|
|
mapRequests[mapToken] = nil
|
|
end
|
|
function StarTowerSettingGate.OnRequestFailed(_, mapError)
|
|
local mapOldestToken
|
|
local nOldestSerial = math.huge
|
|
for mapToken, nRequestSerial in pairs(mapRequests) do
|
|
if nRequestSerial < nOldestSerial then
|
|
mapOldestToken = mapToken
|
|
nOldestSerial = nRequestSerial
|
|
end
|
|
end
|
|
if mapOldestToken ~= nil then
|
|
mapRequests[mapOldestToken] = nil
|
|
StarTowerSettingGate.Begin()
|
|
if mapOldestToken.failedCallback ~= nil then
|
|
mapOldestToken.failedCallback(mapError)
|
|
end
|
|
end
|
|
end
|
|
function StarTowerSettingGate.CanOpen(objData)
|
|
return objData ~= nil and objLevelData == objData and objReadyOwner ~= nil and next(mapTransition) == nil and next(mapRequests) == nil and objData.bEnd ~= true and not objData:IsAutoDecisionEnabled() and not objData:IsAutoDecisionBusy()
|
|
end
|
|
return StarTowerSettingGate
|