return path;
}
+var state = {
+ spectator_id: undefined,
+ spectators: [],
+ players: []
+};
+
function undisplay(element) {
element.style.display="none";
}
}
function register(form) {
- var request = new XMLHttpRequest();
+ const spectator_req = new XMLHttpRequest();
+
+ /* Before registering as a player, first remove us as a spectator. */
+ spectator_req.open("DELETE", GAME_API("spectator/") + state.spectator_id);
+ spectator_req.send();
+
+ const register_req = new XMLHttpRequest();
- request.open("POST", GAME_API("register"));
- request.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
+ register_req.open("POST", GAME_API("register"));
+ register_req.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
var data = {
"character": form.character.value
};
- request.send(JSON.stringify(data));
+ register_req.send(JSON.stringify(data));
form.reset();
}
}
};
+events.addEventListener("spectators", function(event) {
+ const spectators_div = document.getElementById("spectators-div");
+ const spectators_element = document.getElementById("spectators");
+ const spectators = JSON.parse(event.data);
+
+ spectators_element.innerHTML = '';
+ for (const spectator of spectators) {
+ var li = document.createElement('li');
+ li.id = "spectator-" + spectator.id;
+ li.innerText = spectator.name;
+ spectators_element.appendChild(li);
+ }
+
+ /* Force players list to be visible. */
+ spectators_div.style.display = "block";
+});
+
+events.addEventListener("spectator-join", function(event) {
+ const spectators_div = document.getElementById("spectators-div");
+ const spectators = document.getElementById("spectators");
+ const spectator = JSON.parse(event.data);
+
+ const li = document.createElement('li');
+ li.id = "spectator-" + spectator.id;
+ li.innerText = spectator.name;
+ spectators.appendChild(li);
+
+ /* Force spectators list to be visible. */
+ spectators_div.style.display = "block";
+});
+
+events.addEventListener("spectator-leave", function(event) {
+ const spectators = document.getElementById("spectators");
+ const id = JSON.parse(event.data);
+ const spectator = document.getElementById("spectator-" + id.id);
+
+ spectators.removeChild(spectator);
+});
+
events.addEventListener("players", function(event) {
const players_div = document.getElementById("players-div");
const players_element = document.getElementById("players");
players.removeChild(player);
});
+function spectator_on_load() {
+ state.spectator_id = JSON.parse(this.response);
+}
+
events.addEventListener("game-state", function(event) {
const data = JSON.parse(event.data);
const old_state = data.old_state;
for (const elt of elts) {
elt.style.display = "block";
}
+
+ /* Whenever the game enters the "join" state, add ourselves as a spectator. */
+ if (new_state === "join") {
+ const request = new XMLHttpRequest();
+
+ request.addEventListener("load", spectator_on_load);
+ request.open("POST", GAME_API("spectator"));
+ request.send();
+ }
});
events.addEventListener("character-reveal", function(event) {