leaderboard
This commit is contained in:
parent
1eb2a0cdd2
commit
f77158fc5c
2
build.sh
2
build.sh
|
@ -48,7 +48,7 @@ done
|
||||||
echo "}" >> pengers.h
|
echo "}" >> pengers.h
|
||||||
|
|
||||||
echo -e "$pengers_html" > pengers_image.html.temp
|
echo -e "$pengers_html" > pengers_image.html.temp
|
||||||
sed -e '/Choose your penger:/rpengers_image.html.temp' index.html.template > index.html
|
sed -e '/<!-- penger images src -->/rpengers_image.html.temp' index.html.template > index.html
|
||||||
rm pengers_image.html.temp
|
rm pengers_image.html.temp
|
||||||
|
|
||||||
./png2c "hand.png" > hand.c
|
./png2c "hand.png" > hand.c
|
||||||
|
|
|
@ -3,6 +3,7 @@ version: "3"
|
||||||
services:
|
services:
|
||||||
penger-party:
|
penger-party:
|
||||||
container_name: "penger-party"
|
container_name: "penger-party"
|
||||||
|
restart: always
|
||||||
image: "node"
|
image: "node"
|
||||||
ports:
|
ports:
|
||||||
- "6912:6969"
|
- "6912:6969"
|
||||||
|
|
|
@ -19,6 +19,20 @@
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
margin: 0px;
|
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))) {
|
@media screen and (min-width: calc(800px + calc(64px * 4))) {
|
||||||
#css-bullshit {
|
#css-bullshit {
|
||||||
content: "";
|
content: "";
|
||||||
|
@ -44,24 +58,42 @@
|
||||||
<div id="left">
|
<div id="left">
|
||||||
<canvas id="demo-canvas"></canvas>
|
<canvas id="demo-canvas"></canvas>
|
||||||
<h3>Instructions:</h3>
|
<h3>Instructions:</h3>
|
||||||
<p>Press q, d or arrow key to move</p>
|
<ul>
|
||||||
<p>Press shift key to slow down</p>
|
<li>Press q, d or arrow key to move</li>
|
||||||
<p>Press space key to jump</p>
|
<li>Press shift key to slow down</li>
|
||||||
<p>Penger is afraid of your stinky hand</p>
|
<li>Press space key to jump</li>
|
||||||
|
<li>Penger is afraid of your stinky fingers</li>
|
||||||
|
<li>Choose your username to play online</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div id="right">
|
<div id="right">
|
||||||
<h3>Multiplayer:</h3>
|
<h3>Multiplayer:</h3>
|
||||||
<p>
|
<div class="info">
|
||||||
Play online with the pseudo name:
|
<p>
|
||||||
<input id="pseudo" placeholder="Penger Lover" />
|
Play online with the pseudo name :
|
||||||
<button id="play">Play</button>
|
<input id="pseudo" placeholder="Penger Lover" />
|
||||||
</p>
|
<button id="play">Play</button>
|
||||||
<p>Players:</p>
|
</p>
|
||||||
<ul id="players">Not connected</ul>
|
<p>Playing map : <span id="map-name">Offline Map</span></p>
|
||||||
<p>Playing map : <span id="map-name">Default Map</span></p>
|
<p>Next map in : <span id="map-time">-1</span></p>
|
||||||
<p>Next map in : <span id="map-time">-1</span></p>
|
<p>Coin collected : <span id="nb-coin">0</span></p>
|
||||||
<p>Coin collected : <span id="nb-coin">0</span></p>
|
</div>
|
||||||
|
<div class="info">
|
||||||
|
<div>
|
||||||
|
<h3>Players:</h3>
|
||||||
|
<ul id="players">Not connected</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>Today leaderboard:</h3>
|
||||||
|
<ul id="leader-today"></ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>Total leaderboard:</h3>
|
||||||
|
<ul id="leader-total"></ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<h3>Choose your penger:</h3>
|
<h3>Choose your penger:</h3>
|
||||||
|
<!-- penger images src -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h3>Made by a Penger Entousiast</h3>
|
<h3>Made by a Penger Entousiast</h3>
|
||||||
|
|
|
@ -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}
|
||||||
|
]
|
||||||
|
}
|
21
load.js
21
load.js
|
@ -27,7 +27,7 @@ window.onload = () => {
|
||||||
is_connected = false;
|
is_connected = false;
|
||||||
wasm_set_variable('nb_players', 0);
|
wasm_set_variable('nb_players', 0);
|
||||||
document.getElementById('players').innerHTML = "Not connected";
|
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";
|
document.getElementById('map-time').innerText = "-1";
|
||||||
wasm_function("set_default_map")();
|
wasm_function("set_default_map")();
|
||||||
wasm_function('reset_coins')();
|
wasm_function('reset_coins')();
|
||||||
|
@ -49,8 +49,8 @@ function wasm_function(name)
|
||||||
return global_instance.exports[name];
|
return global_instance.exports[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
const connection = new WebSocket(document.URL.replace('http', 'ws').replace('6969', '4242'));
|
const connection = new WebSocket(document.URL.replace("http", "ws").replace(/(:6969|\/$)/, ":4242") /* get ws url to localhost or server */);
|
||||||
// const connection = new WebSocket('ws://localhost:4242');
|
// const connection = new WebSocket(document.URL.replace("http", "ws"));
|
||||||
connection.onopen = (e) => { console.log("connection to server opened"); };
|
connection.onopen = (e) => { console.log("connection to server opened"); };
|
||||||
connection.onmessage = (e) => {
|
connection.onmessage = (e) => {
|
||||||
var req = JSON.parse(e.data);
|
var req = JSON.parse(e.data);
|
||||||
|
@ -68,7 +68,6 @@ connection.onmessage = (e) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (req.name == "rid") {
|
else if (req.name == "rid") {
|
||||||
console.log(req);
|
|
||||||
my_rid = req.value;
|
my_rid = req.value;
|
||||||
}
|
}
|
||||||
else if (req.name == "pos") {
|
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 += "<li>"+tod[i].name+": "+tod[i].value+" coins </li>";
|
||||||
|
}
|
||||||
|
for (var i = 0; i < tot.length; i++) {
|
||||||
|
el_tot.innerHTML += "<li>"+tot[i].name+": "+tot[i].value+" coins </li>";
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (req.name == "disconnect") {
|
else if (req.name == "disconnect") {
|
||||||
wasm_function('deco_player')(req.value);
|
wasm_function('deco_player')(req.value);
|
||||||
}
|
}
|
||||||
|
|
36
server.js
36
server.js
|
@ -10,7 +10,7 @@ function update_player_list()
|
||||||
var list = "";
|
var list = "";
|
||||||
sockets.forEach((s) => {
|
sockets.forEach((s) => {
|
||||||
if (s.game.pseudo == undefined || s.game.pseudo == "") return;
|
if (s.game.pseudo == undefined || s.game.pseudo == "") return;
|
||||||
list += "<li><img class='players-img' penger-id='"+s.game.id+"' src='museum/Penger.png'>" + s.game.pseudo + "</li>";
|
list += "<li><img class='players-img' penger-id='"+s.game.id+"' src='museum/Penger.png'>" + s.game.pseudo + ": " + s.game.coin + " coins</li>";
|
||||||
});
|
});
|
||||||
sockets.forEach((s) => {
|
sockets.forEach((s) => {
|
||||||
if (s.game.pseudo == undefined || s.game.pseudo == "") return;
|
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 maps = JSON.parse(fs.readFileSync("maps.json"));
|
||||||
|
var leaderboard = JSON.parse(fs.readFileSync("leaderboard.json"));
|
||||||
|
|
||||||
const ws_server = new ws.Server({ port: WS_PORT });
|
const ws_server = new ws.Server({ port: WS_PORT });
|
||||||
|
|
||||||
|
@ -106,6 +107,7 @@ ws_server.on('connection', (socket) => {
|
||||||
socket.game.rid = global_id++;
|
socket.game.rid = global_id++;
|
||||||
|
|
||||||
socket.send('{"name": "rid", "value": '+socket.game.rid+'}');
|
socket.send('{"name": "rid", "value": '+socket.game.rid+'}');
|
||||||
|
socket.send('{"name": "leaderboard", "value": '+JSON.stringify(leaderboard)+'}');
|
||||||
|
|
||||||
sockets.push(socket);
|
sockets.push(socket);
|
||||||
console.log("[", sockets.length, "] connect");
|
console.log("[", sockets.length, "] connect");
|
||||||
|
@ -130,6 +132,38 @@ ws_server.on('connection', (socket) => {
|
||||||
}
|
}
|
||||||
else if (req.name == "coin") {
|
else if (req.name == "coin") {
|
||||||
socket.game.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)+'}');
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue