lychees's picture
Upload 569 files
87b3b3a
/**
* @class Asynchronous main loop
*/
ROT.Engine = function() {
this._scheduler = new ROT.Scheduler();
this._lock = 1;
}
/**
* @param {object} actor Anything with "getSpeed" and "act" methods
*/
ROT.Engine.prototype.addActor = function(actor) {
this._scheduler.add(actor);
return this;
}
/**
* Remove a previously added actor
* @param {object} actor
*/
ROT.Engine.prototype.removeActor = function(actor) {
this._scheduler.remove(actor);
return this;
}
/**
* Remove all actors
*/
ROT.Engine.prototype.clear = function() {
this._scheduler.clear();
return this;
}
/**
* Start the main loop. When this call returns, the loop is locked.
*/
ROT.Engine.prototype.start = function() {
return this.unlock();
}
/**
* Interrupt the engine by an asynchronous action
*/
ROT.Engine.prototype.lock = function() {
this._lock++;
}
/**
* Resume execution (paused by a previous lock)
*/
ROT.Engine.prototype.unlock = function() {
if (!this._lock) { throw new Error("Cannot unlock unlocked engine"); }
this._lock--;
while (!this._lock) {
var actor = this._scheduler.next();
if (!actor) { return this.lock(); } /* no actors */
actor.act();
}
return this;
}