Timer fix

This commit is contained in:
Joshua Granick
2018-11-05 11:20:15 -08:00
parent df0827f4a6
commit c7b96e0be8

View File

@@ -215,106 +215,107 @@ import lime.system.System;
class Timer { class Timer {
private static var sRunningTimers:Array <Timer> = []; private static var sRunningTimers:Array <Timer> = [];
private var mTime:Float; private var mTime:Float;
private var mFireAt:Float; private var mFireAt:Float;
private var mRunning:Bool; private var mRunning:Bool;
public function new (time:Float) { public function new (time:Float) {
mTime = time; mTime = time;
sRunningTimers.push (this); sRunningTimers.push (this);
mFireAt = getMS () + mTime; mFireAt = getMS () + mTime;
mRunning = true; mRunning = true;
} }
public static function delay (f:Void -> Void, time:Int) { public static function delay (f:Void -> Void, time:Int) {
var t = new Timer (time); var t = new Timer (time);
t.run = function () { t.run = function () {
t.stop (); t.stop ();
f (); f ();
}; };
return t; return t;
} }
private static function getMS ():Float { private static function getMS ():Float {
return System.getTimer (); return System.getTimer ();
} }
public static function measure<T> (f:Void -> T, ?pos:PosInfos):T { public static function measure<T> (f:Void -> T, ?pos:PosInfos):T {
var t0 = stamp (); var t0 = stamp ();
var r = f (); var r = f ();
Log.trace ((stamp () - t0) + "s", pos); Log.trace ((stamp () - t0) + "s", pos);
return r; return r;
} }
dynamic public function run () { dynamic public function run () {
} }
public static inline function stamp ():Float { public static inline function stamp ():Float {
return System.getTimer () / 1000; var timer = System.getTimer ();
return (timer > 0 ? timer / 1000 : 0);
} }
public function stop ():Void { public function stop ():Void {
if (mRunning) { if (mRunning) {
mRunning = false; mRunning = false;
for (i in 0...sRunningTimers.length) { for (i in 0...sRunningTimers.length) {
if (sRunningTimers[i] == this) { if (sRunningTimers[i] == this) {
sRunningTimers[i] = null; sRunningTimers[i] = null;
break; break;
} }
} }
} }
} }
@:noCompletion private function __check (inTime:Float) { @:noCompletion private function __check (inTime:Float) {
if (inTime >= mFireAt) { if (inTime >= mFireAt) {
mFireAt += mTime; mFireAt += mTime;
run (); run ();
} }
} }
} }