q_mul( correction, player->rb.q, player->rb.q );
}
-VG_STATIC int player_skate_trick_input( player_instance *player );
+VG_STATIC enum trick_type player_skate_trick_input( player_instance *player );
VG_STATIC void skate_apply_trick_model( player_instance *player )
{
struct player_skate *s = &player->_skate;
skeleton_copy_pose( sk, s->holdout, player->holdout_pose );
}
-VG_STATIC int player_skate_trick_input( player_instance *player )
+VG_STATIC enum trick_type player_skate_trick_input( player_instance *player )
{
return (button_press( k_srbind_trick0 ) ) |
(button_press( k_srbind_trick1 ) << 1) |
return;
}
- int trick_id;
+ enum trick_type trick = k_trick_type_none;
if( (s->state.activity <= k_skate_activity_air_to_grind) &&
- (trick_id = player_skate_trick_input( player )) )
+ (trick = player_skate_trick_input( player )) )
{
if( (vg.time - s->state.jump_time) < 0.1f ){
v3_zero( s->state.trick_vel );
s->state.trick_time = 0.0f;
- if( trick_id == 1 ){
+ if( trick == k_trick_type_kickflip ){
s->state.trick_vel[0] = 3.0f;
}
- else if( trick_id == 2 ){
+ else if( trick == k_trick_type_shuvit ){
s->state.trick_vel[2] = 3.0f;
}
- else if( trick_id == 3 ){
+ else if( trick == k_trick_type_treflip ){
s->state.trick_vel[0] = 2.0f;
s->state.trick_vel[2] = 2.0f;
}
+ s->state.trick_type = trick;
}
}
}
kf_board->co[1] += s->state.slap * s->subslap;
kf_hip->co[1] += s->state.slap * 0.25f;
+
+ f32 l = ((s->state.activity < k_skate_activity_ground) &&
+ v3_length2(s->state.trick_vel) > 0.1f )? 1: 0;
+ s->blend_trick_foot = vg_lerpf( s->blend_trick_foot, l,
+ 8.4f*vg.time_delta );
+
+ if( s->state.trick_type == k_trick_type_kickflip ){
+ kf_foot_l->co[0] += s->blend_trick_foot * 0.2f;
+ }
+ else if( s->state.trick_type == k_trick_type_shuvit ){
+ kf_foot_l->co[0] += s->blend_trick_foot * 0.1f;
+ kf_foot_r->co[0] -= s->blend_trick_foot * 0.15f;
+ }
+ else if( s->state.trick_type == k_trick_type_treflip ){
+ kf_foot_l->co[0] += s->blend_trick_foot * 0.2f;
+ kf_foot_r->co[0] -= s->blend_trick_foot * 0.15f;
+ }
+
+
/*
* animation wishlist:
* boardslide/grind jump animations
*/
/* truck rotation */
- for( int i=0; i<2; i++ )
- {
+ for( int i=0; i<2; i++ ){
float a = vg_minf( s->truckv0[i][0], 1.0f );
a = -acosf( a ) * vg_signf( s->truckv0[i][1] );