From: hgn Date: Mon, 29 Jan 2024 11:59:18 +0000 (+0000) Subject: reverse skate into glider X-Git-Url: https://harrygodden.com/git/?p=carveJwlIkooP6JGAAIwe30JlM.git;a=commitdiff_plain;h=8e54abfae338fc4c5ad2c95310e137f77f8a0e66 reverse skate into glider --- diff --git a/player_glide.c b/player_glide.c index 1b21191..2bcb88c 100644 --- a/player_glide.c +++ b/player_glide.c @@ -364,12 +364,21 @@ static void player_glide_bind(void){ mdl_close( mdl ); } -static void player_glide_transition(void){ +static void player_glide_transition( bool reverse ){ localplayer.subsystem = k_player_subsystem_glide; localplayer.have_glider = 0; v3_copy( localplayer.rb.co, player_glide.rb.co ); - v4_copy( localplayer.rb.q, player_glide.rb.q ); + + if( reverse ){ + v4f qyaw; + q_axis_angle( qyaw, (v3f){0,1,0}, VG_TAUf*0.5f ); + q_mul( qyaw, localplayer.rb.q, player_glide.rb.q ); + q_normalize( player_glide.rb.q ); + } + else + v4_copy( localplayer.rb.q, player_glide.rb.q ); + v3_copy( localplayer.rb.v, player_glide.rb.v ); v3_copy( localplayer.rb.w, player_glide.rb.w ); rb_update_matrices( &player_glide.rb ); diff --git a/player_glide.h b/player_glide.h index 777112b..83a4d38 100644 --- a/player_glide.h +++ b/player_glide.h @@ -71,7 +71,7 @@ static void player_glide_pose( void *animator, player_pose *pose ); static void player_glide_post_animate(void); static void player_glide_im_gui(void); static void player_glide_bind(void); -static void player_glide_transition(void); +static void player_glide_transition( bool reverse ); static bool glider_physics(void); struct player_subsystem_interface static player_subsystem_glide = { diff --git a/player_skate.c b/player_skate.c index d9b9c04..d8dd4f2 100644 --- a/player_skate.c +++ b/player_skate.c @@ -1225,7 +1225,7 @@ static void player__skate_pre_update(void){ if( (state->activity <= k_skate_activity_air_to_grind) && localplayer.have_glider ){ - player_glide_transition(); + player_glide_transition( state->reverse < 0.0f ); return; } diff --git a/testing.c b/testing.c index 37ef42e..0f5b9bc 100644 --- a/testing.c +++ b/testing.c @@ -24,7 +24,7 @@ static void testing_update(void){ if( vg_getkey( SDLK_8 ) ){ localplayer.have_glider = 1; - localplayer.have_glider = 0; + localplayer.glider_orphan = 0; } vg_line_boxf_transformed( baller.rb.to_world, baller.box, VG__RED );