Pause Movie timers

This commit is contained in:
2023-04-03 10:57:00 -06:00
parent 1786783a4b
commit 08c5bf1f21
2 changed files with 46 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
(var &mut :Array<WrappedTimer> timers [])
(function :WrappedTimer delay [:Void->Void f :Float sec]
(let [wrapped
(object
startTime (Timer.stamp)
duration sec
t null
f f)
wrappedF
->{(timers.remove wrapped)(f)}]
(set wrapped.t (Timer.delay wrappedF (Std.int (* sec 1000))))
(timers.push wrapped)
wrapped))
(function stop [:WrappedTimer timer]
(timer.t.stop)
(timers.remove timer))
(function pause []
(let [now (Timer.stamp)]
(doFor timer timers
(let [elapsed (- now timer.startTime)]
(-= timer.duration elapsed)
(timer.t.stop)))))
(function resume []
(let [oldTimers timers]
(set timers [])
(doFor timer oldTimers
(delay timer.f timer.duration))))