X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=player_skate.c;h=93194f7493a8645d52b718f37a2db1dc616cbcad;hb=5086e369c10a9ae5d5d4fa271a99c731727dbcfa;hp=847f7f5bc6399335eb0f0f131bc3a4de67d7d9a1;hpb=34a8df54eb962f3ad2e036355041f5bc5cabe5a0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index 847f7f5..93194f7 100644 --- a/player_skate.c +++ b/player_skate.c @@ -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 );