From b7603d3d8a59b8f4ea22927f8bb35ebf75f74acb Mon Sep 17 00:00:00 2001 From: Uneven Prankster Date: Sun, 27 Aug 2023 19:48:24 -0300 Subject: Controller + Keyboard support --- src/config.h | 2 +- src/controller.c | 14 +++++++------- src/controller.h | 6 +++--- src/main.c | 8 ++++++++ src/rumble.c | 1 + src/script_sys.c | 16 ++++++++++++++++ 6 files changed, 36 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/config.h b/src/config.h index e0f8fe7..40a095c 100644 --- a/src/config.h +++ b/src/config.h @@ -36,7 +36,7 @@ typedef i32 fx32; #define FIXED_POINT_ONE (1 << FIXED_POINT_BITS) #define TO_FIXED(x) ((fx32)(x) << FIXED_POINT_BITS) #define FROM_FIXED(x) ((x) >> FIXED_POINT_BITS) -#define FP_TO_FIXED(x) (fx32)((x) * FIXED_POINT_BITS) +#define FP_TO_FIXED(x) (fx32)((x) * FIXED_POINT_ONE) typedef struct{ fx32 x, y; diff --git a/src/controller.c b/src/controller.c index aa8d4d9..e52eec5 100644 --- a/src/controller.c +++ b/src/controller.c @@ -2,17 +2,17 @@ #include -b32 is_button_pressed(i32 btn) +b32 is_key_pressed(i32 btn) { return IsKeyPressed(btn); } -b32 is_button_held(i32 btn) +b32 is_key_held(i32 btn) { return IsKeyDown(btn); } -b32 is_button_released(i32 btn) +b32 is_key_released(i32 btn) { return IsKeyReleased(btn); } @@ -22,10 +22,10 @@ vec2 get_dir_input(void) fx32 cont_x = FP_TO_FIXED(GetGamepadAxisMovement(0, 0)); fx32 cont_y = FP_TO_FIXED(GetGamepadAxisMovement(0, 1)); - fx32 key_w = is_button_held(KEY_W) ? FIXED_POINT_ONE : 0; - fx32 key_s = is_button_held(KEY_S) ? FIXED_POINT_ONE : 0; - fx32 key_a = is_button_held(KEY_A) ? FIXED_POINT_ONE : 0; - fx32 key_d = is_button_held(KEY_D) ? FIXED_POINT_ONE : 0; + fx32 key_w = IsKeyDown(KEY_W) ? FIXED_POINT_ONE : 0; + fx32 key_s = IsKeyDown(KEY_S) ? FIXED_POINT_ONE : 0; + fx32 key_a = IsKeyDown(KEY_A) ? FIXED_POINT_ONE : 0; + fx32 key_d = IsKeyDown(KEY_D) ? FIXED_POINT_ONE : 0; // Either Gamepad or Keyboard control, not both! if(key_w != 0 || key_s != 0 || key_a != 0 || key_d != 0){ diff --git a/src/controller.h b/src/controller.h index 55098cc..e4a7683 100644 --- a/src/controller.h +++ b/src/controller.h @@ -4,9 +4,9 @@ // TODO: Controller button presses you DINGUS -b32 is_button_pressed(i32 btn); -b32 is_button_held(i32 btn); -b32 is_button_released(i32 btn); +b32 is_key_pressed(i32 btn); +b32 is_key_held(i32 btn); +b32 is_key_released(i32 btn); vec2 get_dir_input(void); diff --git a/src/main.c b/src/main.c index c881a18..4fc9bc2 100644 --- a/src/main.c +++ b/src/main.c @@ -3,17 +3,25 @@ #include "shader_sys.h" #include "script_sys.h" +#include "controller.h" +#include "rand_sys.h" + int main() { InitWindow(640, 480, "Gunner Engine"); SetTargetFPS(60); + rand_seed(); + init_tex_sys(); init_shader_sys(); init_script_sys(); while(!WindowShouldClose()){ + float dt = GetFrameTime(); + poll_rumble(dt); + update_textures(); update_shaders(); diff --git a/src/rumble.c b/src/rumble.c index 798b5ec..b2da191 100644 --- a/src/rumble.c +++ b/src/rumble.c @@ -7,6 +7,7 @@ NOTE FOR SPELUNKERS: this requires linking to xinput1_4 AFAIK */ #include "controller.h" +#include // Windows stuff starts // typedef struct _XINPUT_VIBRATION { diff --git a/src/script_sys.c b/src/script_sys.c index 4c87327..761d874 100644 --- a/src/script_sys.c +++ b/src/script_sys.c @@ -2,6 +2,10 @@ #include "texture_sys.h" #include "shader_sys.h" +#include "controller.h" + +#include "rand_sys.h" + #include #include #include @@ -29,6 +33,18 @@ static void restart(void) tcc_add_symbol(new_state, "draw_texture", draw_texture); tcc_add_symbol(new_state, "reset_active_shader", reset_active_shader); + tcc_add_symbol(new_state, "set_rumble", set_rumble); + tcc_add_symbol(new_state, "stop_rumble", stop_rumble); + + tcc_add_symbol(new_state, "rand_u32", rand_u32); + tcc_add_symbol(new_state, "rand_range", rand_range); + + tcc_add_symbol(new_state, "is_key_pressed", is_key_pressed); + tcc_add_symbol(new_state, "is_key_held", is_key_held); + tcc_add_symbol(new_state, "is_key_released", is_key_released); + + tcc_add_symbol(new_state, "get_dir_input", get_dir_input); + if(tcc_add_file(new_state, "assets/src/main.c") == -1){ TRACELOG(LOG_ERROR, "Compilation failed!\n"); return; -- cgit v1.2.3