reverse skate into glider
authorhgn <hgodden00@gmail.com>
Mon, 29 Jan 2024 11:59:18 +0000 (11:59 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 29 Jan 2024 11:59:18 +0000 (11:59 +0000)
player_glide.c
player_glide.h
player_skate.c
testing.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 );
index 777112bd51694e9e65ce31b7407f57543afae982..83a4d38e2a871a88605c253e1dd45766a0a81d3e 100644 (file)
@@ -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 = {
index d9b9c04626e50907e60884495a70484203f6c19a..d8dd4f2c3d6d842369993798dd58dc82b49b3253 100644 (file)
@@ -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;
       }
 
index 37ef42eea55364b3134eec935d200f4d21255f08..0f5b9bc320b11dfce16bed7aebbf66ad45baa848 100644 (file)
--- 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 );