Pause Movie timers

This commit is contained in:
2023-04-03 10:57:00 -06:00
parent a7e50fcfce
commit 55b8c30407
5 changed files with 87 additions and 32 deletions

View File

@@ -0,0 +1,15 @@
package kiss_tools;
import kiss.Prelude;
import kiss.List;
import haxe.Timer;
typedef WrappedTimer = {
startTime:Float,
duration:Float,
t:Timer,
f:Void->Void
}
@:build(kiss.Kiss.build())
class TimerWithPause {}

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