diff --git a/.gitignore b/.gitignore index f163d7c..4456f41 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ index.html museum.c pengers.h node_modules/ +coin.c diff --git a/app.c b/app.c index 7aaff88..4e3ec09 100644 --- a/app.c +++ b/app.c @@ -1,5 +1,6 @@ #include "pengers.h" #include "hand.c" +#include "coin.c" #define GREEN 0xff00ff00 #define RED 0xff0000ff @@ -20,6 +21,7 @@ int dir = 0; int get_scale(void); float random(void); // flemme de coder un algo random, je recup celui de js (Math.random) float sqrtf(float val); // pareil +void coin_point(void); typedef struct v2 { float x, y; @@ -283,6 +285,25 @@ void set_default_map() }; } +#define MAX_COIN 20 +v2 coins[MAX_COIN] = {0}; +int coin_collected[MAX_COIN] = {0}; +int nb_coins = 0; + +void reset_coins() +{ + for (int i = 0; i < nb_coins; i++) coin_collected[i] = 0; + nb_coins = 0; +} +void add_coin(int x, int y) +{ + if (nb_coins >= MAX_COIN) return; + coins[nb_coins++] = (v2) { + .x = x, + .y = y, + }; +} + void init() { pengers_init(); @@ -365,6 +386,26 @@ void draw(float dt) Collision col = collision_rec(collisions[i], i, scale); x_collide = x_collide || (col.height > 1); } + for (int i = 0; i < nb_coins; i++) { + if (coin_collected[i]) continue; + Collision coin = { + .x = coins[i].x, + .y = coins[i].y, + .width = coin_width, + .height = coin_height + }; + Collision peng = { + .x = penger_pos.x - pengers_width[id]*scale/2, + .y = penger_pos.y - pengers_height[id]*scale/2, + .width = pengers_width[id]*scale, + .height = pengers_height[id]*scale, + }; + Collision col = collision_union(coin, peng); + if (col.width > 0 || col.height > 0) { + coin_collected[i] = 1; + coin_point(); + } + } // dessine le penger des autres joueur for (int p = 0; p < nb_players; p ++) { @@ -423,6 +464,23 @@ void draw(float dt) } } + // dessine les coins + for (int c = 0; c < nb_coins; c++) { + if (coin_collected[c]) continue; + int scale = 2; + for (int y = 0; y < coin_height; y++) { + for (int i = 0; i < coin_width; i++) { + if (coin_img[y][i] <= 0x00FFFFFF) // pixel transparant + continue; + int idx_x = coins[c].x + i; + int idx_y = coins[c].y + y; + if (idx_x < 0 || idx_x >= width || idx_y < 0 || idx_y >= height) + continue; + BUFFER[idx_y*width + idx_x] = coin_img[y][i]; + } + } + } + // draw collisions box for (int i = 0; i < nb_collisions; i++) { for (int y = collisions[i].y; y < collisions[i].y + collisions[i].height; y++) { diff --git a/build.sh b/build.sh index 76e3f98..0a88ff4 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 set_default_map 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 reset_coins add_coin 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"; @@ -52,6 +52,7 @@ sed -e '/Choose your penger:/rpengers_image.html.temp' index.html.template > ind rm pengers_image.html.temp ./png2c "hand.png" > hand.c +./png2c "coin.png" > coin.c clang -O3 --target=wasm32 -fno-builtin -nostdlib --no-standard-libraries -Wl,--no-entry $export_cmd -Wl,--allow-undefined -o $f.wasm $a diff --git a/coin.png b/coin.png new file mode 100644 index 0000000..c797ffa Binary files /dev/null and b/coin.png differ diff --git a/docker-compose.yml b/docker-compose.yml index 2b73485..7c6ee7f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,8 @@ version: "3" services: - web: - container_name: "web" + penger-party: + container_name: "penger-party" image: "node" ports: - "6969:6969" diff --git a/index.html.template b/index.html.template index 0677516..c22577f 100644 --- a/index.html.template +++ b/index.html.template @@ -52,7 +52,7 @@
- play with the pseudo name: + Play online with the pseudo name:
@@ -60,6 +60,7 @@Playing map : Default Map
Next map in : -1
+Coin collected : 0