diff --git a/src/kiss_tools/TimerWithPause.hx b/src/kiss_tools/TimerWithPause.hx new file mode 100644 index 0000000..0baf6c5 --- /dev/null +++ b/src/kiss_tools/TimerWithPause.hx @@ -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 {} diff --git a/src/kiss_tools/TimerWithPause.kiss b/src/kiss_tools/TimerWithPause.kiss new file mode 100644 index 0000000..86a67c2 --- /dev/null +++ b/src/kiss_tools/TimerWithPause.kiss @@ -0,0 +1,31 @@ +(var &mut :Array 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)))) \ No newline at end of file