{
SDL_GameControllerButton gamepad_id;
SDL_Keycode keyboard_id;
+ int mouse_id;
int value, prev;
}
button;
bind->axis.keyboard_negative = -1;
bind->button.gamepad_id = -1;
bind->button.keyboard_id = -1;
+ bind->button.mouse_id = -1;
}
VG_STATIC struct input_binding *vg_create_named_input( const char *name,
bind->axis.keyboard_negative = -1;
bind->button.gamepad_id = -1;
bind->button.keyboard_id = -1;
+ bind->button.mouse_id = -1;
return bind;
}
{k_input_type_gamepad_button, "gp-dpad-left", SDL_CONTROLLER_BUTTON_DPAD_LEFT},
{k_input_type_gamepad_button,"gp-dpad-right",SDL_CONTROLLER_BUTTON_DPAD_RIGHT},
{k_input_type_gamepad_button, "gp-dpad-up", SDL_CONTROLLER_BUTTON_DPAD_UP},
- {k_input_type_gamepad_button, "\2gp-menu", SDL_CONTROLLER_BUTTON_BACK}
+ {k_input_type_gamepad_button, "\2gp-menu", SDL_CONTROLLER_BUTTON_BACK},
+
+ {k_input_type_mouse_button, "mouse1", SDL_BUTTON_LEFT },
+ {k_input_type_mouse_button, "mouse2", SDL_BUTTON_RIGHT }
};
VG_STATIC const char *vg_input_to_str( u32 input, enum input_type input_type )
vg_info( " keyboard_id: %s\n",
vg_input_to_str(bind->button.keyboard_id,
k_input_type_keyboard_key));
+ vg_info( " mouse_id: %s\n",
+ vg_input_to_str(bind->button.mouse_id,
+ k_input_type_mouse_button));
}
}
if( type == k_input_type_keyboard_key )
bind->button.keyboard_id = id;
+ else if( type == k_input_type_mouse_button )
+ bind->button.mouse_id = id;
else if( type == k_input_type_gamepad_button )
bind->button.gamepad_id = id;
else
}
/*
- * bind x jump
- * bind a -horizontal
- * bind d +horizontal
- * bind -gp-ls-h horizontal
+ * bind jump x
+ * bind -horizontal a
+ * bind +horizontal d
+ * bind horizontal -gp-ls-h
*/
VG_STATIC int vg_rebind_input_cmd( int argc, const char *argv[] )
return 0;
}
+VG_STATIC void vg_rebind_input_cmd_poll( int argc, const char *argv[] )
+{
+ if( argc == 0 )
+ return;
+
+ const char *str_bind_name = argv[0];
+
+ if( argc == 1 )
+ {
+ for( u32 i=0; i<vg_input.named_input_count; i++ )
+ {
+ struct input_binding *bind = &vg_input.named_inputs[i];
+ console_suggest_score_text( bind->name, argv[argc-1], 0 );
+ }
+ }
+
+ else if( argc == 2 )
+ {
+ for( int i=0; i<vg_list_size(vg_all_bindable_inputs); i++ )
+ {
+ struct input_en *desc = &vg_all_bindable_inputs[i];
+ console_suggest_score_text( desc->alias, argv[argc-1], 0 );
+ }
+ }
+}
+
VG_STATIC u8 vg_getkey( SDL_Keycode kc )
{
SDL_Scancode sc = SDL_GetScancodeFromKey( kc );
vg_input.controller_buttons[ bind->button.gamepad_id ];
if( bind->button.keyboard_id != -1 )
+ {
bind->button.value |= vg_getkey( bind->button.keyboard_id );
+ }
+
+ 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 )
{
vg_function_push( (struct vg_cmd)
{
.name = "bind",
- .function = vg_rebind_input_cmd
+ .function = vg_rebind_input_cmd,
+ .poll_suggest = vg_rebind_input_cmd_poll
});
- vg_convar_push( (struct vg_convar){
+ vg_var_push( (struct vg_var){
.name = "controller_deadzone",
.data = &g_controller_deadzone,
- .data_type = k_convar_dtype_f32,
+ .data_type = k_var_dtype_f32,
.opt_f32 = { .clamp = 0 },
.persistent = 1
});