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 ```