Timer fix
This commit is contained in:
@@ -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 ();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user