From 328903af6dae09cc8c419a7e30ac529be6c3a6e6 Mon Sep 17 00:00:00 2001 From: nemo Date: Fri, 27 Sep 2024 14:03:07 +0200 Subject: [PATCH] refacto keyz + ninja dash --- Makefile | 2 +- keys.c | 42 ++++++++++++++++++++++++++++++++++++++++++ keys.h | 25 +++++++++++++++++++++++++ main.c | 52 +++++++++++----------------------------------------- ninja.c | 18 ++++++++++++++++-- ninja.h | 2 +- 6 files changed, 96 insertions(+), 45 deletions(-) create mode 100644 keys.c create mode 100644 keys.h diff --git a/Makefile b/Makefile index 3a3052c..245008e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -SRC=main.c ninja.c +SRC=main.c ninja.c keys.c EXE=voleur CC=gcc diff --git a/keys.c b/keys.c new file mode 100644 index 0000000..1972c65 --- /dev/null +++ b/keys.c @@ -0,0 +1,42 @@ +#include "keys.h" +#include "stdio.h" + +int keys[KC_COUNT] = { + [KC_SHOOT] = MOUSE_BUTTON_LEFT, + [KC_CROUCH] = KEY_LEFT_SHIFT, + [KC_FREECAM] = KEY_F, +}; + +int key_down(KeyControl key) +{ + // NOTE: mouse button id's are less than 6, keyboard id's are over 32 + if (keys[key] <= 6) + return IsMouseButtonDown(keys[key]); + else + return IsKeyDown(keys[key]); +} + +int key_pressed(KeyControl key) +{ + // NOTE: mouse button id's are less than 6, keyboard id's are over 32 + if (keys[key] <= 6) + return IsMouseButtonPressed(keys[key]); + else + return IsKeyPressed(keys[key]); +} + +void change_layout_azerty() +{ + keys[KC_UP] = KEY_S; + keys[KC_DOWN] = KEY_W; + keys[KC_LEFT] = KEY_A; + keys[KC_RIGHT] = KEY_D; +} + +void change_layout_qwerty() +{ + keys[KC_UP] = KEY_W; + keys[KC_DOWN] = KEY_S; + keys[KC_LEFT] = KEY_A; + keys[KC_RIGHT] = KEY_D; +} diff --git a/keys.h b/keys.h new file mode 100644 index 0000000..b8ec2dd --- /dev/null +++ b/keys.h @@ -0,0 +1,25 @@ +#ifndef KEYS_H +#define KEYS_H + +#include "raylib.h" + +typedef enum KeyControl { + KC_UP = 0, + KC_DOWN, + KC_LEFT, + KC_RIGHT, + KC_SHOOT, + KC_FREECAM, + KC_CROUCH, + KC_COUNT, +} KeyControl; + +void change_layout_azerty(); + +void change_layout_qwerty(); + +int key_down(KeyControl key); + +int key_pressed(KeyControl key); + +#endif // KEYS_H diff --git a/main.c b/main.c index 2545a7d..4919f34 100644 --- a/main.c +++ b/main.c @@ -3,6 +3,7 @@ #include "raylib.h" #include "raymath.h" +#include "keys.h" #include "ninja.h" #define SCREEN_MIDDLE ((Vector2) {window_size.x/2, window_size.y/2}) @@ -14,33 +15,6 @@ typedef struct Map { const Rectangle box; } Map; -typedef enum KeyControl { - KC_UP = 0, - KC_DOWN, - KC_LEFT, - KC_RIGHT, - KC_SHOOT, - KC_FREECAM, - KC_CROUCH, - KC_COUNT, -} KeyControl; - -void change_layout_azerty(int *keys) -{ - keys[KC_UP] = KEY_S; - keys[KC_DOWN] = KEY_W; - keys[KC_LEFT] = KEY_A; - keys[KC_RIGHT] = KEY_D; -} - -void change_layout_qwerty(int *keys) -{ - keys[KC_UP] = KEY_W; - keys[KC_DOWN] = KEY_S; - keys[KC_LEFT] = KEY_A; - keys[KC_RIGHT] = KEY_D; -} - Vector2 shake(int force) { Vector2 s; @@ -93,11 +67,7 @@ int main(void) }, }; - int keys[KC_COUNT] = {0}; - keys[KC_SHOOT] = MOUSE_BUTTON_LEFT; - keys[KC_CROUCH] = KEY_LEFT_SHIFT; - keys[KC_FREECAM] = KEY_F; - change_layout_azerty(keys); + change_layout_azerty(); load_ninja(); @@ -109,25 +79,24 @@ int main(void) } float movement_speed = 10.0f * DT * 50; - if ((IsKeyDown(keys[KC_UP]) || IsKeyDown(keys[KC_DOWN])) && (IsKeyDown(keys[KC_LEFT]) || IsKeyDown(keys[KC_RIGHT]))) + if ((key_down(KC_UP) || key_down(KC_DOWN)) && (key_down(KC_LEFT) || key_down(KC_RIGHT))) movement_speed = sqrtf(movement_speed) * 2; - if (IsKeyDown(keys[KC_CROUCH])) + if (key_down(KC_CROUCH)) movement_speed /= 2.0f; - if (IsKeyDown(keys[KC_LEFT])) + if (key_down(KC_LEFT)) camera.target.x -= movement_speed ; - if (IsKeyDown(keys[KC_RIGHT])) + if (key_down(KC_RIGHT)) camera.target.x += movement_speed ; - if (IsKeyDown(keys[KC_DOWN])) + if (key_down(KC_DOWN)) camera.target.y -= movement_speed ; - if (IsKeyDown(keys[KC_UP])) + if (key_down(KC_UP)) camera.target.y += movement_speed ; camera_bound(&camera, map.box, ninja_radius()); + // NOTE: si on doit faire un screen shake, l'appliquer a cet variable Vector2 cam_shake = {0}; - if (IsMouseButtonDown(keys[KC_SHOOT])) - cam_shake = shake(12); BeginDrawing(); { @@ -140,11 +109,12 @@ int main(void) DrawTexture(map.texture, map.box.x, map.box.y, WHITE); } EndMode2D(); - draw_ninja(Vector2Add(SCREEN_MIDDLE, cam_shake)); + draw_ninja(Vector2Add(SCREEN_MIDDLE, cam_shake), &camera); } EndDrawing(); } CloseWindow(); + return 0; } diff --git a/ninja.c b/ninja.c index 8173c42..b560bf5 100644 --- a/ninja.c +++ b/ninja.c @@ -2,6 +2,8 @@ #include "raymath.h" #include "stdio.h" +#include "keys.h" + Texture ninja_texture; void load_ninja() @@ -14,10 +16,22 @@ float ninja_radius() return fmax(ninja_texture.width, ninja_texture.height)/2; } -void draw_ninja(Vector2 pos) +Vector2 ninja_dash(Vector2 pos) { + Vector2 dash = {0}; + Vector2 mouse = GetMousePosition(); + Vector2 diff = Vector2Subtract(mouse, pos); + dash = Vector2Normalize(diff); + dash.x *= 100; + dash.y *= 100; + return dash; +} + +void draw_ninja(Vector2 pos, Camera2D *cam) +{ + if (key_pressed(KC_SHOOT)) + cam->target = Vector2Add(cam->target, ninja_dash(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}; diff --git a/ninja.h b/ninja.h index 1313bb4..6ac390e 100644 --- a/ninja.h +++ b/ninja.h @@ -5,6 +5,6 @@ void load_ninja(); float ninja_radius(); -void draw_ninja(Vector2 truc); +void draw_ninja(Vector2 pos, Camera2D *cam); #endif // NINJA_H