--- /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 "conf.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_max
+};
+
+struct {
+ v2f joy_steer,
+ joy_grab,
+ joy_look;
+
+ float axis_grab;
+
+ u8 button_states[ k_srbind_max ][2];
+ float repeaters[4];
+}
+static srinput;
+
+static int button_down( enum sr_bind button )
+{
+ if( vg_console.enabled )
+ return 0;
+
+ if( vg.engine_stage == k_engine_stage_update_fixed )
+ if( vg.fixed_iterations > 0 )
+ return 0;
+
+ if( srinput.button_states[ button ][0] &&
+ !srinput.button_states[ button ][1] )
+ return 1;
+ else
+ return 0;
+}
+
+static int button_up( enum sr_bind button )
+{
+ if( vg_console.enabled )
+ return 0;
+
+ if( vg.engine_stage == k_engine_stage_update_fixed )
+ if( vg.fixed_iterations > 0 )
+ return 0;
+
+ if( !srinput.button_states[ button ][0] &&
+ srinput.button_states[ button ][1] )
+ return 1;
+ else
+ return 0;
+}
+
+static int button_press( enum sr_bind button )
+{
+ if( vg_console.enabled )
+ return 0;
+
+ return srinput.button_states[ button ][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;
+ }
+
+ 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_maccept, vg_getkey(SDLK_e) );
+ setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN));
+ setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN2));
+
+ /* axis
+ * --------------------------------------------*/
+ srinput.axis_grab = vg_getkey( SDLK_LSHIFT );
+
+ v2_zero( srinput.joy_steer );
+ v2_zero( srinput.joy_grab );
+ v2_zero( srinput.joy_look );
+
+ if( vg_getkey( SDLK_d ) ) srinput.joy_steer[0] += 1.0f;
+ if( vg_getkey( SDLK_a ) ) srinput.joy_steer[0] -= 1.0f;
+ if( vg_getkey( SDLK_w ) ) srinput.joy_steer[1] -= 1.0f;
+ if( vg_getkey( SDLK_s ) ) srinput.joy_steer[1] += 1.0f;
+
+ if( vg_input.active_controller_index != -1 ){
+ 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 ] );
+
+ float *axis = controller->axises;
+
+ srinput.joy_steer[0] += axis[ SDL_CONTROLLER_AXIS_LEFTX ],
+ srinput.joy_steer[1] += axis[ SDL_CONTROLLER_AXIS_LEFTY ],
+ srinput.joy_look[0] += axis[ SDL_CONTROLLER_AXIS_RIGHTX ];
+ srinput.joy_look[1] += axis[ SDL_CONTROLLER_AXIS_RIGHTY ];
+ srinput.joy_grab[0] += axis[ SDL_CONTROLLER_AXIS_RIGHTX ];
+ srinput.joy_grab[1] += axis[ SDL_CONTROLLER_AXIS_RIGHTY ];
+ srinput.axis_grab += vg_maxf( 0.0f,
+ axis[ SDL_CONTROLLER_AXIS_TRIGGERRIGHT ] );
+
+ 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_mup, 1 );
+ if( lv < -sensitivity ) setbtn( k_srbind_mdown, 1 );
+ }
+
+ //v2_normalize_clamp( srinput.joy_steer );
+ //v2_normalize_clamp( srinput.joy_grab );
+ srinput.axis_grab = vg_minf( 1.0f, srinput.axis_grab );
+}
+
+#endif /* INPUT_H */