fixles
[carveJwlIkooP6JGAAIwe30JlM.git] / player_skate.c
index 847f7f5bc6399335eb0f0f131bc3a4de67d7d9a1..93194f7493a8645d52b718f37a2db1dc616cbcad 100644 (file)
@@ -851,7 +851,7 @@ VG_STATIC void skate_apply_jump_model( player_instance *player )
       v2f steer = { player->input_js1h->axis.value,
                     player->input_js1v->axis.value };
       v2_normalize_clamp( steer );
-
+      skate_apply_air_model( player );
 
 #if 0
       float maxspin = k_steer_air * k_rb_delta * k_spin_boost;
@@ -876,6 +876,12 @@ VG_STATIC void skate_apply_pump_model( player_instance *player )
 {
    struct player_skate *s = &player->_skate;
 
+   if( s->state.activity != k_skate_activity_ground )
+   {
+      v3_zero( s->state.throw_v );
+      return;
+   }
+
    /* Throw / collect routine 
     *
     * TODO: Max speed boost
@@ -1904,7 +1910,6 @@ VG_STATIC void player__skate_update( player_instance *player )
 
       skate_apply_friction_model( player );
       skate_weight_distribute( player );
-      skate_apply_pump_model( player );
    }
    else
    {
@@ -1932,6 +1937,7 @@ grinding:;
    skate_apply_jump_model( player );
    skate_apply_grab_model( player );
    skate_apply_trick_model( player );
+   skate_apply_pump_model( player );
 
 begin_collision:;
 
@@ -2577,24 +2583,18 @@ VG_STATIC void player__skate_animate( player_instance *player,
    v3_muladds( dest->root_co, player->rb.to_world[1], -0.1f, dest->root_co );
 
    float substep = vg_clampf( vg.accumulator / VG_TIMESTEP_FIXED, 0.0f, 1.0f );
-#if 0
-   v4f qresy, qresx, qresidual;
-   m3x3f mtx_residual;
-   q_axis_angle( qresy, player->rb.to_world[1], s->state.steery_s*substep );
-   q_axis_angle( qresx, player->rb.to_world[0], s->state.steerx_s*substep );
-
-   q_mul( qresy, qresx, qresidual );
-   q_normalize( qresidual );
-   q_mul( dest->root_q, qresidual, dest->root_q );
-   q_normalize( dest->root_q );
-#endif
 
    v4f qflip;
    if( (s->state.activity == k_skate_activity_air) &&
        (fabsf(s->state.flip_rate) > 0.01f) )
    {
-      float t = s->state.flip_time + s->state.flip_rate*substep*k_rb_delta,
-            angle = vg_clampf( t, -1.0f, 1.0f ) * VG_TAUf,
+      float t     = s->state.flip_time;
+            sign  = vg_signf( t );
+
+      t  = 1.0f - vg_minf( 1.0f, fabsf( t * 1.1f ) );
+      t  = sign * (1.0f-t*t);
+
+      float angle = vg_clampf( t, -1.0f, 1.0f ) * VG_TAUf,
             distm = s->land_dist * fabsf(s->state.flip_rate) * 3.0f,
             blend = vg_clampf( 1.0f-distm, 0.0f, 1.0f );