72 lines
1.5 KiB
Plaintext
72 lines
1.5 KiB
Plaintext
SceneFloatMsgQueueCtrl = reusableClass("SceneFloatMsgQueueCtrl");
|
|
|
|
SceneFloatMsgQueueCtrl.PoolSize = 20;
|
|
|
|
function SceneFloatMsgQueueCtrl:Add(data)
|
|
self.excutequeue[#self.excutequeue+1] = data
|
|
end
|
|
|
|
local lastTime = 0;
|
|
local waitTime = 0;
|
|
local tableRemove = table.remove
|
|
function SceneFloatMsgQueueCtrl:Tick()
|
|
local excutequeue = self.excutequeue
|
|
local leftnum = #excutequeue;
|
|
|
|
if(leftnum == 0)then
|
|
return;
|
|
end
|
|
|
|
local mul = math.floor(leftnum/10);
|
|
mul = math.min(mul, 32);
|
|
mul = 1 << mul;
|
|
waitTime = self.args[2]/mul;
|
|
waitTime = math.max(33, waitTime);
|
|
|
|
local deltaTime = (RealTime.time - lastTime) * 1000;
|
|
if(deltaTime >= waitTime)then
|
|
lastTime = RealTime.time;
|
|
|
|
local data = tableRemove(excutequeue,1)
|
|
self.args[3](self.args[4], data)
|
|
end
|
|
end
|
|
|
|
-- override begin
|
|
--params[1] maxnum
|
|
--params[2] interval
|
|
--params[3] excuteCall
|
|
--params[4] callParam1
|
|
function SceneFloatMsgQueueCtrl:DoConstruct(asArray, params)
|
|
self.args = {}
|
|
self.args[1] = params[1]
|
|
self.args[2] = params[2]
|
|
self.args[3] = params[3]
|
|
self.args[4] = params[4]
|
|
Debug_Assert(self.args[3]~=nil, "SceneFloatMsgQueueCtrl excuteFunc CANNOT be nil!!!")
|
|
self.isBusy = false
|
|
|
|
self.excutequeue = {};
|
|
|
|
TimeTickManager.Me():CreateTick(0, 33, self.Tick, self, 1)
|
|
end
|
|
|
|
function SceneFloatMsgQueueCtrl:DoDeconstruct(asArray)
|
|
self.args[1] = nil
|
|
self.args[2] = nil
|
|
self.args[3] = nil
|
|
self.args[4] = nil
|
|
self.isBusy = false
|
|
|
|
TimeTickManager.Me():ClearTick(self,1)
|
|
|
|
self:Clear();
|
|
|
|
end
|
|
-- override end
|
|
|
|
function SceneFloatMsgQueueCtrl:Clear()
|
|
TableUtility.ArrayClear(self.excutequeue);
|
|
end
|
|
|