VG_STATIC void global_skateshop_exit(void)
{
+ vg_info( "exit skateshop\n" );
localplayer.immobile = 0;
global_skateshop.active = 0;
}
if( global_skateshop.interface_loc <= k_skateshop_loc_page__viewing ){
- gui_helper_action( NULL, "\x88 \x02\xaf\x03""browse" );
- gui_helper_action( NULL, "\x1e\x85 \x02\xaf\x03""pick" );
- gui_helper_action( NULL, "\x1e\x86 \x02\xaf\x03""exit" );
+ gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
+ gui_helper_action( button_display_string( k_srbind_maccept ), "pick" );
+ gui_helper_action( button_display_string( k_srbind_mback ), "exit" );
int moved = 0;
k_SRglyph_kbm_ctrl = 0x9f,
k_SRglyph_kbm_alt = 0xa0,
k_SRglyph_kbm_space = 0xa1,
- k_SRglyph_kbm_return = 0xa2
+ k_SRglyph_kbm_return = 0xa2,
+ k_SRglyph_kbm_escape = 0xa3,
+ k_SRglyph_kbm_mousemove = 0xa4
};
typedef struct font3d font3d;
return mdl_arritm( &font->glyphs, index );
}
+struct font3d_render{
+ v4f offset;
+ font3d *font;
+ const u8 *u8pch;
+ u32 variant_id;
+};
+
VG_STATIC
-float font3d_simple_draw( font3d *font, u32 variant_id, const char *text,
- camera *cam, m4x3f transform )
+void font3d_begin( font3d *font, u32 variant_id,
+ camera *cam, m4x3f transform, struct font3d_render *render )
{
- v4f offset;
- q_identity( offset );
+ q_identity( render->offset );
m4x4f prev_mtx;
-
m4x3_expand( transform, prev_mtx );
m4x4_mul( cam->mtx_prev.pv, prev_mtx, prev_mtx );
shader_model_font_uPvmPrev( prev_mtx );
shader_model_font_uMdl( transform );
- const u8 *u8str = (u8*)text;
+ render->font = font;
+ render->variant_id = variant_id;
+}
+
+VG_STATIC void font3d_draw( struct font3d_render *render )
+{
+ u32 max_chars = 512;
+ while( render->u8pch && max_chars ){
+ max_chars --;
- for( u32 i=0;; i++ ){
- u32 c0 = u8str[i],
- c1;
+ u32 c0 = *render->u8pch, c1;
+ render->u8pch ++;
if( !c0 ) break;
- ent_glyph *glyph0 = font3d_glyph( font, variant_id, c0 ),
+ ent_glyph *glyph0 = font3d_glyph( render->font, render->variant_id, c0 ),
*glyph1;
/* multibyte characters */
if( c0 >= 1 && c0 < k_SRglyph_ascii_min ){
- c1 = u8str[i+1];
+ c1 = *render->u8pch;
if( !c1 ) break;
- glyph1 = font3d_glyph( font, variant_id, c1 );
+ glyph1 = font3d_glyph( render->font, render->variant_id, c1 );
}
if( c0 == k_SRglyph_ctrl_variant ){
- variant_id = c1;
- i ++;
+ render->variant_id = c1;
+ render->u8pch ++;
continue;
}
else if( c0 == k_SRglyph_ctrl_size ){
- offset[3] = (float)c1 * (1.0f/255.0f);
- i ++;
+ render->offset[3] = (float)c1 * (1.0f/255.0f);
+ render->u8pch ++;
continue;
}
else if( c0 == k_SRglyph_ctrl_baseline ){
- offset[1] = 0.0f;
+ render->offset[1] = 0.0f;
continue;
}
else if( c0 == k_SRglyph_ctrl_center ){
- if( glyph1 )
- offset[1] = (glyph1->size[1] - glyph1->size[1]*offset[3]) * 0.5f;
+ if( glyph1 ){
+ float diff = glyph1->size[1] - glyph1->size[1]*render->offset[3];
+ render->offset[1] = diff * 0.5f;
+ }
continue;
}
else if( c0 == k_SRglyph_ctrl_top ){
- if( glyph1 )
- offset[1] = glyph1->size[1] - glyph1->size[1]*offset[3];
+ if( glyph1 ){
+ float diff = glyph1->size[1] - glyph1->size[1]*render->offset[3];
+ render->offset[1] = diff;
+ }
continue;
}
if( glyph1 && (c0 == k_SRglyph_mod_square || c0 == k_SRglyph_mod_circle)){
v4f v0;
v2_sub( glyph0->size, glyph1->size, v0 );
- v2_muladds( offset, v0, -0.5f, v0 );
- v0[2] = offset[2];
- v0[3] = offset[3];
+ v2_muladds( render->offset, v0, -0.5f, v0 );
+ v0[2] = render->offset[2];
+ v0[3] = render->offset[3];
shader_model_font_uOffset( v0 );
mesh_drawn( glyph0->indice_start, glyph0->indice_count );
continue;
}
else{
- shader_model_font_uOffset( offset );
+ shader_model_font_uOffset( render->offset );
mesh_drawn( glyph0->indice_start, glyph0->indice_count );
}
- offset[0] += glyph0->size[0]*offset[3];
+ render->offset[0] += glyph0->size[0]*render->offset[3];
}
- return offset[0];
+ render->u8pch = NULL;
+}
+
+VG_STATIC
+float font3d_simple_draw( font3d *font, u32 variant_id, const char *text,
+ camera *cam, m4x3f transform )
+{
+ struct font3d_render render;
+ font3d_begin( font, variant_id, cam, transform, &render );
+ render.u8pch = (u8*)text;
+ font3d_draw( &render );
+ return render.offset[0];
}
VG_STATIC
struct{
struct gui_helper{
- struct input_binding *bind;
- const char *text;
+ const char *bindstr, *text;
}
helpers[4];
u32 helper_count;
shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} );
- float w = font3d_simple_draw( font, 2, helper->text, &ortho, mmdl )+1.0f;
+ struct font3d_render render;
+ font3d_begin( font, 2, &ortho, mmdl, &render );
+
+ render.u8pch = (u8*)helper->bindstr;
+ font3d_draw( &render );
+
+ const char *make_smaller = "\x02\xaf\x03 ";
+ render.u8pch = (const u8*)make_smaller;
+ font3d_draw( &render );
+
+ render.u8pch = (u8*)helper->text;
+ font3d_draw( &render );
+
+ float w = render.offset[0]+1.0f;
mmdl[3][0] += w*scale;
}
}
VG_STATIC
-void gui_helper_action( void *bind, const char *text )
+void gui_helper_action( const char *bindstr, const char *text )
{
if( gui.helper_count >= vg_list_size(gui.helpers) )
vg_fatal_error( "Too many helpers\n" );
struct gui_helper *helper = &gui.helpers[ gui.helper_count ++ ];
- helper->bind = bind;
+ helper->bindstr = bindstr;
helper->text = text;
}
#include "vg/vg_input.h"
#include "vg/vg_m.h"
#include "conf.h"
+#include "font.h"
enum sr_bind{
k_srbind_jump = 0,
k_srbind_mdown,
k_srbind_mback,
k_srbind_maccept,
- k_srbind_max
+ k_srbind_mopen,
+ k_srbind_max,
};
-struct {
- v2f joy_steer,
- joy_grab,
- joy_look;
+enum sr_joystick{
+ k_srjoystick_steer = 0,
+ k_srjoystick_grab,
+ k_srjoystick_look,
+ k_srjoystick_max
+};
- float axis_grab;
+enum sr_axis{
+ k_sraxis_grab = 0,
+ k_sraxis_mbrowse_h,
+ k_sraxis_mbrowse_v,
+ 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];
- float repeaters[4];
}
static srinput;
-static int button_down( enum sr_bind button )
+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 )
+ };
+
+ const char *keyboard_table[ k_srbind_max ] = {
+ [k_srbind_jump] = KEYBOARD_GLYPH( "A" ),
+ [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" ,
+ };
+
+ 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"
+ };
+
+ 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")
+ };
+
+ 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 )
+{
+ const char *controller_table[ k_srjoystick_max ] = {
+ [k_srjoystick_steer] = "\x88",
+ [k_srjoystick_grab] = "\x8e",
+ [k_srjoystick_look] = "\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"
+ };
+
+ if( vg_input.display_input_method == k_input_method_controller )
+ return controller_table[ joystick ];
+ else
+ return keyboard_table[ joystick ];
+}
+
+static int buttons_filter_fixed(void)
{
if( vg_console.enabled )
- return 0;
+ return 1;
if( vg.engine_stage == k_engine_stage_update_fixed )
if( vg.fixed_iterations > 0 )
- return 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 0;
}
+/* Falling edge of button */
static int button_up( enum sr_bind button )
{
- if( vg_console.enabled )
+ if( buttons_filter_fixed() )
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 0;
}
+/* State of button */
static int button_press( enum sr_bind button )
{
if( vg_console.enabled )
return srinput.button_states[ button ][0];
}
+static void joystick_state( enum sr_joystick joystick, v2f state )
+{
+ if( vg_console.enabled )
+ v2_zero( state );
+ else
+ v2_copy( srinput.joystick_states[ joystick ][0], state );
+}
+
+static float axis_state( enum sr_axis axis )
+{
+ if( vg_console.enabled ) 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;
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;
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));
/* axis
* --------------------------------------------*/
- srinput.axis_grab = vg_getkey( SDLK_LSHIFT );
+ srinput.axis_states[ k_sraxis_grab ][0] = 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.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_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_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 != -1 ){
struct vg_controller *controller =
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_GUIDE ] );
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];
- 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 ] );
+ 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 ];
float lh = axis[ SDL_CONTROLLER_AXIS_LEFTX ],
lv = axis[ SDL_CONTROLLER_AXIS_LEFTY ],
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 );
+ srinput.axis_states[ k_sraxis_grab ][0] =
+ vg_minf( 1.0f, srinput.axis_states[ k_sraxis_grab ][0] );
}
#endif /* INPUT_H */
mouse_input[1] *= -1.0f;
v2_muladds( angles, mouse_input, 0.0025f, angles );
- angles[0] += srinput.joy_look[0] * vg.time_delta * 4.0f;
- float input_y = srinput.joy_look[1] * vg.time_delta * 4.0f;
+ v2f jlook;
+ joystick_state( k_srjoystick_look, jlook );
+
+ angles[0] += jlook[0] * vg.time_delta * 4.0f;
+ float input_y = jlook[1] * vg.time_delta * 4.0f;
if( cl_invert_y )
input_y *= -1.0f;
struct player_drive *drive = &player->_drive;
drivable_vehicle *vehc = drive->vehicle;
- vehc->steer = vg_lerpf( vehc->steer, srinput.joy_steer[0] * 0.4f,
- k_rb_delta * 8.0f );
- vehc->drive = srinput.joy_steer[1];
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
+
+ vehc->steer = vg_lerpf( vehc->steer, steer[0] * 0.4f, k_rb_delta * 8.0f );
+ vehc->drive = steer[1];
}
VG_STATIC void player__drive_update( player_instance *player )
}
v2f steer;
- v2_copy( srinput.joy_steer, steer );
+ joystick_state( k_srjoystick_steer, steer );
v2_normalize_clamp( steer );
if( (fabsf(steer[1]) > 0.5f) && (s->land_dist >= 1.5f) ){
{
struct player_skate *s = &player->_skate;
- float grabt = srinput.axis_grab;
+ float grabt = axis_state( k_sraxis_grab );
if( grabt > 0.5f ){
v2_muladds( s->state.grab_mouse_delta, vg.mouse_delta, 0.02f,
{
struct player_skate *s = &player->_skate;
+ v2f jsteer;
+ joystick_state( k_srjoystick_steer, jsteer );
+
/* Steering */
- float steer = srinput.joy_steer[0],
- grab = srinput.axis_grab;
+ float steer = jsteer[0],
+ grab = axis_state( k_sraxis_grab );
steer = vg_signf( steer ) * steer*steer * k_steer_ground;
s->grind_cooldown = 30;
s->state.activity = k_skate_activity_ground;
- float tilt = srinput.joy_steer[0] * 0.4f;
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
+
+ float tilt = steer[0] * 0.3f;
tilt *= vg_signf(v3_dot( player->rb.v, s->grind_dir ));
v4f qtilt;
/* Throw / collect routine
*/
- if( srinput.axis_grab > 0.5f ){
+ if( axis_state( k_sraxis_grab ) > 0.5f ){
if( s->state.activity == k_skate_activity_ground ){
/* Throw */
v3_muls( player->rb.to_world[1], k_mmthrow_scale, s->state.throw_v );
v3_copy( s->state.up_dir, ideal_dir );
v3_normalize( ideal_dir );
- v3_muladds( player->rb.co, ideal_dir,
- 1.0f-srinput.axis_grab, ideal_cog );
+ float grab = axis_state( k_sraxis_grab );
+ v3_muladds( player->rb.co, ideal_dir, 1.0f-grab, ideal_cog );
v3_sub( ideal_cog, s->state.cog, ideal_diff );
/* Apply velocities */
int reverse_dir = v3_dot( player->rb.to_world[2], player->rb.v ) < 0.0f?1:-1;
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
+
if( s->state.manual_direction == 0 ){
- if( (srinput.joy_steer[1] > 0.7f) &&
- (s->state.activity == k_skate_activity_ground) &&
+ if( (steer[1] > 0.7f) && (s->state.activity == k_skate_activity_ground) &&
(s->state.jump_charge <= 0.01f) )
s->state.manual_direction = reverse_dir;
}
else{
- if( srinput.joy_steer[1] < 0.1f ){
+ if( steer[1] < 0.1f ){
s->state.manual_direction = 0;
}
else{
}
if( s->state.manual_direction ){
- float amt = vg_minf( srinput.joy_steer[1] * 8.0f, 1.0f );
+ float amt = vg_minf( steer[1] * 8.0f, 1.0f );
s->weight_distribution[2] = k_board_length * amt *
(float)s->state.manual_direction;
}
v3_normalize( target_fwd );
v3_normalize( fwd );
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
- float way = srinput.joy_steer[1] *
- vg_signf( v3_dot( raw_nplane, player->rb.v ) );
+ float way = steer[1] * vg_signf( v3_dot( raw_nplane, player->rb.v ) );
v4f q;
q_axis_angle( q, axis, VG_PIf*0.125f * way );
v3_cross( axis, inf_avg.dir, inf_avg.n );
skate_grind_decay( player, &inf_avg, 1.0f );
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
- float way = srinput.joy_steer[1] *
+ float way = steer[1] *
vg_signf( v3_dot( player->rb.to_world[2], player->rb.v ) );
v4f q;
v3f up, target_up;
int allow_back = 1,
allow_front = 1;
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
+
if( s->state.activity == k_skate_activity_grind_5050 ||
s->state.activity == k_skate_activity_grind_back50 ||
s->state.activity == k_skate_activity_grind_front50 )
{
- float tilt = srinput.joy_steer[1];
+ float tilt = steer[1];
if( fabsf(tilt) >= 0.25f ){
v3f raw = {0.0f,0.0f,tilt};
res_front50 = skate_grind_truck_entry( player, -1.0f, &inf_front50 );
if( res_back50 != res_front50 ){
- int wants_to_do_that = fabsf(srinput.joy_steer[1]) >= 0.25f;
+ int wants_to_do_that = fabsf(steer[1]) >= 0.25f;
res_back50 &= wants_to_do_that;
res_front50 &= wants_to_do_that;
mdl_keyframe air_pose[32];
{
- float target = -srinput.joy_steer[1];
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
+
+ float target = -steer[1];
s->blend_airdir = vg_lerpf( s->blend_airdir, target, 2.4f*vg.time_delta );
static v2f grab_choice;
v2f grab_input;
- v2_copy( srinput.joy_grab, grab_input );
+ joystick_state( k_srjoystick_grab, grab_input );
v2_add( s->state.grab_mouse_delta, grab_input, grab_input );
if( v2_length2( grab_input ) <= 0.001f )
m3x3_mulv( player->basis, forward_dir, forward_dir );
m3x3_mulv( player->basis, right_dir, right_dir );
- w->move_speed = v2_length( srinput.joy_steer );
+ v2f steer;
+ joystick_state( k_srjoystick_steer, steer );
+
+ w->move_speed = v2_length( steer );
world_instance *world = get_active_world();
/*
*/
float accel_speed = 0.0f, nominal_speed = 0.0f;
v3f movedir;
- v3_muls( right_dir, srinput.joy_steer[0], movedir );
- v3_muladds( movedir, forward_dir, srinput.joy_steer[1], movedir );
+
+ v3_muls( right_dir, steer[0], movedir );
+ v3_muladds( movedir, forward_dir, steer[1], movedir );
if( w->state.activity == k_walk_activity_ground ){
v3_normalize( surface_avg );
v3f tx, ty;
rb_tangent_basis( surface_avg, tx, ty );
- if( v2_length2(srinput.joy_steer) > 0.001f ){
+ if( v2_length2(steer) > 0.001f ){
/* clip movement to the surface */
float d = v3_dot(surface_avg,movedir);
v3_muladds( movedir, surface_avg, -d, movedir );
nominal_speed = k_airspeed;
}
- if( v2_length2( srinput.joy_steer ) > 0.001f ){
+ if( v2_length2( steer ) > 0.001f ){
player_accelerate( player->rb.v, movedir, nominal_speed, accel_speed );
v3_normalize( movedir );
}