2025-06-04 05:02:57 +08:00

81 lines
1.7 KiB
Plaintext

autoImport("AssociateRemoveFunctionCD")
autoImport("CDCtrlRefresher")
autoImport("TimerCDCtrlRefresher")
FunctionCDCommand = class("FunctionCDCommand")
function FunctionCDCommand.Me()
if nil == FunctionCDCommand.me then
FunctionCDCommand.me = FunctionCDCommand.new()
end
return FunctionCDCommand.me
end
function FunctionCDCommand:ctor()
self:Reset()
TimeTickManager.Me():CreateTick(0,33,self.Update,self)
end
function FunctionCDCommand:Reset()
self.cmdMap = {}
-- self.isRunning = false
end
function FunctionCDCommand:GetCDProxy(cmdClass,owner)
owner = owner or cmdClass
return self.cmdMap[owner]
end
function FunctionCDCommand:GetAssiRemoveProxy(owner)
return self:GetCDProxy(AssociateRemoveFunctionCD,owner)
end
function FunctionCDCommand:StopAllCD()
for k,v in pairs(self.cmdMap) do
v:SetEnable(false)
end
end
function FunctionCDCommand:StopCD( cmdClass )
local cmd = self.cmdMap[cmdClass]
if(cmd ~=nil) then
cmd:SetEnable(false)
end
end
function FunctionCDCommand:StartCDProxy( cmdClass,interval,owner)
owner = owner or cmdClass
local cmd = self.cmdMap[owner]
interval = interval or 33
if(cmd ==nil) then
cmd = cmdClass.new(interval)
self.cmdMap[owner] = cmd
end
end
function FunctionCDCommand:StartAllCD()
for k,v in pairs(self.cmdMap) do
if(v:IsRunning()==false) then
v:SetEnable(true)
end
end
end
function FunctionCDCommand:Update(deltaTime)
local cdMap = CDProxy.Instance.cdMap
deltaTime = deltaTime / 1000
for k,maps in pairs(cdMap) do
local removes = nil
for id,cdData in pairs(maps) do
cdData:CalCd(-deltaTime)
if(cdData:GetCd() <= 0) then
removes = removes or {}
removes[#removes+1] = id
end
end
if(removes) then
for i=1,#removes do
maps[removes[i]] = nil
end
end
end
end