small compression
[carveJwlIkooP6JGAAIwe30JlM.git] / input.h
diff --git a/input.h b/input.h
index a909d7b70e537a94c8830a3b94413e46ef7ceb98..7e1e6aa4f0afc84f6d16197ce1af1d9344b6dcc8 100644 (file)
--- a/input.h
+++ b/input.h
@@ -7,7 +7,6 @@
 #include "vg/vg_console.h"
 #include "vg/vg_input.h"
 #include "vg/vg_m.h"
-#include "conf.h"
 #include "font.h"
 
 enum sr_bind{
@@ -16,6 +15,7 @@ enum sr_bind{
    k_srbind_trick0,
    k_srbind_trick1,
    k_srbind_trick2,
+   k_srbind_sit,
    k_srbind_use,
    k_srbind_reset,
    k_srbind_camera,
@@ -26,6 +26,12 @@ enum sr_bind{
    k_srbind_mback, 
    k_srbind_maccept,
    k_srbind_mopen,
+   k_srbind_replay_play,
+   k_srbind_replay_freecam,
+   k_srbind_replay_resume,
+   k_srbind_world_left,
+   k_srbind_world_right,
+   k_srbind_home,
    k_srbind_max,
 };
 
@@ -40,6 +46,9 @@ enum sr_axis{
    k_sraxis_grab = 0,
    k_sraxis_mbrowse_h,
    k_sraxis_mbrowse_v,
+   k_sraxis_replay_h,
+   k_sraxis_mworld_h,
+
    k_sraxis_max
 };
 
@@ -47,7 +56,7 @@ struct {
    float axis_states[ k_sraxis_max ][2];
    v2f joystick_states[ k_srjoystick_max ][2];
    u8 button_states[ k_srbind_max ][2];
-   u32 ignore_input_frames;
+   u32 enabled;
 }
 static srinput;
 
@@ -68,8 +77,7 @@ static const char *controller_glyphs[ SDL_CONTROLLER_BUTTON_MAX ][2] =
    [ SDL_CONTROLLER_BUTTON_GUIDE ]        = { "\x91",    "\x91" },
 };
 
-static const char *controller_glyph( u32 sdl_index )
-{
+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 )
@@ -106,15 +114,22 @@ static const char *button_display_string( enum sr_bind button )
     [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_world_left]  = controller_glyph( SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
+    [k_srbind_world_right] = controller_glyph( SDL_CONTROLLER_BUTTON_DPAD_RIGHT ),
+    [k_srbind_home] = controller_glyph( SDL_CONTROLLER_BUTTON_Y ),
     [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_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 ),
+   [k_srbind_sit]     = controller_glyph( SDL_CONTROLLER_BUTTON_B )
    };
 
    const char *keyboard_table[ k_srbind_max ] = {
-    [k_srbind_jump]   = KEYBOARD_GLYPH( "A" ),
+    [k_srbind_jump]   = "\xa1",
     [k_srbind_push]   = KEYBOARD_GLYPH( "W" ),
     [k_srbind_trick0] = "\x99",
     [k_srbind_trick1] = "\x9a",
@@ -124,11 +139,18 @@ static const char *button_display_string( enum sr_bind button )
     [k_srbind_camera] = KEYBOARD_GLYPH( "C" ),
     [k_srbind_mleft]  = KEYBOARD_GLYPH( "\x93" ),
     [k_srbind_mright] = KEYBOARD_GLYPH( "\x95" ),
+    [k_srbind_world_left]  = KEYBOARD_GLYPH( "\x93" ),
+    [k_srbind_world_right] = KEYBOARD_GLYPH( "\x95" ),
+    [k_srbind_home] = KEYBOARD_GLYPH( "H" ),
     [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( "G" ),
+[k_srbind_replay_freecam] = KEYBOARD_GLYPH( "F" ),
+[k_srbind_replay_resume]= "\xa1",
+    [k_srbind_sit]    = KEYBOARD_GLYPH( "Z" )
    };
 
    if( vg_input.display_input_method == k_input_method_controller )
@@ -142,13 +164,17 @@ 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_mbrowse_v] = "\x89",
+    [k_sraxis_replay_h]  = "\x8f\x90",
+    [k_sraxis_mworld_h]  = "\x93\x95"
    };
 
    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_mbrowse_v] = KEYBOARD_GLYPH("\x96")KEYBOARD_GLYPH("\x94"),
