X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=ac1423962e8f52113ceaed2bc788219e6fbe2371;hb=7eba38b8178c82040618a518634d8ff4813e2ff2;hp=fe34de2441ce6b3d40a5bbe5542b448fc5d2f4fa;hpb=09fc72b08113fa157a3abb2ded6086babedd10cf;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index fe34de2..ac14239 100644 --- a/player_skate.c +++ b/player_skate.c @@ -1110,12 +1110,12 @@ VG_STATIC void player__skate_pre_update( player_instance *player ){ player->subsystem = k_player_subsystem_walk; v3f angles; - v3_copy( player->cam.angles, angles ); - angles[2] = 0.0f; + v3_copy( player->cam.angles, player->angles ); + player->angles[2] = 0.0f; player__begin_holdout( player ); player__skate_kill_audio( player ); - player__walk_transition( player, angles ); + player__walk_transition( player ); return; } @@ -2773,6 +2773,19 @@ VG_STATIC void player__skate_animate( player_instance *player ){ animator->board_euler[1] += extra; animator->trick_type = s->state.trick_type; + /* board lean */ + f32 lean1, lean2 = animator->steer[0] * animator->reverse * -0.36f, + lean; + + lean1 = animator->slide * animator->delayed_slip_dir; + if( fabsf(lean1)>fabsf(lean2) ) lean = lean1; + else lean = lean2; + + if( ((int)roundf(animator->board_euler[0]/VG_PIf)) % 2 ) lean = -lean; + lean = vg_clampf( lean, -1.0f, 1.0f ); + animator->board_lean = + vg_lerpf(animator->board_lean, lean, vg.time_delta*18.0f); + /* feet placement */ struct player_board *board = addon_cache_item_if_loaded( k_addon_type_board, @@ -2811,6 +2824,10 @@ VG_STATIC void player__skate_animate( player_instance *player ){ /* steer */ joystick_state( k_srjoystick_steer, animator->steer ); + animator->airdir = vg_lerpf( animator->airdir, -animator->steer[0], + 2.4f*vg.time_delta ); + + /* flip angle */ if( (s->state.activity <= k_skate_activity_air_to_grind) && (fabsf(s->state.flip_rate) > 0.01f) ){ @@ -2879,20 +2896,18 @@ VG_STATIC void player__skate_animate( player_instance *player ){ vg_line_arrow( player->rb.co, p1, 0.25f, VG__PINK ); vg_line_arrow( player->rb.co, p2, 0.25f, VG__PINK ); - } else q_identity( animator->qfixuptotal ); q_identity( animator->qfixuptotal ); rb_extrapolate( &player->rb, animator->root_co, animator->root_q ); } -VG_STATIC void player__skate_pose( player_instance *player ){ +VG_STATIC void player__skate_pose( player_instance *player, player_pose *pose ){ struct player_avatar *av = player->playeravatar; struct skeleton *sk = &av->sk; struct player_skate *s = &player->_skate; struct player_skate_animator *animator = &s->animator; - player_pose *pose = &player->pose; - pose->type = k_player_pose_type_fk; + pose->type = k_player_pose_type_ik; v3_copy( animator->root_co, pose->root_co ); v4_copy( animator->root_q, pose->root_q ); @@ -2923,17 +2938,7 @@ VG_STATIC void player__skate_pose( player_instance *player ){ f32 dir_frame = animator->z * (15.0f/30.0f), stand_blend = animator->offset[1]*-2.0f; - f32 lean1, - lean2 = animator->steer[0] * animator->reverse * -0.36f, - lean; - - lean1 = animator->slide * animator->delayed_slip_dir; - if( fabsf(lean1)>fabsf(lean2) ) lean = lean1; - else lean = lean2; - - if( ((int)roundf(animator->board_euler[0])) % 2 ) lean = -lean; - lean = vg_clampf( lean, -1.0f, 1.0f ); - pose->board.lean = vg_lerpf(pose->board.lean, lean, vg.time_delta*18.0f); + pose->board.lean = animator->board_lean; stand_blend = vg_clampf( 1.0f-animator->local_cog[1], 0, 1 ); @@ -2964,10 +2969,6 @@ VG_STATIC void player__skate_pose( player_instance *player ){ mdl_keyframe air_pose[32]; { - float target = -animator->steer[1]; - animator->airdir = vg_lerpf( animator->airdir, target, - 2.4f*vg.time_delta ); - float air_frame = (animator->airdir*0.5f+0.5f) * (15.0f/30.0f); skeleton_sample_anim( sk, s->anim_air, air_frame, apose );