How could I achive making my own Timer class/object? This is what I have tried so far, but the Pause method seems to not work.
Server Script
local Timer = require(script.ModuleScript)
local t1 = Timer.Create("TimerOne",1,10)
t1:Start()
wait(1)
t1:Pause()
Timer Module
local Timer = {}
Timer.__index = Timer
function Timer.Create(name,start,stop)
local newtimer = {}
setmetatable(newtimer,Timer)
newtimer.ClassName = "Timer"
newtimer.Name = name
newtimer.InitialTime = start
newtimer.FinalTime = stop
newtimer.CurrentTime = newtimer.InitialTime
newtimer.isTicking = false
newtimer.Paused = false
return newtimer
end
function Timer:Destroy()
end
function Timer:Start()
repeat
wait(1)
if self.Paused ~= true then
print(self.CurrentTime)
self.CurrentTime = self.CurrentTime + 1
end
until self.CurrentTime == self.FinalTime + 1
end
function Timer:Pause()
self.Paused = true
end
function Timer:Cancel()
end
return Timer
I suggest you take a look at a few resources and see how they incorporate their Timer classes as reference for your own code. It might help you develop something.
You call Timer:Start() which runs the following code
repeat
wait(1)
if self.Paused ~= true then
print(self.CurrentTime)
self.CurrentTime = self.CurrentTime + 1
end
until self.CurrentTime == self.FinalTime + 1
Timer:Pause() won’t be called until Time:Start() has finished.
To fix this, wrap your timers logic in a coroutine.
function Timer:_Run()
repeat
wait(1)
if self.Paused ~= true then
print(self.CurrentTime)
self.CurrentTime = self.CurrentTime + 1
end
until self.CurrentTime == self.FinalTime + 1
end
function Timer:Start()
local run = coroutine.wrap(Timer._Run)
run(self)
end