-/*
- * Cannot be used in fixed update
- */
-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;
-
-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{
- const char *name;
-
- enum input_type{
- k_input_type_button,
- k_input_type_axis,
- k_input_type_axis_norm,
-
- k_input_type_unknown,
- k_input_type_keyboard_key,
- k_input_type_mouse_button, /* ? TODO */
- k_input_type_gamepad_axis,
- k_input_type_gamepad_button
- }
- type;
-
- union{
- struct input_axis{
- SDL_GameControllerAxis gamepad_axis;
- SDL_Keycode keyboard_positive,
- keyboard_negative;
-
- int gamepad_inverted;
- float value;
- }
- axis;
-
- struct{
- SDL_GameControllerButton gamepad_id;
- SDL_Keycode keyboard_id;
- int mouse_id;
- int value, prev;
- }
- button;
- };
-
- int save_this;
-};
-
-struct
-{
- const u8 *sdl_keys;
- struct input_binding named_inputs[ 32 ];
- u32 named_input_count;
-
- const char *controller_name;
- SDL_GameController *controller_handle; /* null if unplugged */
- SDL_JoystickID controller_joystick_id;
- int controller_should_use_trackpad_look;
-
- float controller_axises[ SDL_CONTROLLER_AXIS_MAX ];
- int controller_buttons[ SDL_CONTROLLER_BUTTON_MAX ];
-}
-VG_STATIC vg_input;
-
-VG_STATIC void vg_create_unnamed_input( struct input_binding *bind,
- enum input_type type )
-{
- memset( bind, 0, sizeof(struct input_binding) );
-
- bind->name = "API DEFINED";
- bind->save_this = 0;
- bind->type = type;
-
- bind->axis.gamepad_axis = -1;
- bind->axis.keyboard_positive = -1;
- 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,
- enum input_type type )
-{
- struct input_binding *bind =
- &vg_input.named_inputs[ vg_input.named_input_count ++ ];
- memset( bind, 0, sizeof(struct input_binding) );
-
- bind->name = name;
- bind->save_this = 0;
- bind->type = type;
-
- bind->axis.gamepad_axis = -1;
- bind->axis.keyboard_positive = -1;
- bind->axis.keyboard_negative = -1;
- bind->button.gamepad_id = -1;
- bind->button.keyboard_id = -1;
- bind->button.mouse_id = -1;
-
- return bind;
-}
-
-VG_STATIC struct input_binding *vg_get_named_input( const char *name )
-{
- if( name[0] == '+' || name[0] == '-' )
- name ++;
-
- for( u32 i=0; i<vg_input.named_input_count; i++ ){
- struct input_binding *bind = &vg_input.named_inputs[i];
- if( !strcmp( bind->name, name ) )
- return bind;
- }
-
- return NULL;
-}
-
-struct input_en
-{
- enum input_type type;
-
- const char *alias;
- int id;
-}
-vg_all_bindable_inputs[] =
-{
- {k_input_type_keyboard_key, "space", SDLK_SPACE},
- {k_input_type_keyboard_key, ";", SDLK_SEMICOLON},
- {k_input_type_keyboard_key, "-", SDLK_MINUS},
- {k_input_type_keyboard_key, ".", SDLK_PERIOD},
- {k_input_type_keyboard_key, ",", SDLK_COMMA},
- {k_input_type_keyboard_key, "=", SDLK_EQUALS},
- {k_input_type_keyboard_key, "[", SDLK_LEFTBRACKET},
- {k_input_type_keyboard_key, "]", SDLK_RIGHTBRACKET},
- {k_input_type_keyboard_key, "left", SDLK_LEFT},
- {k_input_type_keyboard_key, "right", SDLK_RIGHT},
- {k_input_type_keyboard_key, "up", SDLK_UP},
- {k_input_type_keyboard_key, "down", SDLK_DOWN},
- {k_input_type_keyboard_key, "shift", SDLK_LSHIFT},
- {k_input_type_keyboard_key, "control", SDLK_LCTRL},
- {k_input_type_keyboard_key, "\2enter", SDLK_RETURN},
- {k_input_type_keyboard_key, "\2escape", SDLK_ESCAPE },
-
- {k_input_type_gamepad_axis, "gp-lt", SDL_CONTROLLER_AXIS_TRIGGERLEFT},
- {k_input_type_gamepad_axis, "gp-rt", SDL_CONTROLLER_AXIS_TRIGGERRIGHT},
- {k_input_type_gamepad_axis, "gp-ls-h", SDL_CONTROLLER_AXIS_LEFTX},
- {k_input_type_gamepad_axis, "gp-ls-v", SDL_CONTROLLER_AXIS_LEFTY},
- {k_input_type_gamepad_axis, "gp-rs-h", SDL_CONTROLLER_AXIS_RIGHTX},
- {k_input_type_gamepad_axis, "gp-rs-v", SDL_CONTROLLER_AXIS_RIGHTY},
-
- {k_input_type_gamepad_button, "gp-a", SDL_CONTROLLER_BUTTON_A},
- {k_input_type_gamepad_button, "gp-b", SDL_CONTROLLER_BUTTON_B},
- {k_input_type_gamepad_button, "gp-x", SDL_CONTROLLER_BUTTON_X},
- {k_input_type_gamepad_button, "gp-y", SDL_CONTROLLER_BUTTON_Y},
- {k_input_type_gamepad_button, "gp-rb", SDL_CONTROLLER_BUTTON_RIGHTSHOULDER},
- {k_input_type_gamepad_button, "gp-lb", SDL_CONTROLLER_BUTTON_LEFTSHOULDER},
- {k_input_type_gamepad_button, "gp-rs", SDL_CONTROLLER_BUTTON_RIGHTSTICK},
- {k_input_type_gamepad_button, "gp-ls", SDL_CONTROLLER_BUTTON_LEFTSTICK},
- {k_input_type_gamepad_button, "gp-dpad-down", SDL_CONTROLLER_BUTTON_DPAD_DOWN},
- {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_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 )
-{
- if( input == -1 )
- return NULL;
-
- 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) ){
- 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];
- }
- }