diff --git a/main.c b/main.c index e6b9a25..108e0d7 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,5 @@ #include +#include #include "raylib.h" #define SCREEN_MIDDLE ((Vector2) {window_size.x/2, window_size.y/2}) @@ -13,6 +14,33 @@ 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; +} + Camera2D shake(Camera2D cam, int force) { cam.offset.x += GetRandomValue(-force/2, force/2); @@ -55,7 +83,11 @@ int main(void) }, }; - int keyboard_layout_azerty = 1; + 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); while (!WindowShouldClose()) { float DT = GetFrameTime(); @@ -65,34 +97,23 @@ int main(void) } float movement_speed = 10.0f * DT * 50; - if ((IsKeyDown(KEY_LEFT) || IsKeyDown(KEY_RIGHT)) && (IsKeyDown(KEY_UP) || IsKeyDown(KEY_DOWN))) - movement_speed = 6.324f * DT * 50; - if (IsKeyDown(KEY_LEFT_SHIFT)) + if ((IsKeyDown(keys[KC_UP]) || IsKeyDown(keys[KC_DOWN])) && (IsKeyDown(keys[KC_LEFT]) || IsKeyDown(keys[KC_RIGHT]))) + movement_speed = sqrtf(movement_speed) * 2; + if (IsKeyDown(keys[KC_CROUCH])) movement_speed /= 2.0f; - if (keyboard_layout_azerty) { - if (IsKeyDown(KEY_A)) - camera.target.x -= movement_speed ; - if (IsKeyDown(KEY_D)) - camera.target.x += movement_speed ; - if (IsKeyDown(KEY_W)) - camera.target.y -= movement_speed ; - if (IsKeyDown(KEY_S)) - camera.target.y += movement_speed ; - } else { - if (IsKeyDown(KEY_Q)) - camera.target.x -= movement_speed ; - if (IsKeyDown(KEY_D)) - camera.target.x += movement_speed ; - if (IsKeyDown(KEY_Z)) - camera.target.y -= movement_speed ; - if (IsKeyDown(KEY_S)) - camera.target.y += movement_speed ; - } + if (IsKeyDown(keys[KC_LEFT])) + camera.target.x -= movement_speed ; + if (IsKeyDown(keys[KC_RIGHT])) + camera.target.x += movement_speed ; + if (IsKeyDown(keys[KC_DOWN])) + camera.target.y -= movement_speed ; + if (IsKeyDown(keys[KC_UP])) + camera.target.y += movement_speed ; - if (IsKeyReleased(KEY_F)) + if (IsKeyReleased(keys[KC_FREECAM])) camera.target = player.coord; - if (!IsKeyDown(KEY_F)) { + if (!IsKeyDown(keys[KC_FREECAM])) { player.coord = GetScreenToWorld2D(SCREEN_MIDDLE, camera); if (player.coord.x - player.radius < map.box.x) @@ -109,7 +130,7 @@ int main(void) } Camera2D effect_camera = camera; - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) + if (IsMouseButtonDown(keys[KC_SHOOT])) effect_camera = shake(camera, 12); BeginDrawing();