95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
"use strict";
|
|
class SystemRunner {
|
|
/**
|
|
* @param name - The function name that will be executed on the listeners added to this Runner.
|
|
*/
|
|
constructor(name) {
|
|
this.items = [];
|
|
this._name = name;
|
|
}
|
|
/* eslint-disable jsdoc/require-param, jsdoc/check-param-names */
|
|
/**
|
|
* Dispatch/Broadcast Runner to all listeners added to the queue.
|
|
* @param {...any} params - (optional) parameters to pass to each listener
|
|
*/
|
|
/* eslint-enable jsdoc/require-param, jsdoc/check-param-names */
|
|
emit(a0, a1, a2, a3, a4, a5, a6, a7) {
|
|
const { name, items } = this;
|
|
for (let i = 0, len = items.length; i < len; i++) {
|
|
items[i][name](a0, a1, a2, a3, a4, a5, a6, a7);
|
|
}
|
|
return this;
|
|
}
|
|
/**
|
|
* Add a listener to the Runner
|
|
*
|
|
* Runners do not need to have scope or functions passed to them.
|
|
* All that is required is to pass the listening object and ensure that it has contains a function that has the same name
|
|
* as the name provided to the Runner when it was created.
|
|
*
|
|
* Eg A listener passed to this Runner will require a 'complete' function.
|
|
*
|
|
* ```
|
|
* import { Runner } from 'pixi.js';
|
|
*
|
|
* const complete = new Runner('complete');
|
|
* ```
|
|
*
|
|
* The scope used will be the object itself.
|
|
* @param {any} item - The object that will be listening.
|
|
*/
|
|
add(item) {
|
|
if (item[this._name]) {
|
|
this.remove(item);
|
|
this.items.push(item);
|
|
}
|
|
return this;
|
|
}
|
|
/**
|
|
* Remove a single listener from the dispatch queue.
|
|
* @param {any} item - The listener that you would like to remove.
|
|
*/
|
|
remove(item) {
|
|
const index = this.items.indexOf(item);
|
|
if (index !== -1) {
|
|
this.items.splice(index, 1);
|
|
}
|
|
return this;
|
|
}
|
|
/**
|
|
* Check to see if the listener is already in the Runner
|
|
* @param {any} item - The listener that you would like to check.
|
|
*/
|
|
contains(item) {
|
|
return this.items.indexOf(item) !== -1;
|
|
}
|
|
/** Remove all listeners from the Runner */
|
|
removeAll() {
|
|
this.items.length = 0;
|
|
return this;
|
|
}
|
|
/** Remove all references, don't use after this. */
|
|
destroy() {
|
|
this.removeAll();
|
|
this.items = null;
|
|
this._name = null;
|
|
}
|
|
/**
|
|
* `true` if there are no this Runner contains no listeners
|
|
* @readonly
|
|
*/
|
|
get empty() {
|
|
return this.items.length === 0;
|
|
}
|
|
/**
|
|
* The name of the runner.
|
|
* @readonly
|
|
*/
|
|
get name() {
|
|
return this._name;
|
|
}
|
|
}
|
|
|
|
export { SystemRunner };
|
|
//# sourceMappingURL=SystemRunner.mjs.map
|