From a674c00062fd16de9bd57fee7fab7d7b96c32a89 Mon Sep 17 00:00:00 2001
From: nemo
Date: Wed, 20 Nov 2024 16:56:38 +0100
Subject: [PATCH] maps
---
app.c | 10 ++++++++--
build.sh | 2 +-
index.html.template | 2 ++
load.js | 17 +++++++++++++++++
maps.json | 30 ++++++++++++++++++++++++++++++
server.js | 24 ++++++++++++++++++++++++
6 files changed, 82 insertions(+), 3 deletions(-)
create mode 100644 maps.json
diff --git a/app.c b/app.c
index 822fd62..7aaff88 100644
--- a/app.c
+++ b/app.c
@@ -248,9 +248,9 @@ int collision(v2 point, int x, int y, int w, int h)
point.y >= y && point.y < y + h);
}
-void init()
+void set_default_map()
{
- pengers_init();
+ nb_collisions = 0;
collisions[nb_collisions++] = (Collision) {
.x = 100,
.y = 400,
@@ -283,6 +283,12 @@ void init()
};
}
+void init()
+{
+ pengers_init();
+ set_default_map();
+}
+
void draw(float dt)
{
int scale = get_scale();
diff --git a/build.sh b/build.sh
index 53df774..76e3f98 100755
--- a/build.sh
+++ b/build.sh
@@ -5,7 +5,7 @@ if [[ "$1" == "clear" ]]; then
exit
fi;
-export_sym="init draw key_pressed key_released set_velocity set_mouse get_pos_x get_pos_y draw_player deco_player reset_collisions add_collisions BUFFER width height id nb_players dir"
+export_sym="init draw key_pressed key_released set_velocity set_mouse get_pos_x get_pos_y draw_player deco_player reset_collisions add_collisions set_default_map BUFFER width height id nb_players dir"
export_cmd=""
for e in $export_sym; do
export_cmd="$export_cmd -Wl,--export=$e";
diff --git a/index.html.template b/index.html.template
index c1ca7ce..0677516 100644
--- a/index.html.template
+++ b/index.html.template
@@ -58,6 +58,8 @@
Players:
+ Playing map : Default Map
+ Next map in : -1
Choose your penger:
diff --git a/load.js b/load.js
index ad9d2a4..90c8467 100644
--- a/load.js
+++ b/load.js
@@ -27,6 +27,9 @@ 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-time').innerText = "-1";
+ wasm_function("set_default_map")();
}
connection.send('{"name": "pseudo", "value": "'+pseudo+'"}');
};
@@ -74,6 +77,20 @@ connection.onmessage = (e) => {
wasm_function('draw_player')(player.rid, player.id, player.x, player.y, player.dir);
}
}
+ else if (req.name == "map") {
+ var map = req.value;
+ document.getElementById("map-name").innerText = map.name;
+ console.log(Date.now(), " -> ", map.next_at);
+ wasm_function('reset_collisions')();
+ for (var i = 0; i < map.collisions.length; i++) {
+ wasm_function('add_collisions')(
+ map.collisions[i].x,
+ map.collisions[i].y,
+ map.collisions[i].width,
+ map.collisions[i].height
+ );
+ }
+ }
else if (req.name == "disconnect") {
wasm_function('deco_player')(req.value);
}
diff --git a/maps.json b/maps.json
new file mode 100644
index 0000000..a99dc97
--- /dev/null
+++ b/maps.json
@@ -0,0 +1,30 @@
+[
+ {
+ "name": "test1",
+ "collisions": [
+ {
+ "x": 0,
+ "y": 0,
+ "width": 100, "height": 100
+ },
+ {
+ "x": 50, "y": 400,
+ "width": 100, "height": 50
+ }
+ ]
+ },
+ {
+ "name": "test2",
+ "collisions": [
+ {
+ "x": 50,
+ "y": 50,
+ "width": 10, "height": 7
+ },
+ {
+ "x": 400, "y": 50,
+ "width": 5, "height": 350
+ }
+ ]
+ }
+]
diff --git a/server.js b/server.js
index 04197eb..2542bb6 100644
--- a/server.js
+++ b/server.js
@@ -34,6 +34,25 @@ function update_player_pos()
}
setTimeout(update_player_pos, update_time_ms);
+var current_map = 0;
+// var map_every_ms = 60 * 1000;
+var map_every_ms = 4 * 1000;
+function send_new_map()
+{
+ var map = maps[Math.floor(Math.random() * maps.length)];
+ map.next_at = Date.now() + map_every_ms;
+ sockets.forEach((s) => {
+ if (s.game.pseudo == undefined || s.game.pseudo == "") return;
+ s.send('{"name": "map", "value": '+JSON.stringify(map)+'}');
+ });
+ setTimeout(send_new_map, map_every_ms);
+}
+setTimeout(send_new_map, map_every_ms);
+function send_map(socket)
+{
+ socket.send('{"name": "map", "value": '+JSON.stringify(maps[current_map])+'}');
+}
+
const requestListener = function (req, res) {
var url = req.url;
@@ -75,6 +94,8 @@ http_server.listen(HTTP_PORT, () => {
console.log(`Server is running on port ${HTTP_PORT}`);
});
+var maps = JSON.parse(fs.readFileSync("maps.json"));
+
const ws_server = new ws.Server({ port: WS_PORT });
var global_id = 0;
@@ -83,7 +104,9 @@ var sockets = [];
ws_server.on('connection', (socket) => {
socket.game = {};
socket.game.rid = global_id++;
+
socket.send('{"name": "rid", "value": '+socket.game.rid+'}');
+
sockets.push(socket);
console.log("connect: ", sockets.length);
@@ -91,6 +114,7 @@ ws_server.on('connection', (socket) => {
var msg_str = Buffer.from(msg).toString('latin1');
var req = JSON.parse(msg_str);
if (req.name == "pseudo") {
+ if (socket.game.pseudo == undefined || socket.game.pseudo == "" && req.value != "") send_map(socket);
socket.game.pseudo = req.value;
if (req.value == "") sockets.forEach((s) => { s.send('{"name": "disconnect", "value": '+socket.game.rid+'}') });
update_player_list();