mirror of
https://codeberg.org/vlw/monkeydo.git
synced 2025-09-13 23:53:41 +02:00
Add support for loop
This commit is contained in:
parent
7ca095a0d7
commit
e36c6ad8af
1 changed files with 19 additions and 7 deletions
|
@ -9,7 +9,7 @@ class Monkey {
|
||||||
this.tasks = {
|
this.tasks = {
|
||||||
tasks: [],
|
tasks: [],
|
||||||
length: 0,
|
length: 0,
|
||||||
target: 0,
|
_target: 0,
|
||||||
_i: 0,
|
_i: 0,
|
||||||
set manifest(manifest) {
|
set manifest(manifest) {
|
||||||
this.tasks = manifest;
|
this.tasks = manifest;
|
||||||
|
@ -18,23 +18,35 @@ class Monkey {
|
||||||
get task() {
|
get task() {
|
||||||
return this.tasks[this._i];
|
return this.tasks[this._i];
|
||||||
},
|
},
|
||||||
step: () => {
|
get target() {
|
||||||
this.tasks._i++;
|
return this._target;
|
||||||
const nextTask = this.tasks.task;
|
|
||||||
this.tasks.target = performance.now() + nextTask[0];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Advance to the next task or loop
|
||||||
|
next() {
|
||||||
|
// Reset index and loop if out of tasks
|
||||||
|
if(this.tasks._i >= this.tasks.length) {
|
||||||
|
this.tasks._i = -1;
|
||||||
|
if(this.flags[1] === 255) return; // Loop forever
|
||||||
|
this.flags[2] -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.tasks._i++;
|
||||||
|
const nextTask = this.tasks.task;
|
||||||
|
this.tasks._target = performance.now() + nextTask[0];
|
||||||
|
}
|
||||||
|
|
||||||
// Main event loop, runs on every frame
|
// Main event loop, runs on every frame
|
||||||
tick() {
|
tick() {
|
||||||
if(this === undefined) return false;
|
if(this === undefined) return;
|
||||||
if(this.flags[0] === 0 || this.flags[2] === 0) return this.abort();
|
if(this.flags[0] === 0 || this.flags[2] === 0) return this.abort();
|
||||||
|
|
||||||
const frame = Math.min(performance.now(),this.tasks.target);
|
const frame = Math.min(performance.now(),this.tasks.target);
|
||||||
if(frame == this.tasks.target) {
|
if(frame == this.tasks.target) {
|
||||||
postMessage(["TASK",this.tasks.task]);
|
postMessage(["TASK",this.tasks.task]);
|
||||||
this.tasks.step();
|
this.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
requestAnimationFrame(this.tick.bind(this));
|
requestAnimationFrame(this.tick.bind(this));
|
||||||
|
|
Loading…
Add table
Reference in a new issue