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 );