From 7124b9b6f892d5c1c230f6170efa1b2d3f86be93 Mon Sep 17 00:00:00 2001 From: nemo Date: Fri, 27 Sep 2024 12:40:28 +0200 Subject: [PATCH] ninjaaaaa --- .gitignore | 1 + data/ninja.aseprite | Bin 0 -> 1015 bytes data/ninja.png | Bin 0 -> 674 bytes main.c | 66 +++++++++++++++++++++----------------------- ninja.c | 29 +++++++++++++++++++ ninja.h | 10 +++++++ 6 files changed, 72 insertions(+), 34 deletions(-) create mode 100644 data/ninja.aseprite create mode 100644 data/ninja.png create mode 100644 ninja.c create mode 100644 ninja.h diff --git a/.gitignore b/.gitignore index 0112d50..86771fd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build/ .wakatime-project voleur voleur.exe +*.zip diff --git a/data/ninja.aseprite b/data/ninja.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..ace405993ed5dc6d7179c654867edcd2498bb26b GIT binary patch literal 1015 zcmey)%)szqDIJ*GD$6t!zLG#DJJx0c<6b zby+|*3&?c}K!%cniK~W9nx$cXnDzZawVMml-W{Ix`;*zsrvX{}49utGd1vYed8-)N zSlZi{7$h`B=RHiG{XhQflhe2V{Qv)d_S)?&b?up1S&?BuWlmjdjEruECtt7L)j!>< zE8jo~WRn6Dkc5H%Kn52>N@`MRxIqnIz6K@STB;TYYQEocp?S_1ye@zyHo! zQ~u_G;l0^67M`r~FYo_&&BeN+r+nF~cZT<7tXq7v=5}!DrWyIK0+w4_-MyrU-AyPi z{?`3};lI2%^@c-blfi)kBp7%YkOM^*6eu@NpFL#2!|0|s%i2WNDA zg0FZj_>y?MPu_E-Zlrztt&R4F^c}DNJo@+NtA!;pi@lcYUe-9%;o^jF{wGQr)=6S_ z(z)M@ZRvOG-#e@4yd3{>!|PQA@AkK{Ue4Uaza{vb(CXz?DbLO=yYj5e(*M)n9slBt z-|-w3o+JKwfkehH2f4%d6?J_sExO`zyUF5vO5aY;SBaJW-?D;?u1DGXi|5E6@(WX& z#uqbN%x90S$9w+6%%+-i9_RbYWbMs4v_yCEEwL9dJpFfPaJ=&N&63VIFQ%3#r1np3 zZTgIs&aJ64T0Cc*@X0!VDX8t_uFk6XXXO{q&e452_aEDDS8K=Tg|D{G6*=eS{7F({Rd`X<8-*9v{RWN9dnbFy zPyMZ95_!h)jVI^3|H?&kH*r?}J0ts?C7sVp_cnKBoR$09gxvzgrv=ptTAb}>nf+k6 IbN~8f09bv0mH+?% literal 0 HcmV?d00001 diff --git a/data/ninja.png b/data/ninja.png new file mode 100644 index 0000000000000000000000000000000000000000..a9446fc11ef9a9e3fc5662085cfefa53bf7f849b GIT binary patch literal 674 zcmV;T0$u%yP)Px%TuDShRCt{2nmta#KoEtWqZ}kkLy~!Frz*lqi{>eV$n_-USFDgb+dqA!PhiC4=qu$6EVtyIB>@#l|Fu)7}19 zH!l;LO|4)PG8fv_(GuzWUQ7D!=DL0V^!jE^!soXp9@S+Nw&Np9rTlj!rE36~&z1my zukVkJjZ1Yj*sgqNh1d|P=VUy9JSOc!J5Za0-To*hb1sN&klW2l{jM*LD?iT}^TPd{| ziXU-u)mqvVq^XoXIME8I?W47hV5gCDec>G6WjZ+b8`M61i4>rTlVug0vVDrLJbhw1 zR7r~{ijRXa(h((4kRhtXjGZ(-?>+)4L>aP5Ow>Glt6yB^XSB;rY+e-*Un!R)2#_cr z&M5*EMS!9Rgo=`UZIF=YyjUp$V-+Q;TE;3$6cj~(q6jq0;!C}g3_-<85ttxDm6*>( zOOqgWtyW5`^Z9JqzDg4tlkFo=L1-UMY1fA}vGy^X#}0|Tzwn{zyCV56XO4O4~=h#j* z+3ZZ)P&_yLPx5eV9rYxW>NqqZi4cJ-qB!Soxm9<3^zGV9gG_NEQN(lNjm<-~&wZdb z*MHwx^X5b=Q0nM+ii#H@Gc@<%vpUx2qA #include #include "raylib.h" +#include "raymath.h" + +#include "ninja.h" #define SCREEN_MIDDLE ((Vector2) {window_size.x/2, window_size.y/2}) -typedef struct Player { - float radius; - Vector2 coord; -} Player; +Vector2 window_size = { 800.0f, 600.0f }; typedef struct Map { const Texture texture; @@ -41,17 +41,31 @@ void change_layout_qwerty(int *keys) keys[KC_RIGHT] = KEY_D; } -Camera2D shake(Camera2D cam, int force) +Vector2 shake(int force) { - cam.offset.x += GetRandomValue(-force/2, force/2); - cam.offset.y += GetRandomValue(-force/2, force/2); - return cam; + Vector2 s; + s.x = GetRandomValue(-force/2, force/2); + s.y = GetRandomValue(-force/2, force/2); + return s; +} + +void camera_bound(Camera2D *cam, Rectangle bound, float player_radius) +{ + Vector2 coord = GetScreenToWorld2D(SCREEN_MIDDLE, *cam); + + if (coord.x - player_radius < bound.x) + cam->target.x = bound.x + player_radius; + else if (coord.x + player_radius > bound.x + bound.width) + cam->target.x = bound.x + bound.width - player_radius; + + if (coord.y - player_radius < bound.y) + cam->target.y = bound.y + player_radius; + else if (coord.y + player_radius > bound.y + bound.height) + cam->target.y = bound.y + bound.height - player_radius; } int main(void) { - Vector2 window_size = { 800.0f, 600.0f }; - Camera2D camera = { .target = {0}, .offset = SCREEN_MIDDLE, @@ -59,10 +73,6 @@ int main(void) .zoom = 1.0f, }; - Player player = { - .radius = 25.0f, - }; - #ifdef RELEASE SetTraceLogLevel(LOG_FATAL); #endif @@ -89,6 +99,8 @@ int main(void) keys[KC_FREECAM] = KEY_F; change_layout_azerty(keys); + load_ninja(); + while (!WindowShouldClose()) { float DT = GetFrameTime(); if (IsWindowResized()) { @@ -111,38 +123,24 @@ int main(void) if (IsKeyDown(keys[KC_UP])) camera.target.y += movement_speed ; - if (IsKeyReleased(keys[KC_FREECAM])) - camera.target = player.coord; - if (!IsKeyDown(keys[KC_FREECAM])) { - player.coord = GetScreenToWorld2D(SCREEN_MIDDLE, camera); + camera_bound(&camera, map.box, ninja_radius()); - if (player.coord.x - player.radius < map.box.x) - camera.target.x = map.box.x + player.radius; - else if (player.coord.x + player.radius > map.box.x + map.box.width) - camera.target.x = map.box.x + map.box.width - player.radius; - - if (player.coord.y - player.radius < map.box.y) - camera.target.y = map.box.y + player.radius; - else if (player.coord.y + player.radius > map.box.y + map.box.height) - camera.target.y = map.box.y + map.box.height - player.radius; - - player.coord = GetScreenToWorld2D(SCREEN_MIDDLE, camera); - } - - Camera2D effect_camera = camera; + Vector2 cam_shake = {0}; if (IsMouseButtonDown(keys[KC_SHOOT])) - effect_camera = shake(camera, 12); + cam_shake = shake(12); BeginDrawing(); { ClearBackground(LIME); + Camera2D effect_camera = camera; + effect_camera.offset = Vector2Add(effect_camera.offset, cam_shake); BeginMode2D(effect_camera); { DrawTexture(map.texture, map.box.x, map.box.y, WHITE); - DrawCircle(player.coord.x, player.coord.y, player.radius, RED); } EndMode2D(); + draw_ninja(Vector2Add(SCREEN_MIDDLE, cam_shake)); } EndDrawing(); } diff --git a/ninja.c b/ninja.c new file mode 100644 index 0000000..8173c42 --- /dev/null +++ b/ninja.c @@ -0,0 +1,29 @@ +#include "raylib.h" +#include "raymath.h" +#include "stdio.h" + +Texture ninja_texture; + +void load_ninja() +{ + ninja_texture = LoadTexture("data/ninja.png"); +} + +float ninja_radius() +{ + return fmax(ninja_texture.width, ninja_texture.height)/2; +} + +void draw_ninja(Vector2 pos) +{ + Texture n = ninja_texture; + // DrawTexture(n, pos.x - n.width/2, pos.y - n.height/2, WHITE); + + Rectangle source = {0, 0, n.width, n.height}; + Rectangle dest = {pos.x, pos.y, n.width, n.height}; + Vector2 origin = {n.width/2, n.height/2}; + float angle = -Vector2LineAngle(pos, GetMousePosition()); + angle *= 180/PI; + angle += 90; + DrawTexturePro(n, source, dest, origin, angle, WHITE); +} diff --git a/ninja.h b/ninja.h new file mode 100644 index 0000000..1313bb4 --- /dev/null +++ b/ninja.h @@ -0,0 +1,10 @@ +#ifndef NINJA_H +#define NINJA_H + +void load_ninja(); + +float ninja_radius(); + +void draw_ninja(Vector2 truc); + +#endif // NINJA_H