@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
32 lines (28 loc) • 1.12 kB
JavaScript
import Task from "../Task.js";
import { TaskSignal } from "../TaskSignal.js";
import { assert } from "../../../assert.js";
import { anyOf, equalTo } from "../../../debug/matchers/matchers.js";
/**
*
* @param {string} name
* @param {Iterator} iterator
* @param {(TaskSignal.Continue)|(TaskSignal.Yield)} [cycle_signal] what to signal at the end of each iteration, Continue will provide better throughput, whereas Yield will produce very low load on the CPU
* @returns {Task}
*/
export function iteratorTask(name, iterator, cycle_signal = TaskSignal.Continue) {
assert.defined(iterator, 'iterator');
assert.notNull(iterator, 'iterator');
assert.isFunction(iterator.next, 'iterator.next');
assert.that(cycle_signal, 'cycle_signal', anyOf(equalTo(TaskSignal.Continue), equalTo(TaskSignal.Yield)));
return new Task({
name,
cycleFunction() {
const next = iterator.next();
if (next.done) {
return TaskSignal.EndSuccess
} else {
return cycle_signal;
}
}
})
}