diff --git a/build.sh b/build.sh
index 0a88ff4..a911b33 100755
--- a/build.sh
+++ b/build.sh
@@ -48,7 +48,7 @@ done
echo "}" >> pengers.h
echo -e "$pengers_html" > pengers_image.html.temp
-sed -e '/Choose your penger:/rpengers_image.html.temp' index.html.template > index.html
+sed -e '//rpengers_image.html.temp' index.html.template > index.html
rm pengers_image.html.temp
./png2c "hand.png" > hand.c
diff --git a/docker-compose.yml b/docker-compose.yml
index 1c794c2..cbe21a6 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -3,6 +3,7 @@ version: "3"
services:
penger-party:
container_name: "penger-party"
+ restart: always
image: "node"
ports:
- "6912:6969"
diff --git a/index.html.template b/index.html.template
index c22577f..0511899 100644
--- a/index.html.template
+++ b/index.html.template
@@ -19,6 +19,20 @@
font-size: 1.5em;
margin: 0px;
}
+ h3 {
+ margin-top: 7px;
+ }
+ .info {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ }
+ .info > * {
+ margin-right: 1rem;
+ }
+ #chat {
+ width: 69%;
+ }
@media screen and (min-width: calc(800px + calc(64px * 4))) {
#css-bullshit {
content: "";
@@ -44,24 +58,42 @@
Instructions:
-
Press q, d or arrow key to move
-
Press shift key to slow down
-
Press space key to jump
-
Penger is afraid of your stinky hand
+
+ - Press q, d or arrow key to move
+ - Press shift key to slow down
+ - Press space key to jump
+ - Penger is afraid of your stinky fingers
+ - Choose your username to play online
+
Multiplayer:
-
- Play online with the pseudo name:
-
-
-
-
Players:
-
-
Playing map : Default Map
-
Next map in : -1
-
Coin collected : 0
+
+
+ Play online with the pseudo name :
+
+
+
+
Playing map : Offline Map
+
Next map in : -1
+
Coin collected : 0
+
+
Choose your penger:
+
Made by a Penger Entousiast
diff --git a/leaderboard.json b/leaderboard.json
new file mode 100644
index 0000000..9c94065
--- /dev/null
+++ b/leaderboard.json
@@ -0,0 +1,16 @@
+{
+ "today": [
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0}
+ ],
+ "total": [
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0},
+ {"name": "none", "value": 0}
+ ]
+}
diff --git a/load.js b/load.js
index a2f5c84..1dd4e37 100644
--- a/load.js
+++ b/load.js
@@ -27,7 +27,7 @@ window.onload = () => {
is_connected = false;
wasm_set_variable('nb_players', 0);
document.getElementById('players').innerHTML = "Not connected";
- document.getElementById('map-name').innerText = "Default Map";
+ document.getElementById('map-name').innerText = "Offline Map";
document.getElementById('map-time').innerText = "-1";
wasm_function("set_default_map")();
wasm_function('reset_coins')();
@@ -49,8 +49,8 @@ function wasm_function(name)
return global_instance.exports[name];
}
-const connection = new WebSocket(document.URL.replace('http', 'ws').replace('6969', '4242'));
-// const connection = new WebSocket('ws://localhost:4242');
+const connection = new WebSocket(document.URL.replace("http", "ws").replace(/(:6969|\/$)/, ":4242") /* get ws url to localhost or server */);
+// const connection = new WebSocket(document.URL.replace("http", "ws"));
connection.onopen = (e) => { console.log("connection to server opened"); };
connection.onmessage = (e) => {
var req = JSON.parse(e.data);
@@ -68,7 +68,6 @@ connection.onmessage = (e) => {
}
}
else if (req.name == "rid") {
- console.log(req);
my_rid = req.value;
}
else if (req.name == "pos") {
@@ -100,6 +99,20 @@ connection.onmessage = (e) => {
);
}
}
+ else if (req.name == "leaderboard") {
+ var tod = req.value.today;
+ var tot = req.value.total;
+ var el_tod = document.getElementById("leader-today");
+ var el_tot = document.getElementById("leader-total");
+ el_tod.innerHTML = "";
+ el_tot.innerHTML = "";
+ for (var i = 0; i < tod.length; i++) {
+ el_tod.innerHTML += ""+tod[i].name+": "+tod[i].value+" coins ";
+ }
+ for (var i = 0; i < tot.length; i++) {
+ el_tot.innerHTML += ""+tot[i].name+": "+tot[i].value+" coins ";
+ }
+ }
else if (req.name == "disconnect") {
wasm_function('deco_player')(req.value);
}
diff --git a/server.js b/server.js
index 243840d..3b08028 100644
--- a/server.js
+++ b/server.js
@@ -10,7 +10,7 @@ function update_player_list()
var list = "";
sockets.forEach((s) => {
if (s.game.pseudo == undefined || s.game.pseudo == "") return;
- list += "
" + s.game.pseudo + "";
+ list += "
" + s.game.pseudo + ": " + s.game.coin + " coins";
});
sockets.forEach((s) => {
if (s.game.pseudo == undefined || s.game.pseudo == "") return;
@@ -94,6 +94,7 @@ http_server.listen(HTTP_PORT, () => {
});
var maps = JSON.parse(fs.readFileSync("maps.json"));
+var leaderboard = JSON.parse(fs.readFileSync("leaderboard.json"));
const ws_server = new ws.Server({ port: WS_PORT });
@@ -106,6 +107,7 @@ ws_server.on('connection', (socket) => {
socket.game.rid = global_id++;
socket.send('{"name": "rid", "value": '+socket.game.rid+'}');
+ socket.send('{"name": "leaderboard", "value": '+JSON.stringify(leaderboard)+'}');
sockets.push(socket);
console.log("[", sockets.length, "] connect");
@@ -130,6 +132,38 @@ ws_server.on('connection', (socket) => {
}
else if (req.name == "coin") {
socket.game.coin++;
+ update_player_list();
+ var update_leaderboard = false;
+ if (leaderboard.today[leaderboard.today.length-1].value < socket.game.coin) {
+ update_leaderboard = true;
+ var already_exist = leaderboard.today.find((e) => {return e.name == socket.game.pseudo});
+ if (already_exist != undefined) {
+ already_exist.value++;
+ leaderboard.today.sort((a, b) => {return a.value <= b.value ? 1 : -1;});
+ } else {
+ leaderboard.today[leaderboard.today.length] = {name: socket.game.pseudo, value: socket.game.coin};
+ leaderboard.today.sort((a, b) => {return a.value <= b.value ? 1 : -1;});
+ leaderboard.today.pop();
+ }
+ }
+ if (leaderboard.total[leaderboard.total.length-1].value < socket.game.coin) {
+ update_leaderboard = true;
+ var already_exist = leaderboard.total.find((e) => {return e.name == socket.game.pseudo});
+ if (already_exist != undefined) {
+ already_exist.value++;
+ leaderboard.total.sort((a, b) => {return a.value <= b.value ? 1 : -1;});
+ } else {
+ leaderboard.total[leaderboard.total.length] = {name: socket.game.pseudo, value: socket.game.coin};
+ leaderboard.total.sort((a, b) => {return a.value <= b.value ? 1 : -1;});
+ leaderboard.total.pop();
+ }
+ }
+ if (update_leaderboard) {
+ fs.writeFile('leaderboard.json', JSON.stringify(leaderboard), ()=>{});
+ sockets.forEach((s) => {
+ s.send('{"name": "leaderboard", "value": '+JSON.stringify(leaderboard)+'}');
+ });
+ }
}
});