I am trying to add more control over the functions called in draw().
Currently the functions below work, however you have to specify an instance “string value” to keep track of multiple values. Does anyone have any suggestions of how I could handle multiple instances of the functions reliably without having to specify the name of the instance?
I am also working on making the functions stackable within themselves IE:
If SysTime:interval(300, "Events") == true then
-- Do Task A After 600ms
If SysTime:interval(300, "TaskA") == true then do taskA end
-- Do Task B After 800ms
If SysTime:interval(500, "TaskB") == true then do taskB end
end
```
Call Constrains:
` SysTime:Interval(t,i) ` -- Delays action by (t) milliseconds
` SysTime:trigger(n,i) ` -- Does action (n) times once per frame/call
Detectors :
` SysTime:valChange(x,i) ` -- Detects If Value has changed
` SysTime:xChange() ` -- Detects if WIDTH has changed
` SysTime:yChange() ` -- Detects if HEIGHT has changed
Any suggestions for things/functions that I should add/change?
SysTime = class()
function SysTime:init()
self.delayS = nil
self.screenX = nil
self.screenY = nil
self.triggers = nil
self.values = nil
end
-- Activates a Drawn Function Every t milliseconds --
-- Set Instance (i) name to use multiple delays at once --
-- if SysTime:interval(300,"Bounds") == true then -- Sets Bounds Refresh
-- Returns false until t then true --
function SysTime:interval(t,i)
if self.delayS == nil then self.delayS = {} end
-- Comverts (i) to Input String
local inputFormat = function(i)
if type(i) == "number" then return string.format("%d", i)
elseif type(i) == "string" then return i end end
local instance = inputFormat(i)
if self.delayS[instance] == nil then
self.delayS[instance] = os.clock() + t/1000
return false end
if self.delayS[instance] ~= nil then
if os.clock() >= self.delayS[instance] then
self.delayS[instance] = nil
return true
else return false end
end end
-- Detects if the Screen Width has Changed --
function SysTime:xChange()
if self.screenX == nil then self.screenX = WIDTH end
if WIDTH ~= self.screenX then
self.screenX = WIDTH
return true
elseif WIDTH == self.screenX then return false end end
-- Detects if the Screen Height has Changed --
function SysTime:yChange()
if self.screenY == nil then self.screenY = HEIGHT end
if HEIGHT ~= self.screenX then
self.screenY = HEIGHT
return true
elseif HEIGHT == self.screenX then return false end end
-- Triggers Action If Value Has Changed
-- Uses Instance Threading (i) = String Name
function SysTime:valChange(x,i)
if self.values == nil then self.values = {} end
if self.values[i] == nil then self.values[i] = x end
if x == self.values[i] then return false end
if x ~= self.values[i] then self.values[i] = x
return true end end
-- Triggers a Drawn Function (n) Times
-- Uses Instance Threading (i) = String Name
function SysTime:trigger(n,i)
-- Sets Initial Trigger Value
if self.triggers == nil then self.triggers = {} end
if self.triggers[i] == nil then self.triggers[i] = {}
self.triggers[i].trg = n end
if self.triggers[i].time == nil then
-- Sets Delay Before Clearing Value
self.triggers[i].time = os.clock() + 0.2 end
-- Resets Trigger At Next Call If Draw Stops For (Delay)
if self.triggers[i].time < os.clock() then
print("Old Value Refreshing Trigger ...")
self.triggers[i] = nil end
-- Sets Trigger Value If Reset
if self.triggers[i] == nil then self.triggers[i] = {}
self.triggers[i].trg = n end
self.triggers[i].time = os.clock() + 0.2
-- While Drawn Returns True (n) Times
if self.triggers[i].trg > 0 then
self.triggers[i].trg = self.triggers[i].trg - 1
return true
elseif self.triggers[i].trg == 0 then return false
end end
-- Cleans Up SysTime Values --
function SysTime:cleanup()
self.delayS = nil self.screenX = nil self.screenY = nil
self.triggers = nil self.values = nil
end
function SysTime:draw()
end
function SysTime:touched()
end
```