Update spawn map to new UI
[carveJwlIkooP6JGAAIwe30JlM.git] / input.h
diff --git a/input.h b/input.h
index cdb93a3ce7162f1fd7900157a53e6a51d317952f..2d4f30ea2c300b4a0b67eea1c9d03ea764de1bc7 100644 (file)
--- a/input.h
+++ b/input.h
@@ -1,23 +1,22 @@
-#ifndef INPUT_H
-#define INPUT_H
-
-#define VG_GAME
-#include "vg/vg.h"
+#pragma once
 #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{
+enum sr_bind
+{
    k_srbind_jump = 0,
    k_srbind_push,
+   k_srbind_skid,
    k_srbind_trick0,
    k_srbind_trick1,
    k_srbind_trick2,
    k_srbind_sit,
    k_srbind_use,
    k_srbind_reset,
+   k_srbind_dead_respawn,
    k_srbind_camera,
    k_srbind_mleft, 
    k_srbind_mright, 
@@ -34,6 +33,11 @@ enum sr_bind{
    k_srbind_home,
    k_srbind_lobby,
    k_srbind_chat,
+   k_srbind_run,
+   
+   k_srbind_miniworld_teleport,
+   k_srbind_miniworld_resume,
+   k_srbind_devbutton,
    k_srbind_max,
 };
 
@@ -49,8 +53,7 @@ enum sr_axis{
    k_sraxis_mbrowse_h,
    k_sraxis_mbrowse_v,
    k_sraxis_replay_h,
-   k_sraxis_mworld_h,
-
+   k_sraxis_skid,
    k_sraxis_max
 };
 
@@ -70,12 +73,14 @@ static vg_input_op *input_button_list[] = {
    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_mouse, SDL_BUTTON_LEFT, vg_mode_mul, 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_reset] = INPUT_BASIC( SDLK_r, SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
+[k_srbind_dead_respawn] =
+   INPUT_BASIC( SDLK_q, SDL_CONTROLLER_BUTTON_DPAD_UP ),
+[k_srbind_camera]= INPUT_BASIC( SDLK_c, SDL_CONTROLLER_BUTTON_DPAD_RIGHT ),
 [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] = 
@@ -88,7 +93,9 @@ static vg_input_op *input_button_list[] = {
 [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_keyboard, SDLK_e, vg_gui_visible, 0,
+      vg_keyboard, SDLK_RETURN, vg_keyboard, SDLK_RETURN2,
+   vg_gui_visible, 1,
    vg_joy_button, SDL_CONTROLLER_BUTTON_A, vg_end
 },
 [k_srbind_replay_play]    = INPUT_BASIC( SDLK_g, SDL_CONTROLLER_BUTTON_X ),
@@ -97,6 +104,19 @@ static vg_input_op *input_button_list[] = {
 [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_run ] = (vg_input_op[]){ vg_keyboard, SDLK_LSHIFT, 
+   vg_joy_axis, SDL_CONTROLLER_AXIS_TRIGGERLEFT, vg_end },
+
+[k_srbind_miniworld_resume]  = (vg_input_op[]){
+   vg_keyboard, SDLK_RETURN, vg_gui_visible, 0,
+   vg_keyboard, SDLK_RETURN2,
+   vg_gui_visible, 1,
+   vg_joy_button, SDL_CONTROLLER_BUTTON_X, vg_end
+},
+[k_srbind_miniworld_teleport]= INPUT_BASIC( SDLK_q, 
+                                       SDL_CONTROLLER_BUTTON_LEFTSHOULDER ),
+[k_srbind_skid] = (vg_input_op[]){ vg_keyboard, SDLK_LCTRL, vg_end },
+[k_srbind_devbutton] = (vg_input_op[]){ vg_keyboard, SDLK_3, vg_end },
 [k_srbind_max]=NULL
 };
 
@@ -106,22 +126,27 @@ static vg_input_op *input_axis_list[] = {
    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_mode_add, vg_keyboard, SDLK_RIGHT,
+   vg_mode_add, 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_mode_add, vg_keyboard, SDLK_UP,
+   vg_mode_sub, 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_add, vg_keyboard, SDLK_e,
    vg_mode_sub, vg_joy_axis, SDL_CONTROLLER_AXIS_TRIGGERLEFT,
+   vg_mode_add, vg_joy_axis, SDL_CONTROLLER_AXIS_TRIGGERRIGHT,
+   vg_end
+},
+[k_sraxis_skid] = (vg_input_op[]){
+   vg_mode_sub, vg_joy_button, SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
+   vg_mode_add, vg_joy_button, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,
    vg_end
 },
 [k_sraxis_max]=NULL
@@ -129,23 +154,18 @@ static vg_input_op *input_axis_list[] = {
 
 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_index, 0, vg_mode_sub, vg_keyboard, SDLK_a,
+                vg_mode_add, vg_keyboard, SDLK_d,
+   vg_index, 1, vg_mode_sub, vg_keyboard, SDLK_w,
+                vg_mode_add, vg_keyboard, SDLK_s,
+                vg_mode_absmax, vg_joy_ls,
    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
+   vg_joy_rs, 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
+   vg_joy_rs, vg_end
 },
 [k_srjoystick_max]=NULL
 };
@@ -158,166 +178,15 @@ struct {
    enum input_state {
       k_input_state_enabled,
       k_input_state_resume,
+      k_input_state_resuming,
       k_input_state_pause
    }
    state;
 }
 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_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_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 ),
-    [k_srbind_lobby]  = controller_glyph( SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
-    [k_srbind_chat]   = ""
-   };
-
-   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_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" ),
-    [k_srbind_lobby] = KEYBOARD_GLYPH( "" ), // FIXME: what is tab?
-    [k_srbind_chat] = KEYBOARD_GLYPH( "Y" )
-   };
-
-   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]  = "\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_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 )
-      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 input_filter_generic(void){
-   if( srinput.state != k_input_state_enabled || 
-       vg_ui.wants_mouse || vg_console.enabled )
+   if( srinput.state != k_input_state_enabled || vg_console.enabled )
       return 1;
    else 
       return 0;
@@ -378,15 +247,13 @@ static float axis_state( enum sr_axis axis ){
       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){
-   if( srinput.state == k_input_state_resume )
+   if( srinput.state == k_input_state_resuming )
       srinput.state = k_input_state_enabled;
 
+   if( srinput.state == k_input_state_resume )
+      srinput.state = k_input_state_resuming;
+
    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;
@@ -402,10 +269,6 @@ static void skaterift_preupdate_inputs(void){
       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;
-
    for( int i=0; i<k_srbind_max; i++ ){
       vg_input_op *prog = input_button_list[i];
       if( prog ){
@@ -429,6 +292,18 @@ static void skaterift_preupdate_inputs(void){
                                 srinput.joystick_states[i][0] );
       }
    }
-}
 
-#endif /* INPUT_H */
+   f32 x = srinput.axis_states[k_sraxis_mbrowse_h][0],
+       y = srinput.axis_states[k_sraxis_mbrowse_v][0],
+       sensitivity = 0.35f;
+
+   if( fabsf(x) > sensitivity ){
+      if( x > 0.0f ) srinput.button_states[k_srbind_mright][0] = 1;
+      else           srinput.button_states[k_srbind_mleft][0] = 1;
+   }
+
+   if( fabsf(y) > sensitivity ){
+      if( y > 0.0f ) srinput.button_states[k_srbind_mup][0] = 1;
+      else           srinput.button_states[k_srbind_mdown][0] = 1;
+   }
+}