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();