Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 42x 31x 31x 1x 5x 5x 3x 3x 6x 6x 2x 4x 4x 1x 3x 4x | import { Scheduler } from "./scheduler";
import { Actor } from "./entities";
export class Loop {
private readonly _scheduler: Scheduler;
private _lock: boolean;
public constructor(scheduler: Scheduler) {
this._scheduler = scheduler;
this._lock = true;
}
/**
* Start the main loop. When this call returns, the loop is locked.
*/
public start(): Loop {
return this.unlock();
}
/**
* Interrupt the engine by an asynchronous action
*/
public lock(): Loop {
this._lock = true;
return this;
}
/**
* Resume execution (paused by a previous lock)
*/
public unlock(): Loop {
this._lock = false;
// eslint-disable-next-line no-loops/no-loops
while (!this._lock) {
const actor = this._scheduler.next();
if (!actor) {
break;
} /* no more actors */
this.act(actor);
if (actor.getLockLoop()) {
break;
}
}
return this.lock();
}
private act(actor: Actor): void {
actor.act();
}
}
|