X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_input.h;h=8a75b70a37988e77741e0e98b4869e2fbd4f50c7;hb=233cb25785a3179dd041aededd679f4670f4e138;hp=af0ac6882d9ff285cdbe6e95ba91d71a930553a8;hpb=023a4d9f534bbdfc2ff4d85df93c19a29ea4d724;p=vg.git diff --git a/vg_input.h b/vg_input.h index af0ac68..8a75b70 100644 --- a/vg_input.h +++ b/vg_input.h @@ -13,23 +13,19 @@ VG_STATIC inline int vg_get_button( const char *button ); */ VG_STATIC inline int vg_get_button_down( const char *button ); VG_STATIC inline int vg_get_button_up( const char *button ); +VG_STATIC float controller_deadzone = 0.05f; -VG_STATIC float g_controller_deadzone = 0.05f; - -enum vg_button_state -{ +enum vg_button_state{ k_button_state_down = 1, k_button_state_up = 3, k_button_state_pressed = 2, k_button_state_none = 0 }; -struct input_binding -{ +struct input_binding{ const char *name; - enum input_type - { + enum input_type{ k_input_type_button, k_input_type_axis, k_input_type_axis_norm, @@ -42,10 +38,8 @@ struct input_binding } type; - union - { - struct input_axis - { + union{ + struct input_axis{ SDL_GameControllerAxis gamepad_axis; SDL_Keycode keyboard_positive, keyboard_negative; @@ -55,8 +49,7 @@ struct input_binding } axis; - struct - { + struct{ SDL_GameControllerButton gamepad_id; SDL_Keycode keyboard_id; int mouse_id; @@ -127,8 +120,7 @@ VG_STATIC struct input_binding *vg_get_named_input( const char *name ) if( name[0] == '+' || name[0] == '-' ) name ++; - for( u32 i=0; iname, name ) ) return bind; @@ -193,23 +185,19 @@ VG_STATIC const char *vg_input_to_str( u32 input, enum input_type input_type ) if( input == -1 ) return NULL; - if( input_type == k_input_type_keyboard_key ) - { - if( (input >= SDLK_a) && (input <= SDLK_z) ) - { + if( input_type == k_input_type_keyboard_key ){ + if( (input >= SDLK_a) && (input <= SDLK_z) ){ return &"a\0b\0c\0d\0e\0f\0g\0h\0i\0j\0k\0l\0m\0n\0o\0p\0" "q\0r\0s\0t\0u\0v\0w\0x\0y\0z\0"[(input-SDLK_a)*2]; } - if( (input >= SDLK_0) && (input <= SDLK_9) ) - { + if( (input >= SDLK_0) && (input <= SDLK_9) ){ return &"0\0" "1\0" "2\0" "3\0" "4\0" "5\0" "6\0" "7\0" "8\0" "9\0"[(input-SDLK_0)*2]; } } - for( int i=0; itype == input_type) && (desc->id == input) ) @@ -221,43 +209,36 @@ VG_STATIC const char *vg_input_to_str( u32 input, enum input_type input_type ) VG_STATIC enum input_type vg_str_to_input( const char *str, u32 *input ) { - if( !str ) - { + if( !str ){ *input = -1; return k_input_type_unknown; } u32 len = strlen(str); - if( len == 0 ) - { + if( len == 0 ){ *input = -1; return k_input_type_unknown; } - if( len == 1 ) - { + if( len == 1 ){ u8 uch = str[0]; - if( (uch >= (u8)'a') && (uch <= (u8)'z') ) - { + if( (uch >= (u8)'a') && (uch <= (u8)'z') ){ *input = SDLK_a + (uch-(u8)'a'); return k_input_type_keyboard_key; } - if( (uch >= (u8)'0') && (uch <= (u8)'9') ) - { + if( (uch >= (u8)'0') && (uch <= (u8)'9') ){ *input = SDLK_0 + (uch-(u8)'0'); return k_input_type_keyboard_key; } } - for( int i=0; ialias, str ) ) - { + if( !strcmp( desc->alias, str ) ){ *input = desc->id; return desc->type; } @@ -288,8 +269,7 @@ VG_STATIC void vg_print_binding_info( struct input_binding *bind ) vg_input_to_str(bind->axis.keyboard_negative, k_input_type_keyboard_key )); } - else - { + else{ vg_info( " gamepad_id: %s\n", vg_input_to_str(bind->button.gamepad_id, k_input_type_gamepad_button)); vg_info( " keyboard_id: %s\n", @@ -307,16 +287,14 @@ VG_STATIC void vg_apply_bind_str( struct input_binding *bind, { int axis_mod = 0; char modch = ' '; - if( (mod[0] == '-') || (mod[0] == '+') ) - { + if( (mod[0] == '-') || (mod[0] == '+') ){ axis_mod = 1; modch = mod[0]; mod ++; } int invert = 0; - if( (str[0] == '-' ) ) - { + if( (str[0] == '-' ) ){ invert = 1; str ++; } @@ -324,16 +302,13 @@ VG_STATIC void vg_apply_bind_str( struct input_binding *bind, u32 id; enum input_type type = vg_str_to_input( str, &id ); - if( bind->type == k_input_type_button ) - { - if( axis_mod ) - { + if( bind->type == k_input_type_button ){ + if( axis_mod ){ vg_error( "Cannot use axis modifiers on button input!\n" ); return; } - if( invert ) - { + if( invert ){ vg_error( "Cannot invert button input!\n" ); return; } @@ -344,8 +319,7 @@ VG_STATIC void vg_apply_bind_str( struct input_binding *bind, bind->button.mouse_id = id; else if( type == k_input_type_gamepad_button ) bind->button.gamepad_id = id; - else - { + else{ vg_error( "Unknown button or key '%s'\n", str ); return; } @@ -353,12 +327,9 @@ VG_STATIC void vg_apply_bind_str( struct input_binding *bind, else if( (bind->type == k_input_type_axis ) || (bind->type == k_input_type_axis_norm)) { - if( axis_mod ) - { - if( type == k_input_type_keyboard_key ) - { - if( invert ) - { + if( axis_mod ){ + if( type == k_input_type_keyboard_key ){ + if( invert ){ vg_error( "Cannot invert a keyboard key!\n" ); return; } @@ -368,21 +339,17 @@ VG_STATIC void vg_apply_bind_str( struct input_binding *bind, else bind->axis.keyboard_negative = id; } - else - { + else{ vg_error( "You can only bind keyboard keys to +- axises\n" ); return; } } - else - { - if( type == k_input_type_gamepad_axis ) - { + else{ + if( type == k_input_type_gamepad_axis ){ bind->axis.gamepad_inverted = invert; bind->axis.gamepad_axis = id; } - else - { + else{ vg_error( "You can only bind gamepad axises to this\n" ); return; } @@ -399,8 +366,7 @@ VG_STATIC void vg_apply_bind_str( struct input_binding *bind, VG_STATIC int vg_rebind_input_cmd( int argc, const char *argv[] ) { - if( argc == 0 ) - { + if( argc == 0 ){ vg_info( "Usage: bind jump x\n" ); vg_info( " bind -steerh j\n" ); vg_info( " bind steerh gp-ls-h\n" ); @@ -410,20 +376,17 @@ VG_STATIC int vg_rebind_input_cmd( int argc, const char *argv[] ) const char *str_bind_name = argv[0]; struct input_binding *bind = vg_get_named_input( str_bind_name ); - if( !bind ) - { + if( !bind ){ vg_error( "There is no bind with that name '%s'\n", str_bind_name ); return 0; } - if( argc == 1 ) - { + if( argc == 1 ){ vg_print_binding_info( bind ); return 0; } - if( argc == 2 ) - { + if( argc == 2 ){ const char *str_input_id = argv[1]; vg_apply_bind_str( bind, str_bind_name, str_input_id ); @@ -440,19 +403,14 @@ VG_STATIC void vg_rebind_input_cmd_poll( int argc, const char *argv[] ) const char *str_bind_name = argv[0]; - if( argc == 1 ) - { - for( u32 i=0; iname, argv[argc-1], 0 ); } } - - else if( argc == 2 ) - { - for( int i=0; ialias, argv[argc-1], 0 ); } @@ -467,14 +425,11 @@ VG_STATIC u8 vg_getkey( SDL_Keycode kc ) VG_STATIC void vg_input_update( u32 num, struct input_binding *binds ) { - if( vg_console.enabled ) - { - for( i32 i=0; itype == k_input_type_button ) - { + if( bind->type == k_input_type_button ){ bind->button.prev = bind->button.value; bind->button.value = 0; } @@ -483,12 +438,10 @@ VG_STATIC void vg_input_update( u32 num, struct input_binding *binds ) return; } - for( i32 i=0; itype == k_input_type_button ) - { + if( bind->type == k_input_type_button ){ bind->button.prev = bind->button.value; bind->button.value = 0; @@ -496,20 +449,17 @@ VG_STATIC void vg_input_update( u32 num, struct input_binding *binds ) bind->button.value |= vg_input.controller_buttons[ bind->button.gamepad_id ]; - if( bind->button.keyboard_id != -1 ) - { + if( bind->button.keyboard_id != -1 ){ bind->button.value |= vg_getkey( bind->button.keyboard_id ); } - if( bind->button.mouse_id != -1 ) - { + if( bind->button.mouse_id != -1 ){ if( SDL_GetMouseState(NULL, NULL) & SDL_BUTTON( bind->button.mouse_id ) ) bind->button.value |= 1; } } - else if( bind->type == k_input_type_axis ) - { + else if( bind->type == k_input_type_axis ){ float keyboard_value = 0.0f, gamepad_value = 0.0f; @@ -521,8 +471,7 @@ VG_STATIC void vg_input_update( u32 num, struct input_binding *binds ) if( vg_getkey( bind->axis.keyboard_negative ) ) keyboard_value -= 1.0f; - if( bind->axis.gamepad_axis != -1 ) - { + if( bind->axis.gamepad_axis != -1 ){ gamepad_value = vg_input.controller_axises[ bind->axis.gamepad_axis ]; @@ -530,7 +479,7 @@ VG_STATIC void vg_input_update( u32 num, struct input_binding *binds ) gamepad_value *= -1.0f; } - float deadz = vg_clampf( g_controller_deadzone, 0.0f, 0.999f ), + float deadz = vg_clampf( controller_deadzone, 0.0f, 0.999f ), high = vg_maxf( 0.0f, fabsf(gamepad_value) - deadz ), norm = high / (1.0f-deadz); @@ -541,8 +490,7 @@ VG_STATIC void vg_input_update( u32 num, struct input_binding *binds ) else bind->axis.value = gamepad_value; } - else if( bind->type == k_input_type_axis_norm ) - { + else if( bind->type == k_input_type_axis_norm ){ float value = 0.0f; if( bind->axis.keyboard_positive != -1 ) if( vg_getkey( bind->axis.keyboard_positive )) @@ -559,21 +507,17 @@ VG_STATIC void vg_input_update( u32 num, struct input_binding *binds ) VG_STATIC void vg_input_controller_event( SDL_Event *ev ) { - if( ev->type == SDL_CONTROLLERAXISMOTION ) - { - if( ev->caxis.which == vg_input.controller_joystick_id ) - { + if( ev->type == SDL_CONTROLLERAXISMOTION ){ + if( ev->caxis.which == vg_input.controller_joystick_id ){ vg_input.controller_axises[ ev->caxis.axis ] = (float)ev->caxis.value / 32767.0f; } } - else if( ev->type == SDL_CONTROLLERBUTTONDOWN ) - { + else if( ev->type == SDL_CONTROLLERBUTTONDOWN ){ if( ev->cbutton.which == vg_input.controller_joystick_id ) vg_input.controller_buttons[ ev->cbutton.button ] = 1; } - else if( ev->type == SDL_CONTROLLERBUTTONUP ) - { + else if( ev->type == SDL_CONTROLLERBUTTONUP ){ if( ev->cbutton.which == vg_input.controller_joystick_id ) vg_input.controller_buttons[ ev->cbutton.button ] = 0; } @@ -582,10 +526,8 @@ VG_STATIC void vg_input_controller_event( SDL_Event *ev ) VG_STATIC void vg_try_attach_controller(void) { int joy_count = SDL_NumJoysticks(); - for( int i=0; i