}
}
+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; i<VG_MAX_CONTROLLERS; i++ ){
+ if( ev->type == SDL_CONTROLLERAXISMOTION )
+ {
+ for( int i=0; i<VG_MAX_CONTROLLERS; i++ )
+ {
struct vg_controller *esta = &vg_input.controllers[i];
- if( ev->caxis.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 ||
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;
}
}
}
- 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; i<VG_MAX_CONTROLLERS; i++ ){
- if( vg_input.controllers[i].instance_id == ev->cbutton.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; i<VG_MAX_CONTROLLERS; i++ )
+ {
+ struct vg_controller *esta = &vg_input.controllers[i];
+ if( esta->instance_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; i<VG_MAX_CONTROLLERS; i++ ){
+ else if( ev->type == SDL_CONTROLLERBUTTONUP )
+ {
+ for( int i=0; i<VG_MAX_CONTROLLERS; i++ )
+ {
struct vg_controller *esta = &vg_input.controllers[i];
-
- if( ev->cbutton.which == esta->instance_id ){
+ if( ev->cbutton.which == esta->instance_id )
+ {
esta->buttons[ ev->cbutton.button ] = 0;
break;
}