reverse skate into glider
[carveJwlIkooP6JGAAIwe30JlM.git] / player_glide.c
index 1b21191f85999785deed8d3d28ec6d88dde2d0f9..2bcb88c2d3d2a1dc033a2708ab7cf19162e30deb 100644 (file)
@@ -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 );