+++ /dev/null
-#ifndef INPUT_H
-#define INPUT_H
-
-#define VG_GAME
-#include "vg/vg.h"
-#include "vg/vg_platform.h"
-#include "vg/vg_console.h"
-#include "vg/vg_input.h"
-#include "vg/vg_m.h"
-#include "font.h"
-
-enum sr_bind{
- k_srbind_jump = 0,
- k_srbind_push,
- k_srbind_trick0,
- k_srbind_trick1,
- k_srbind_trick2,
- k_srbind_use,
- k_srbind_reset,
- k_srbind_camera,
- k_srbind_mleft,
- k_srbind_mright,
- k_srbind_mup,
- k_srbind_mdown,
- k_srbind_mback,
- k_srbind_maccept,
- k_srbind_mopen,
- k_srbind_replay_play,
- k_srbind_replay_freecam,
- k_srbind_replay_resume,
- k_srbind_max,
-};
-
-enum sr_joystick{
- k_srjoystick_steer = 0,
- k_srjoystick_grab,
- k_srjoystick_look,
- k_srjoystick_max
-};
-
-enum sr_axis{
- k_sraxis_grab = 0,
- k_sraxis_mbrowse_h,
- k_sraxis_mbrowse_v,
- k_sraxis_replay_h,
-
- k_sraxis_max
-};
-
-struct {
- float axis_states[ k_sraxis_max ][2];
- v2f joystick_states[ k_srjoystick_max ][2];
- u8 button_states[ k_srbind_max ][2];
- u32 enabled;
-}
-static srinput;
-
-static const char *controller_glyphs[ SDL_CONTROLLER_BUTTON_MAX ][2] =
-{ /* xbox/generic playstation */
- [ SDL_CONTROLLER_BUTTON_A ] = { "\x1e\x85","\x1e\x82" },
- [ SDL_CONTROLLER_BUTTON_B ] = { "\x1e\x86","\x1e\x81" },
- [ SDL_CONTROLLER_BUTTON_X ] = { "\x1e\x83","\x1e\x7f" },
- [ SDL_CONTROLLER_BUTTON_Y ] = { "\x1e\x84","\x1e\x80" },
- [ SDL_CONTROLLER_BUTTON_LEFTSTICK ] = { "\x87", "\x87" },
- [ SDL_CONTROLLER_BUTTON_RIGHTSTICK ] = { "\x8b", "\x8b" },
- [ SDL_CONTROLLER_BUTTON_LEFTSHOULDER ] = { "\x91", "\x91" },
- [ SDL_CONTROLLER_BUTTON_RIGHTSHOULDER ]= { "\x92", "\x92" },
- [ SDL_CONTROLLER_BUTTON_DPAD_LEFT ] = { "\x1e\x93","\x1e\x93" },
- [ SDL_CONTROLLER_BUTTON_DPAD_UP ] = { "\x1e\x94","\x1e\x94" },
- [ SDL_CONTROLLER_BUTTON_DPAD_RIGHT ] = { "\x1e\x95","\x1e\x95" },
- [ SDL_CONTROLLER_BUTTON_DPAD_DOWN ] = { "\x1e\x96","\x1e\x96" },
- [ SDL_CONTROLLER_BUTTON_GUIDE ] = { "\x91", "\x91" },
-};
-
-static const char *controller_glyph( u32 sdl_index ){
- if( vg_input.display_input_type == SDL_CONTROLLER_TYPE_PS3 ||
- vg_input.display_input_type == SDL_CONTROLLER_TYPE_PS4 ||
- vg_input.display_input_type == SDL_CONTROLLER_TYPE_PS5 )
- {
- return controller_glyphs[ sdl_index ][ 1 ];
- }
- else if( vg_input.display_input_type ==
- SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO ||
- vg_input.display_input_type ==
- SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT ||
- vg_input.display_input_type ==
- SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR ||
- vg_input.display_input_type ==
- SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT )
- {
- return NULL;
- }
- else
- return controller_glyphs[ sdl_index ][ 0 ];
-}
-
-#define KEYBOARD_GLYPH( X ) "\x1f" X " "
-
-static const char *button_display_string( enum sr_bind button )
-{
- const char *controller_table[ k_srbind_max ] = {
- [k_srbind_jump] = controller_glyph( SDL_CONTROLLER_BUTTON_A ),
- [k_srbind_push] = controller_glyph( SDL_CONTROLLER_BUTTON_B ),
- [k_srbind_trick0] = controller_glyph( SDL_CONTROLLER_BUTTON_A ),
- [k_srbind_trick1] = controller_glyph( SDL_CONTROLLER_BUTTON_B ),
- [k_srbind_trick2] = controller_glyph( SDL_CONTROLLER_BUTTON_X ),
- [k_srbind_use] = controller_glyph( SDL_CONTROLLER_BUTTON_Y ),
- [k_srbind_reset] = controller_glyph( SDL_CONTROLLER_BUTTON_LEFTSHOULDER ),
- [k_srbind_camera] = controller_glyph( SDL_CONTROLLER_BUTTON_RIGHTSHOULDER ),
- [k_srbind_mleft] = controller_glyph( SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
- [k_srbind_mright] = controller_glyph( SDL_CONTROLLER_BUTTON_DPAD_RIGHT ),
- [k_srbind_mup] = controller_glyph( SDL_CONTROLLER_BUTTON_DPAD_UP ),
- [k_srbind_mdown] = controller_glyph( SDL_CONTROLLER_BUTTON_DPAD_DOWN ),
- [k_srbind_mback] = controller_glyph( SDL_CONTROLLER_BUTTON_B ),
- [k_srbind_maccept]= controller_glyph( SDL_CONTROLLER_BUTTON_A ),
- [k_srbind_mopen] = controller_glyph( SDL_CONTROLLER_BUTTON_GUIDE ),
-[k_srbind_replay_play]= controller_glyph( SDL_CONTROLLER_BUTTON_X ),
-[k_srbind_replay_freecam]=controller_glyph(SDL_CONTROLLER_BUTTON_Y ),
-[k_srbind_replay_resume]=controller_glyph( SDL_CONTROLLER_BUTTON_A )
- };
-
- const char *keyboard_table[ k_srbind_max ] = {
- [k_srbind_jump] = "\xa1",
- [k_srbind_push] = KEYBOARD_GLYPH( "W" ),
- [k_srbind_trick0] = "\x99",
- [k_srbind_trick1] = "\x9a",
- [k_srbind_trick2] = "\x9b",
- [k_srbind_use] = KEYBOARD_GLYPH( "E" ),
- [k_srbind_reset] = KEYBOARD_GLYPH( "R" ),
- [k_srbind_camera] = KEYBOARD_GLYPH( "C" ),
- [k_srbind_mleft] = KEYBOARD_GLYPH( "\x93" ),
- [k_srbind_mright] = KEYBOARD_GLYPH( "\x95" ),
- [k_srbind_mup] = KEYBOARD_GLYPH( "\x94" ),
- [k_srbind_mdown] = KEYBOARD_GLYPH( "\x96" ),
- [k_srbind_mback] = "\xa3",
- [k_srbind_maccept]= "\xa2",
- [k_srbind_mopen] = "\xa3" ,
-[k_srbind_replay_play]= KEYBOARD_GLYPH( "E" ),
-[k_srbind_replay_freecam] = KEYBOARD_GLYPH( "F" ),
-[k_srbind_replay_resume]= "\xa1",
- };
-
- if( vg_input.display_input_method == k_input_method_controller )
- return controller_table[ button ];
- else
- return keyboard_table[ button ];
-}
-
-static const char *axis_display_string( enum sr_axis axis )
-{
- const char *controller_table[ k_sraxis_max ] = {
- [k_sraxis_grab] = "\x90",
- [k_sraxis_mbrowse_h] = "\x88",
- [k_sraxis_mbrowse_v] = "\x89",
- [k_sraxis_replay_h] = "\x88"
- };
-
- const char *keyboard_table[ k_sraxis_max ] = {
- [k_sraxis_grab] = "\x9e",
- [k_sraxis_mbrowse_h] = KEYBOARD_GLYPH("\x93")KEYBOARD_GLYPH("\x95"),
- [k_sraxis_mbrowse_v] = KEYBOARD_GLYPH("\x96")KEYBOARD_GLYPH("\x94"),
- [k_sraxis_replay_h] = KEYBOARD_GLYPH("A")KEYBOARD_GLYPH("D"),
- };
-
- if( vg_input.display_input_method == k_input_method_controller )
- return controller_table[ axis ];
- else
- return keyboard_table[ axis ];
-}
-
-static const char *joystick_display_string( enum sr_joystick joystick,
- u32 axis )
-{
- const char *controller_table[ k_srjoystick_max ][3] = {
- [k_srjoystick_steer] = {"\x88","\x89","\x8a"},
- [k_srjoystick_grab] = {"\x8c","\x8d","\x8e"},
- [k_srjoystick_look] = {"\x8c","\x8d","\x8e"}
- };
-
- const char *keyboard_table[ k_srjoystick_max ][3] = {
- [k_srjoystick_steer] = {KEYBOARD_GLYPH("A")KEYBOARD_GLYPH("D"), /*h*/
- KEYBOARD_GLYPH("W")KEYBOARD_GLYPH("S"), /*v*/
-
- KEYBOARD_GLYPH("A")KEYBOARD_GLYPH("D") /*hv*/
- KEYBOARD_GLYPH("W")KEYBOARD_GLYPH("S"), },
- [k_srjoystick_grab] = {"\xa4","\xa4","\xa4"},
- [k_srjoystick_look] = {"\xa4","\xa4","\xa4"}
- };
-
- if( vg_input.display_input_method == k_input_method_controller )
- return controller_table[ joystick ][axis];
- else return keyboard_table[ joystick ][axis];
-}
-
-static int buttons_filter_fixed(void)
-{
- if( !srinput.enabled ) return 1;
- if( vg_ui.wants_mouse ) return 1;
-
- if( vg.engine_stage == k_engine_stage_update_fixed )
- if( vg.fixed_iterations > 0 )
- return 1;
-
- return 0;
-}
-
-/* Rising edge of button */
-static int button_down( enum sr_bind button )
-{
- if( buttons_filter_fixed() ) return 0;
-
- if( srinput.button_states[ button ][0] &&
- !srinput.button_states[ button ][1] )
- return 1;
- else
- return 0;
-}
-
-/* Falling edge of button */
-static int button_up( enum sr_bind button )
-{
- if( buttons_filter_fixed() ) return 0;
-
- if( !srinput.button_states[ button ][0] &&
- srinput.button_states[ button ][1] )
- return 1;
- else
- return 0;
-}
-
-/* State of button */
-static int button_press( enum sr_bind button )
-{
- if( vg_ui.wants_mouse ) return 0;
- return srinput.button_states[ button ][0];
-}
-
-static void joystick_state( enum sr_joystick joystick, v2f state )
-{
- if( vg_ui.wants_mouse )
- v2_zero( state );
- else
- v2_copy( srinput.joystick_states[ joystick ][0], state );
-}
-
-static float axis_state( enum sr_axis axis ){
- if( vg_ui.wants_mouse ) return 0.0f;
- else return srinput.axis_states[axis][0];
-}
-
-static void setbtn( enum sr_bind button, u8 value )
-{
- srinput.button_states[button][0] |= value;
-}
-
-static void skaterift_preupdate_inputs(void)
-{
- for( u32 i=0; i<k_srbind_max; i++ ){
- srinput.button_states[i][1] = srinput.button_states[i][0];
- srinput.button_states[i][0] = 0;
- }
-
- for( u32 i=0; i<k_srjoystick_max; i++ ){
- v2_copy( srinput.joystick_states[i][0], srinput.joystick_states[i][1] );
- v2_zero( srinput.joystick_states[i][0] );
- }
-
- for( u32 i=0; i<k_sraxis_max; i++ ){
- srinput.axis_states[i][1] = srinput.axis_states[i][0];
- srinput.axis_states[i][0] = 0.0f;
- }
-
- u32 mouse = SDL_GetMouseState(NULL,NULL),
- mouse1= (mouse & SDL_BUTTON(SDL_BUTTON_LEFT))? 1: 0,
- mouse2= (mouse & SDL_BUTTON(SDL_BUTTON_RIGHT))? 1: 0;
-
- /* button inputs
- * ------------------------------------- */
- setbtn( k_srbind_jump, vg_getkey(SDLK_SPACE) );
- setbtn( k_srbind_push, vg_getkey(SDLK_w) );
- setbtn( k_srbind_trick0, mouse1 );
- setbtn( k_srbind_trick1, mouse2 );
- setbtn( k_srbind_trick2, mouse1 & mouse2 );
- setbtn( k_srbind_use, vg_getkey(SDLK_e) );
- setbtn( k_srbind_reset, vg_getkey(SDLK_r) );
- setbtn( k_srbind_camera, vg_getkey(SDLK_c) );
- setbtn( k_srbind_mleft, vg_getkey(SDLK_LEFT) );
- setbtn( k_srbind_mright, vg_getkey(SDLK_RIGHT) );
- setbtn( k_srbind_mup, vg_getkey(SDLK_UP) );
- setbtn( k_srbind_mdown, vg_getkey(SDLK_DOWN) );
- setbtn( k_srbind_mback, vg_getkey(SDLK_ESCAPE) );
- setbtn( k_srbind_mopen, vg_getkey(SDLK_ESCAPE) );
- setbtn( k_srbind_maccept, vg_getkey(SDLK_e) );
- setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN));
- setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN2));
- setbtn( k_srbind_replay_play, vg_getkey(SDLK_e) );
- setbtn( k_srbind_replay_freecam, vg_getkey(SDLK_f) );
- setbtn( k_srbind_replay_resume, vg_getkey(SDLK_SPACE) );
-
- /* axis
- * --------------------------------------------*/
- srinput.axis_states[ k_sraxis_grab ][0] = vg_getkey( SDLK_LSHIFT );
-
- if( vg_getkey( SDLK_d ) ) {
- srinput.joystick_states[k_srjoystick_steer][0][0] += 1.0f;
- srinput.axis_states[ k_sraxis_replay_h ][0] += 1.0f;
- }
- if( vg_getkey( SDLK_a ) ) {
- srinput.joystick_states[k_srjoystick_steer][0][0] -= 1.0f;
- srinput.axis_states[ k_sraxis_replay_h ][0] -= 1.0f;
- }
- if( vg_getkey( SDLK_w ) )
- srinput.joystick_states[k_srjoystick_steer][0][1] -= 1.0f;
- if( vg_getkey( SDLK_s ) )
- srinput.joystick_states[k_srjoystick_steer][0][1] += 1.0f;
-
- if( vg_getkey( SDLK_DOWN ) )
- srinput.axis_states[ k_sraxis_mbrowse_v ][0] -= 1.0f;
- if( vg_getkey( SDLK_UP ) )
- srinput.axis_states[ k_sraxis_mbrowse_v ][0] += 1.0f;
-
- if( vg_getkey( SDLK_LEFT ) ){
- srinput.axis_states[ k_sraxis_mbrowse_h ][0] -= 1.0f;
- }
- if( vg_getkey( SDLK_RIGHT ) ){
- srinput.axis_states[ k_sraxis_mbrowse_h ][0] += 1.0f;
- }
-
- if( vg_input.active_controller_index >= 0 ){
- struct vg_controller *controller =
- &vg_input.controllers[vg_input.active_controller_index];
-
- u32 *buttons = controller->buttons;
- setbtn( k_srbind_jump, buttons[ SDL_CONTROLLER_BUTTON_A ] );
- setbtn( k_srbind_push, buttons[ SDL_CONTROLLER_BUTTON_B ] );
- setbtn( k_srbind_trick0, buttons[ SDL_CONTROLLER_BUTTON_A ] );
- setbtn( k_srbind_trick1, buttons[ SDL_CONTROLLER_BUTTON_B ] );
- setbtn( k_srbind_trick2, buttons[ SDL_CONTROLLER_BUTTON_X ] );
- setbtn( k_srbind_use, buttons[ SDL_CONTROLLER_BUTTON_Y ] );
- setbtn( k_srbind_reset, buttons[ SDL_CONTROLLER_BUTTON_LEFTSHOULDER ] );
- setbtn( k_srbind_camera, buttons[ SDL_CONTROLLER_BUTTON_RIGHTSHOULDER ] );
- setbtn( k_srbind_mleft, buttons[ SDL_CONTROLLER_BUTTON_DPAD_LEFT ] );
- setbtn( k_srbind_mright, buttons[ SDL_CONTROLLER_BUTTON_DPAD_RIGHT ] );
- setbtn( k_srbind_mup, buttons[ SDL_CONTROLLER_BUTTON_DPAD_UP ] );
- setbtn( k_srbind_mdown, buttons[ SDL_CONTROLLER_BUTTON_DPAD_DOWN ] );
- setbtn( k_srbind_mback, buttons[ SDL_CONTROLLER_BUTTON_B ] );
- setbtn( k_srbind_maccept,buttons[ SDL_CONTROLLER_BUTTON_A ] );
- setbtn( k_srbind_mopen, buttons[ SDL_CONTROLLER_BUTTON_START ] );
- setbtn( k_srbind_mback, buttons[ SDL_CONTROLLER_BUTTON_START ] );
- setbtn( k_srbind_replay_resume, buttons[ SDL_CONTROLLER_BUTTON_A ] );
- setbtn( k_srbind_replay_play, buttons[ SDL_CONTROLLER_BUTTON_X ] );
- setbtn( k_srbind_replay_freecam, buttons[ SDL_CONTROLLER_BUTTON_Y ] );
-
- float *axis = controller->axises;
- float *steer = srinput.joystick_states[ k_srjoystick_steer ][0],
- *look = srinput.joystick_states[ k_srjoystick_look ][0],
- *grab = srinput.joystick_states[ k_srjoystick_grab ][0],
- *axisgrab = &srinput.axis_states[ k_sraxis_grab ][0],
- *axisbrowseh = &srinput.axis_states[ k_sraxis_mbrowse_h ][0],
- *axisbrowsev = &srinput.axis_states[ k_sraxis_mbrowse_v ][0],
- *axisreplayh = &srinput.axis_states[ k_sraxis_replay_h ][0];
-
- steer[0] += axis[ SDL_CONTROLLER_AXIS_LEFTX ];
- steer[1] += axis[ SDL_CONTROLLER_AXIS_LEFTY ];
- look[0] += axis[ SDL_CONTROLLER_AXIS_RIGHTX ];
- look[1] += axis[ SDL_CONTROLLER_AXIS_RIGHTY ];
- grab[0] += axis[ SDL_CONTROLLER_AXIS_RIGHTX ];
- grab[1] += axis[ SDL_CONTROLLER_AXIS_RIGHTY ];
- axisgrab[0] += vg_maxf( 0.0f, axis[ SDL_CONTROLLER_AXIS_TRIGGERRIGHT ] );
- axisbrowseh[0] += axis[ SDL_CONTROLLER_AXIS_LEFTX ];
- axisbrowsev[0] += axis[ SDL_CONTROLLER_AXIS_LEFTY ];
- axisreplayh[0] += axis[ SDL_CONTROLLER_AXIS_LEFTX ];
-
- float lh = axis[ SDL_CONTROLLER_AXIS_LEFTX ],
- lv = axis[ SDL_CONTROLLER_AXIS_LEFTY ],
- sensitivity = 0.35f;
-
- if( lh > sensitivity ) setbtn( k_srbind_mright, 1 );
- if( lh < -sensitivity ) setbtn( k_srbind_mleft, 1 );
- if( lv > sensitivity ) setbtn( k_srbind_mdown, 1 );
- if( lv < -sensitivity ) setbtn( k_srbind_mup, 1 );
- }
-
- srinput.axis_states[ k_sraxis_grab ][0] =
- vg_minf( 1.0f, srinput.axis_states[ k_sraxis_grab ][0] );
-}
-
-#endif /* INPUT_H */