mirror of
https://codeberg.org/vlw/monkeydo.git
synced 2025-09-13 23:53:41 +02:00
Added flag queue
Calls sent to setFlag before a monkey has been spawned will be queued until the next GIVE_MANIFEST event is received. - Replaced this.monkey with let monkey
This commit is contained in:
parent
c713bb8755
commit
b2556f1ced
2 changed files with 27 additions and 5 deletions
13
do/Monkey.js
13
do/Monkey.js
|
@ -92,6 +92,9 @@ class Monkey {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unspawned monkey target
|
||||||
|
let monkey = undefined;
|
||||||
|
|
||||||
// Event handler for messages received from initiator
|
// Event handler for messages received from initiator
|
||||||
onmessage = (message) => {
|
onmessage = (message) => {
|
||||||
const type = message.data[0] ? message.data[0] : message.data;
|
const type = message.data[0] ? message.data[0] : message.data;
|
||||||
|
@ -101,7 +104,7 @@ onmessage = (message) => {
|
||||||
// Attempt to load manfiest provided by initiator thread
|
// Attempt to load manfiest provided by initiator thread
|
||||||
case "GIVE_MANIFEST":
|
case "GIVE_MANIFEST":
|
||||||
try {
|
try {
|
||||||
this.monkey = new Monkey(data);
|
monkey = new Monkey(data);
|
||||||
postMessage(["RECEIVED_MANIFEST","OK"]);
|
postMessage(["RECEIVED_MANIFEST","OK"]);
|
||||||
}
|
}
|
||||||
catch(error) {
|
catch(error) {
|
||||||
|
@ -111,19 +114,19 @@ onmessage = (message) => {
|
||||||
|
|
||||||
case "SET_PLAYING":
|
case "SET_PLAYING":
|
||||||
if(data === true) {
|
if(data === true) {
|
||||||
this.monkey.play();
|
monkey.play();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.monkey.interrupt();
|
monkey.interrupt();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "GET_FLAG":
|
case "GET_FLAG":
|
||||||
const flag = this.monkey.flags[data];
|
const flag = monkey.flags[data];
|
||||||
postMessage(parseInt(flag));
|
postMessage(parseInt(flag));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "SET_FLAG":
|
case "SET_FLAG":
|
||||||
this.monkey.flags[data[0]] = data[1];
|
monkey.flags[data[0]] = data[1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: return; // No op
|
default: return; // No op
|
||||||
|
|
|
@ -15,6 +15,11 @@ export default class MonkeyManager {
|
||||||
this.worker.addEventListener("message",message => this.message(message));
|
this.worker.addEventListener("message",message => this.message(message));
|
||||||
|
|
||||||
this.reversed = false;
|
this.reversed = false;
|
||||||
|
|
||||||
|
this.init = {
|
||||||
|
ready: false,
|
||||||
|
flags: []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a status flag from the worker
|
// Get a status flag from the worker
|
||||||
|
@ -29,6 +34,12 @@ export default class MonkeyManager {
|
||||||
|
|
||||||
// Set a status flag for the worker
|
// Set a status flag for the worker
|
||||||
async setFlag(flag,value = 0) {
|
async setFlag(flag,value = 0) {
|
||||||
|
// Player is not initialized, add flag to queue
|
||||||
|
if(!this.init.ready) {
|
||||||
|
this.init.flags.push([flag,value]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const flagExists = await this.getFlag(flag);
|
const flagExists = await this.getFlag(flag);
|
||||||
if(flagExists === null) {
|
if(flagExists === null) {
|
||||||
this.debug(flagExists);
|
this.debug(flagExists);
|
||||||
|
@ -48,6 +59,7 @@ export default class MonkeyManager {
|
||||||
if(message.data[1] !== "OK") {
|
if(message.data[1] !== "OK") {
|
||||||
reject(message.data);
|
reject(message.data);
|
||||||
}
|
}
|
||||||
|
this.init.ready = true;
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
this.worker.removeEventListener("message",ack);
|
this.worker.removeEventListener("message",ack);
|
||||||
|
@ -62,6 +74,13 @@ export default class MonkeyManager {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initFlags() {
|
||||||
|
if(this.init.flags.length > 0) {
|
||||||
|
this.init.flags.forEach(flag => this.setFlag(...flag));
|
||||||
|
}
|
||||||
|
this.init.flags = [];
|
||||||
|
}
|
||||||
|
|
||||||
// Call method from object and pass arguments
|
// Call method from object and pass arguments
|
||||||
run(task) {
|
run(task) {
|
||||||
this.methods[task.func](...task.args);
|
this.methods[task.func](...task.args);
|
||||||
|
|
Loading…
Add table
Reference in a new issue