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 51 52 53 54 55 | 1x 1x 1x 1x 68x 68x 68x 68x 68x 68x 68x 68x 68x 68x 68x 68x 68x 4x 4x 68x 68x 68x 68x 68x 17x 17x 17x 68x 68x 68x 68x 68x 14x 14x 14x 17x 17x 6x 6x 11x 11x 13x 8x 8x 17x 14x 14x 14x 68x 68x 68x 11x 11x 68x | import { Scheduler } from "./scheduler";
import { Actor } from "./entities";
export class Loop {
private readonly scheduler: Scheduler;
private locked: boolean;
public constructor(scheduler: Scheduler) {
this.scheduler = scheduler;
this.locked = 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.locked = true;
return this;
}
/**
* Resume execution (paused by a previous lock)
*/
public unlock(): Loop {
this.locked = false;
// eslint-disable-next-line no-loops/no-loops
while (!this.locked) {
const actor = this.scheduler.next();
if (!actor) {
break;
} /* no more actors */
this.act(actor);
if (actor.getLockLoop()) {
break;
}
}
return this.lock();
}
// eslint-disable-next-line class-methods-use-this
private act(actor: Actor): void {
actor.act();
}
}
|