+    [k_sraxis_replay_h]  = KEYBOARD_GLYPH("Q")KEYBOARD_GLYPH("E"),
+    [k_sraxis_mworld_h] = KEYBOARD_GLYPH("\x93")KEYBOARD_GLYPH("\x95"),
    };
 
    if( vg_input.display_input_method == k_input_method_controller )
@@ -157,29 +183,33 @@ static const char *axis_display_string( enum sr_axis axis )
       return keyboard_table[ axis ];
 }
 
-static const char *joystick_display_string( enum sr_joystick joystick )
+static const char *joystick_display_string( enum sr_joystick joystick, 
+                                            u32 axis )
 {
-   const char *controller_table[ k_srjoystick_max ] = {
-    [k_srjoystick_steer] = "\x88",
-    [k_srjoystick_grab]  = "\x8e",
-    [k_srjoystick_look]  = "\x8e"
+   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 ] = {
-    [k_srjoystick_steer] = KEYBOARD_GLYPH( "\x93" )KEYBOARD_GLYPH( "\x95" ),
-    [k_srjoystick_grab]  = "\xa4",
-    [k_srjoystick_look]  = "\xa4"
+   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 ];
-   else
-      return keyboard_table[ joystick ];
+      return controller_table[ joystick ][axis];
+   else  return keyboard_table[ joystick ][axis];
 }
 
 static int buttons_filter_fixed(void)
 {
-   if( srinput.ignore_input_frames ) return 1;
+   if( !srinput.enabled ) return 1;
    if( vg_ui.wants_mouse ) return 1;
 
    if( vg.engine_stage == k_engine_stage_update_fixed )
@@ -228,8 +258,7 @@ static void joystick_state( enum sr_joystick joystick, v2f state )
       v2_copy( srinput.joystick_states[ joystick ][0], state );
 }
 
-static float axis_state( enum sr_axis axis )
-{
+static float axis_state( enum sr_axis axis ){
    if( vg_ui.wants_mouse ) return 0.0f;
    else return srinput.axis_states[axis][0];
 }
@@ -241,9 +270,6 @@ static void setbtn( enum sr_bind button, u8 value )
 
 static void skaterift_preupdate_inputs(void)
 {
-   if( srinput.ignore_input_frames )
-      srinput.ignore_input_frames --;
-
    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;
@@ -275,6 +301,9 @@ static void skaterift_preupdate_inputs(void)
    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) );
@@ -282,14 +311,23 @@ static void skaterift_preupdate_inputs(void)
    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) );
 
    /* axis
     * --------------------------------------------*/
    srinput.axis_states[ k_sraxis_grab ][0] = vg_getkey( SDLK_LSHIFT );
 
-   if( vg_getkey( SDLK_d ) ) 
+   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 ) ) 
+   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;
@@ -300,10 +338,15 @@ static void skaterift_preupdate_inputs(void)
       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 ) )
+
+   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_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;
+   }
 
    if( vg_input.active_controller_index >= 0 ){
       struct vg_controller *controller = 
@@ -320,20 +363,28 @@ static void skaterift_preupdate_inputs(void)
       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_GUIDE ] );
+      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 ] );
 
       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];
+            *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 ];
@@ -344,6 +395,8 @@ static void skaterift_preupdate_inputs(void)
       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 ],
@@ -351,8 +404,8 @@ static void skaterift_preupdate_inputs(void)
 
       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 );
+      if( lv >  sensitivity ) setbtn( k_srbind_mdown, 1 );
+      if( lv < -sensitivity ) setbtn( k_srbind_mup, 1 );
    }
 
    srinput.axis_states[ k_sraxis_grab ][0] =