animation board tweaks
[carveJwlIkooP6JGAAIwe30JlM.git] / player_skate.c
index ef13865546431cb5d2af4047c698bff0b0555bdf..a796b7c67ee721c2ecfdb528f4bddf78691480f3 100644 (file)
@@ -2760,9 +2760,29 @@ VG_STATIC void player__skate_animate( player_instance *player,
       float dir_frame   = s->blend_z * (15.0f/30.0f),
             stand_blend = offset[1]*-2.0f;
 
+      v2f steer;
+      joystick_state( k_srjoystick_steer, steer );
+      f32 lean1,
+          lean2 = steer[0] * s->state.reverse * -0.36f,
+          lean;
+
+      if( fabsf(s->state.slip) > 0.3f ){
+         f32 slide_dir = vg_signf(v3_dot(player->rb.v,player->rb.to_world[0]));
+         s->state.delayed_slip_dir = slide_dir;
+      }
+      lean1 = s->blend_slide * s->state.delayed_slip_dir;
+
+      if( fabsf(lean1)>fabsf(lean2) ) lean = lean1;
+      else                            lean = lean2;
+
+      if( ((int)roundf(s->state.trick_euler[0])) % 2 ) lean = -lean;
+      lean = vg_clampf( lean, -1.0f, 1.0f );
+
+      player->board_pose.lean = vg_lerpf( player->board_pose.lean, lean,
+                                          vg.time_delta * 18.0f );
+
       v3f local_cog;
       m4x3_mulv( player->rb.to_local, s->state.cog, local_cog );
-
       stand_blend = vg_clampf( 1.0f-local_cog[1], 0, 1 );
 
       skeleton_sample_anim( sk, s->anim_stand, dir_frame, apose );
@@ -2977,7 +2997,6 @@ VG_STATIC void player__skate_animate( player_instance *player,
 
       q_mul( qtotal, kf_board->q, kf_board->q );
 
-
       /* trick rotation */
       v4f qtrick, qyaw, qpitch, qroll;
       v3f euler;