Riskless/static/js/modules/interface/barrier.js

34 lines
725 B
JavaScript

import { socket, players } from "./main.js";
import { Packet } from "./packet.js";
/**
* Typical barrier type.
*
* Block all clients until everyone has hit the barrier.
*/
export class Barrier {
constructor() {
let resolver;
this.promise = new Promise((resolve) => {
resolver = resolve;
});
this.resolver = resolver;
this.hits = new Set();
}
wait() {
socket.emit("message", Packet.createBarrierSignal());
return this.promise;
}
resolve(data) {
this.hits.add(data.author);
if (this.hits.size === Object.keys(players).length - 1) {
this.hits = new Set();
this.resolver();
}
}
}