From d4e02f01b568d745b52a5f6b3fe915f51be8b781 Mon Sep 17 00:00:00 2001 From: nemo Date: Mon, 30 Sep 2024 14:24:11 +0200 Subject: [PATCH] bullet --- Makefile | 2 +- bullet.c | 51 +++++++++++++++++++++++++++++++++++++++++++ bullet.h | 15 +++++++++++++ data/bullet.aseprite | Bin 0 -> 740 bytes data/shuriken.png | Bin 0 -> 400 bytes data/shurkien.png | Bin 0 -> 400 bytes main.c | 3 +++ ninja.c | 5 +++++ 8 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 bullet.c create mode 100644 bullet.h create mode 100644 data/bullet.aseprite create mode 100644 data/shuriken.png create mode 100644 data/shurkien.png diff --git a/Makefile b/Makefile index 245008e..38b9291 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -SRC=main.c ninja.c keys.c +SRC=main.c ninja.c keys.c bullet.c EXE=voleur CC=gcc diff --git a/bullet.c b/bullet.c new file mode 100644 index 0000000..33886ee --- /dev/null +++ b/bullet.c @@ -0,0 +1,51 @@ +#include +#include "raylib.h" +#include "raymath.h" + +#include "bullet.h" + +typedef struct Bullet { + BulletType type; + Vector2 pos; + float time; + float angle; +} Bullet; + +#define BULLET_MAX 500 + +Bullet bullets[BULLET_MAX] = {0}; + +Texture textures[BULLET_COUNT]; + +void bullet_load() +{ + textures[BULLET_SHURIKEN] = LoadTexture("data/shuriken.png"); +} + +void bullet_spawn(BulletType type, Vector2 pos, float angle) +{ + for (int i = 0; i < BULLET_MAX; i++) { + if (bullets[i].time >= EPSILON) + continue; + bullets[i].time = 5; + bullets[i].angle = angle; + bullets[i].pos.x = pos.x - textures[type].width/2; + bullets[i].pos.y = pos.y - textures[type].height/2; + bullets[i].type = type; + break; + } +} + +void draw_bullets(Camera2D *cam) +{ + for (int i = 0; i < BULLET_MAX; i++) { + if (bullets[i].time <= EPSILON) + continue; + + float angle = bullets[i].angle * PI/180; + Vector2 toward = Vector2Normalize((Vector2) {cos(angle), sin(angle)}); + bullets[i].pos = Vector2Add(bullets[i].pos, Vector2Scale(toward, 50)); + bullets[i].time -= GetFrameTime(); + DrawTexture(textures[bullets[i].type], bullets[i].pos.x, bullets[i].pos.y, WHITE); + } +} diff --git a/bullet.h b/bullet.h new file mode 100644 index 0000000..c5138eb --- /dev/null +++ b/bullet.h @@ -0,0 +1,15 @@ +#ifndef BULLET_H +#define BULLET_H + +typedef enum BulletType { + BULLET_SHURIKEN, + BULLET_COUNT, +} BulletType; + +void bullet_load(); + +void bullet_spawn(BulletType type, Vector2 pos, float angle); + +void draw_bullets(Camera2D *cam); + +#endif // BULLET_H diff --git a/data/bullet.aseprite b/data/bullet.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..8566a7687bc3c782027862ad67e5d3bc2b9705ae GIT binary patch literal 740 zcmaFD#K7=iDI< zE8jo~WRn8WQE>1d$l_wi&q+~8D$U7BEl~jSSrnMz@(c_h6&wu38Kp&;*{OL`fjm|P zkTeIwf4D(f3{nggbKYLt$lGAR<8pC!n_$FT(;E%48JZ4@9=Eu*_=>b|{vs`Y(OZzE zLH7Grvz2ph+sr#y=B}2W?Dy@{y~&sF%`aYhBk65z`HSn3hNpGY*My&|x0;^0Bjs&& z>Rx5bTD^bgPDiF_{^LLStj0onmHFgTk|o!sE2lq@S?~1t#9yFuSfRm+>?kdeqoz6X z9aZ3P+53O#-}=k0($R?tY_m#)!ni)K@~~oC(z$f*r^Ti>?22pVM8*|gDXjW4r6=5e z_3~MTPj`O~yKnxe_HOvuouA_0zC2cW{6=H3)wRWSf#+gV3YCi84rYD~DT?|OkY84@ zePx$N=ZaPR9J=Gn8A{RFbqTGo&NtXdrx!%W5AZ2Y-V+8JB|EM5(5D^IXP||U-I}7 zi!B?cfG(8^T1|&uG98Js#jWz^l~X@nPze&?L9d10QdPUel0;=lpcga(YJmjiCfWuG z^n+&L${Ps)K7l!9G^jPnLs6nr3aL8MdxMKop4I3>-)cYnE7{%E?E?Je+xh9qZogba zrRwfqPcvgYLZ(bB$`&(shsCQ&?ys4tPxaLY$c+E%!0Z}*G;?=*f*hAa;G5FUo9Uzq z=!}+?ej9DwOrpml%SSNo)=@Lvo+QXseRR89=k4eR+6JO88bD^Ij4LY uQ%!Wq>2f4x>Z`>i*nhd1q%(MN9DV__Aw@`Dn!vyS0000Px$N=ZaPR9J=Gn8A{RFbqTGo&NtXdrx!%W5AZ2Y-V+8JB|EM5(5D^IXP||U-I}7 zi!B?cfG(8^T1|&uG98Js#jWz^l~X@nPze&?L9d10QdPUel0;=lpcga(YJmjiCfWuG z^n+&L${Ps)K7l!9G^jPnLs6nr3aL8MdxMKop4I3>-)cYnE7{%E?E?Je+xh9qZogba zrRwfqPcvgYLZ(bB$`&(shsCQ&?ys4tPxaLY$c+E%!0Z}*G;?=*f*hAa;G5FUo9Uzq z=!}+?ej9DwOrpml%SSNo)=@Lvo+QXseRR89=k4eR+6JO88bD^Ij4LY uQ%!Wq>2f4x>Z`>i*nhd1q%(MN9DV__Aw@`Dn!vyS0000