-- class definition
DownCounter =
{
-- time point in floating point cpu seconds
timePoint = nil,
-- dead time point is determined by adding timePoint to waitPeriod
waitPeriod = nil,
-- freeze flag
freezeFlag = false,
-- freeze value
freezeValue = nil
};
DownCounter.__index = DownCounter;
-- constructor
function DownCounter.create()
local dcnt = {}; -- our new object
setmetatable(dcnt, DownCounter); -- make Counter handle lookup
-- initialize our object
dcnt.timePoint = getClock();
dcnt.waitPeriod = 0;
dcnt.freezeFlag = false;
dcnt.freezeValue = 0;
return dcnt;
end
-- returns time to 0 point in milliseconds. if negative, then 0 point was reached
function DownCounter:timeTo0()
local result = 0
if self.freezeFlag then
result = self.freezeValue
else
result = self.timePoint + self.waitPeriod - getClock();
end
return result;
end
-- returns boolean value that tells if 0 point was reached or not
function DownCounter:elapsed()
return self:timeTo0() <= 0;
end
-- updates down counter parameters
-- @param waitPeriod period in milliseconds since last reset when down counter will reach 0.
function DownCounter:updateParams(waitPeriod)
self.waitPeriod = waitPeriod;
end
-- resets counter
function DownCounter:reset()
self.timePoint = getClock();
end
-- freezes counter
function DownCounter:freeze()
if (self.freezeFlag == false) then
self.freezeValue = self:timeTo0();
self.freezeFlag = true;
end
end
-- freezes counter
function DownCounter:unfreeze()
if (self.freezeFlag == true) then
self.timePoint = getClock();
self.waitPeriod = self.freezeValue
self.freezeFlag = false;
end
end