k_sraxis_max
};
+
+#define INPUT_BASIC( KB, JS ) \
+ (vg_input_op[]){vg_keyboard, KB, vg_joy_button, JS, vg_end}
+
+static vg_input_op *input_button_list[] = {
+[k_srbind_jump] = INPUT_BASIC( SDLK_SPACE, SDL_CONTROLLER_BUTTON_A ),
+[k_srbind_push] = INPUT_BASIC( SDLK_w, SDL_CONTROLLER_BUTTON_B ),
+[k_srbind_trick0] = (vg_input_op[]){
+ vg_mouse, SDL_BUTTON_LEFT,
+ vg_joy_button, SDL_CONTROLLER_BUTTON_A, vg_end
+},
+[k_srbind_trick1] = (vg_input_op[]){
+ vg_mouse, SDL_BUTTON_RIGHT,
+ vg_joy_button, SDL_CONTROLLER_BUTTON_B, vg_end
+},
+[k_srbind_trick2] = (vg_input_op[]){
+ vg_mode_mul, vg_mouse, SDL_BUTTON_LEFT, vg_mouse, SDL_BUTTON_RIGHT,
+ vg_mode_absmax, vg_joy_button, SDL_CONTROLLER_BUTTON_X, vg_end
+},
+[k_srbind_use] = INPUT_BASIC( SDLK_e, SDL_CONTROLLER_BUTTON_Y ),
+[k_srbind_reset] = INPUT_BASIC( SDLK_r, SDL_CONTROLLER_BUTTON_LEFTSHOULDER ),
+[k_srbind_camera]= INPUT_BASIC( SDLK_c, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER ),
+[k_srbind_mleft] = INPUT_BASIC( SDLK_LEFT, SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
+[k_srbind_mright]= INPUT_BASIC( SDLK_RIGHT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT ),
+[k_srbind_world_left] =
+ INPUT_BASIC( SDLK_LEFT, SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
+[k_srbind_world_right] =
+ INPUT_BASIC( SDLK_RIGHT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT ),
+[k_srbind_home] = INPUT_BASIC( SDLK_h, SDL_CONTROLLER_BUTTON_Y ),
+[k_srbind_mup] = INPUT_BASIC( SDLK_UP, SDL_CONTROLLER_BUTTON_DPAD_UP ),
+[k_srbind_mdown] = INPUT_BASIC( SDLK_DOWN, SDL_CONTROLLER_BUTTON_DPAD_DOWN ),
+[k_srbind_mback] = INPUT_BASIC( SDLK_ESCAPE, SDL_CONTROLLER_BUTTON_B ),
+[k_srbind_mopen] = INPUT_BASIC( SDLK_ESCAPE, SDL_CONTROLLER_BUTTON_START ),
+[k_srbind_maccept] = (vg_input_op[]){
+ vg_keyboard, SDLK_e, vg_keyboard, SDLK_RETURN, vg_keyboard, SDLK_RETURN2,
+ vg_joy_button, SDL_CONTROLLER_BUTTON_A, vg_end
+},
+[k_srbind_replay_play] = INPUT_BASIC( SDLK_g, SDL_CONTROLLER_BUTTON_X ),
+[k_srbind_replay_resume] = INPUT_BASIC( SDLK_SPACE, SDL_CONTROLLER_BUTTON_A ),
+[k_srbind_replay_freecam] = INPUT_BASIC( SDLK_f, SDL_CONTROLLER_BUTTON_Y ),
+[k_srbind_sit] = INPUT_BASIC( SDLK_z, SDL_CONTROLLER_BUTTON_B ),
+[k_srbind_lobby] = INPUT_BASIC( SDLK_TAB, SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
+[k_srbind_chat ] = (vg_input_op[]){ vg_keyboard, SDLK_y, vg_end },
+[k_srbind_max]=NULL
+};
+
+static vg_input_op *input_axis_list[] = {
+[k_sraxis_grab] = (vg_input_op[]){
+ vg_keyboard, SDLK_LSHIFT,
+ vg_joy_axis, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, vg_end
+},
+[k_sraxis_mbrowse_h] = (vg_input_op[]){
+ vg_mode_add, vg_keyboard, SDLK_RIGHT,
+ vg_mode_sub, vg_keyboard, SDLK_LEFT,
+ vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTX,
+ vg_end
+},
+[k_sraxis_mbrowse_v] = (vg_input_op[]){
+ vg_mode_add, vg_keyboard, SDLK_UP,
+ vg_mode_sub, vg_keyboard, SDLK_DOWN,
+ vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTY,
+ vg_end
+},
+[k_sraxis_replay_h] = (vg_input_op[]){
+ vg_mode_add, vg_keyboard, SDLK_e,
+ vg_mode_sub, vg_keyboard, SDLK_q,
+ vg_mode_add, vg_joy_axis, SDL_CONTROLLER_AXIS_TRIGGERRIGHT,
+ vg_mode_sub, vg_joy_axis, SDL_CONTROLLER_AXIS_TRIGGERLEFT,
+ vg_end
+},
+[k_sraxis_max]=NULL
+};
+
+static vg_input_op *input_joy_list[] = {
+[k_srjoystick_steer] = (vg_input_op[]){
+ vg_index, 0, vg_mode_add, vg_keyboard, SDLK_d,
+ vg_mode_sub, vg_keyboard, SDLK_a,
+ vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTX,
+ vg_index, 1, vg_mode_add, vg_keyboard, SDLK_s,
+ vg_mode_sub, vg_keyboard, SDLK_w,
+ vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTY,
+ vg_end
+},
+[k_srjoystick_grab] = (vg_input_op[]){
+ vg_index, 0, vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_RIGHTX,
+ vg_index, 1, vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_RIGHTY,
+ vg_end
+},
+[k_srjoystick_look] = (vg_input_op[]){
+ vg_index, 0, vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_RIGHTX,
+ vg_index, 1, vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_RIGHTY,
+ vg_end
+},
+[k_srjoystick_max]=NULL
+};
+
struct {
float axis_states[ k_sraxis_max ][2];
v2f joystick_states[ k_srjoystick_max ][2];
u8 button_states[ k_srbind_max ][2];
- u32 enabled;
+
+ enum input_state {
+ k_input_state_enabled,
+ k_input_state_resume,
+ k_input_state_pause
+ }
+ state;
}
static srinput;
}
static int input_filter_generic(void){
- if( !srinput.enabled || vg_ui.wants_mouse || vg_console.enabled )
+ if( srinput.state != k_input_state_enabled ||
+ vg_ui.wants_mouse || vg_console.enabled )
return 1;
else
return 0;
srinput.button_states[button][0] |= value;
}
-static void skaterift_preupdate_inputs(void)
-{
+static void skaterift_preupdate_inputs(void){
+ if( srinput.state == k_input_state_resume )
+ srinput.state = k_input_state_enabled;
+
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;
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_world_left, vg_getkey(SDLK_LEFT) );
- setbtn( k_srbind_world_right, vg_getkey(SDLK_RIGHT) );
- setbtn( k_srbind_home, vg_getkey(SDLK_h) );
- 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_g) );
- setbtn( k_srbind_replay_freecam, vg_getkey(SDLK_f) );
- setbtn( k_srbind_replay_resume, vg_getkey(SDLK_SPACE) );
- setbtn( k_srbind_sit, vg_getkey(SDLK_z) );
- setbtn( k_srbind_lobby, vg_getkey(SDLK_TAB) );
- setbtn( k_srbind_chat, vg_getkey(SDLK_y) );
-
- /* axis
- * --------------------------------------------*/
- srinput.axis_states[ k_sraxis_grab ][0] = vg_getkey( SDLK_LSHIFT );
-
- if( vg_getkey( SDLK_e ) )
- srinput.axis_states[ k_sraxis_replay_h ][0] += 1.0f;
- if( vg_getkey( SDLK_q ) )
- srinput.axis_states[ k_sraxis_replay_h ][0] -= 1.0f;
-
- if( vg_getkey( SDLK_d ) )
- srinput.joystick_states[k_srjoystick_steer][0][0] += 1.0f;
- if( vg_getkey( SDLK_a ) )
- srinput.joystick_states[k_srjoystick_steer][0][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;
- srinput.axis_states[ k_sraxis_mworld_h ][0] -= 1.0f;
- }
- if( vg_getkey( SDLK_RIGHT ) ){
- srinput.axis_states[ k_sraxis_mbrowse_h ][0] += 1.0f;
- srinput.axis_states[ k_sraxis_mworld_h ][0] += 1.0f;
+ for( int i=0; i<k_srbind_max; i++ ){
+ vg_input_op *prog = input_button_list[i];
+ if( prog ){
+ vg_exec_input_program( k_vg_input_type_button_u8, prog,
+ &srinput.button_states[i][0] );
+ }
}
- 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_world_left, buttons[ SDL_CONTROLLER_BUTTON_DPAD_LEFT ] );
- setbtn( k_srbind_world_right,buttons[ SDL_CONTROLLER_BUTTON_DPAD_RIGHT ]);
- setbtn( k_srbind_home, buttons[ SDL_CONTROLLER_BUTTON_Y ] );
- 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 ] );
- setbtn( k_srbind_sit, buttons[ SDL_CONTROLLER_BUTTON_B ] );
- setbtn( k_srbind_lobby, buttons[ SDL_CONTROLLER_BUTTON_DPAD_LEFT ] );
- // k_srbind_chat
-
- 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] += vg_maxf(0.0f,axis[SDL_CONTROLLER_AXIS_TRIGGERRIGHT]);
- axisreplayh[0] -= vg_maxf(0.0f,axis[SDL_CONTROLLER_AXIS_TRIGGERLEFT]);
-
- 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 );
+ for( int i=0; i<k_sraxis_max; i++ ){
+ vg_input_op *prog = input_axis_list[i];
+ if( prog ){
+ vg_exec_input_program( k_vg_input_type_axis_f32, prog,
+ &srinput.axis_states[i][0] );
+ }
}
- srinput.axis_states[ k_sraxis_grab ][0] =
- vg_minf( 1.0f, srinput.axis_states[ k_sraxis_grab ][0] );
+ for( int i=0; i<k_srjoystick_max; i++ ){
+ vg_input_op *prog = input_joy_list[i];
+ if( prog ){
+ vg_exec_input_program( k_vg_input_type_joy_v2f, prog,
+ srinput.joystick_states[i][0] );
+ }
+ }
}
#endif /* INPUT_H */