X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=blobdiff_plain;f=vg_input.c;fp=vg_input.c;h=d4e51bc6b77ca3c3c974a4cf9fa7e9156ac2a6c0;hp=c536c1f2ab2fd23446a2ca4778ef2ebc2a3f0d98;hb=f8364997f9cd4c55e26522aa1e1f1ad93511b297;hpb=809e802a62579292a64af48937476f4670b2a374 diff --git a/vg_input.c b/vg_input.c index c536c1f..d4e51bc 100644 --- a/vg_input.c +++ b/vg_input.c @@ -128,13 +128,33 @@ void vg_input_device_event( SDL_Event *ev ) } } +static void vg_input_set_active_controller( int index, const char *why ) +{ + if( vg_input.active_controller_index != index ) + { + vg_input.display_input_type = + SDL_GameControllerGetType( vg_input.controllers[index].handle ); + vg_input.active_controller_index = index; + vg_info( "Switching controller index to #%d. (%s)\n", index, why ); + } + + if( vg_input.display_input_method != k_input_method_controller ) + { + vg_input.display_input_method = k_input_method_controller; + vg_info( "Switching input method to controller. (%s)\n", why ); + } +} + void vg_input_controller_event( SDL_Event *ev ) { - if( ev->type == SDL_CONTROLLERAXISMOTION ){ - for( int i=0; itype == SDL_CONTROLLERAXISMOTION ) + { + for( int i=0; icaxis.which == esta->instance_id ){ + if( ev->caxis.which == esta->instance_id ) + { float value = (float)ev->caxis.value / 32767.0f; if( ev->caxis.axis == SDL_CONTROLLER_AXIS_LEFTX || @@ -146,6 +166,8 @@ void vg_input_controller_event( SDL_Event *ev ) high = vg_maxf( 0.0f, fabsf(value) - deadz ); value = vg_signf(value) * (high / (1.0f-deadz)); + if( fabsf(value) > 0.5f ) + vg_input_set_active_controller( i, "Stick pushed >|0.5|" ); } esta->axises[ ev->caxis.axis ] = value; @@ -153,50 +175,26 @@ void vg_input_controller_event( SDL_Event *ev ) } } } - else if( ev->type == SDL_CONTROLLERBUTTONDOWN ){ - struct vg_controller *active = NULL; - - if( vg_input.active_controller_index >= 0 ) - active = &vg_input.controllers[vg_input.active_controller_index]; - - if( !active || (ev->cbutton.which != active->instance_id) ){ - active = NULL; - vg_input.active_controller_index = -1; - vg_input.display_input_method = k_input_method_kbm; - - for( int i=0; icbutton.which ){ - active = &vg_input.controllers[i]; - vg_input.active_controller_index = i; - vg_input.display_input_type = - SDL_GameControllerGetType(active->handle); - break; - } - } - - if( active ){ - vg_info( "Switching active controller index to #%d\n", - vg_input.active_controller_index ); - } - else{ - vg_error( "Input out of range (SDL_JoystickID#%d)\n", - ev->cbutton.which ); - } - } - - if( active ){ - if( vg_input.display_input_method != k_input_method_controller ){ - vg_input.display_input_method = k_input_method_controller; - vg_info( "display_input: k_input_method_controller\n" ); + else if( ev->type == SDL_CONTROLLERBUTTONDOWN ) + { + for( int i=0; iinstance_id == ev->cbutton.which ) + { + vg_input_set_active_controller( i, "Button press" ); + esta->buttons[ ev->cbutton.button ] = 1; + break; } - active->buttons[ ev->cbutton.button ] = 1; } } - else if( ev->type == SDL_CONTROLLERBUTTONUP ){ - for( int i=0; itype == SDL_CONTROLLERBUTTONUP ) + { + for( int i=0; icbutton.which == esta->instance_id ){ + if( ev->cbutton.which == esta->instance_id ) + { esta->buttons[ ev->cbutton.button ] = 0; break; }