X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=97c799ee61ca7d151999b14ca0aa5a9c38b4621d;hb=ba5f879f85b9cab1e2b37241399d79709fe4f584;hp=7f02ec0eee4e0f09e5b18bded7da3938bd266b61;hpb=a9f402f2e336dadff2207dacf69416a66f50c8f8;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 7f02ec0..97c799e 100644 --- a/player.h +++ b/player.h @@ -92,6 +92,9 @@ static struct gplayer fsetup, walk_timer, fonboard; + + v3f last_step_pos; + int step_phase; } player = { @@ -519,6 +522,8 @@ static void player_walk_physics(void) } } } + + player.in_air = len==0?1:0; v3_zero( player.rb.w ); q_axis_angle( player.rb.q, (v3f){0.0f,1.0f,0.0f}, -player.angles[0] ); @@ -544,8 +549,8 @@ static void player_walk_physics(void) v3_muladds( player.rb.v, forward_dir, diff, player.rb.v ); /* TODO move */ - float walk_norm = (float)player.mdl.anim_walk->length / 30.0f, - run_norm = (float)player.mdl.anim_run->length / 30.0f; + float walk_norm = 30.0f/(float)player.mdl.anim_walk->length, + run_norm = 30.0f/(float)player.mdl.anim_run->length ; player.walk_timer += ktimestep * vg_lerpf( walk_norm,run_norm,move_norm ); } @@ -723,7 +728,7 @@ static void player_physics(void) audio_lock(); audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D ); audio_player_set_position( &audio_player_extra, player.rb.co ); - audio_player_set_vol( &audio_player_extra, 3.0f ); + audio_player_set_vol( &audio_player_extra, 20.0f ); audio_player_playclip( &audio_player_extra, &audio_jumps[rand()%4] ); audio_unlock(); } @@ -829,13 +834,13 @@ static void player_animate_offboard(void) mdl_keyframe apose[32], bpose[32]; struct skeleton *sk = &player.mdl.sk; - float walk_norm = 30.0f/(float)player.mdl.anim_walk->length, - run_norm = 30.0f/(float)player.mdl.anim_run->length, + float walk_norm = (float)player.mdl.anim_walk->length/30.0f, + run_norm = (float)player.mdl.anim_run->length/30.0f, t = player.walk_timer, l = vg_get_axis("grabr") * 0.5f + 0.5f; skeleton_sample_anim( sk, player.mdl.anim_walk, t*walk_norm, apose ); - skeleton_sample_anim( sk, player.mdl.anim_run, t*run_norm, bpose ); + skeleton_sample_anim( sk, player.mdl.anim_run, t*run_norm, bpose ); skeleton_lerp_pose( sk, apose, bpose, l, apose ); @@ -1170,7 +1175,8 @@ static void player_audio(void) audio_lock(); double revert_delta = vg_time - last_revert; - if( (!_air && l2) && (fabsf(player.slip) > 0.5f) && (revert_delta > 0.7) ) + if( player.on_board && (!_air && l2) && (fabsf(player.slip) > 0.5f) && + (revert_delta > 0.7) ) { audio_player_set_position( &audio_player_extra, player.rb.co ); audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D ); @@ -1214,6 +1220,25 @@ static void player_audio(void) audio_player_set_vol( &audio_player0, 0.0f ); audio_player_set_vol( &audio_player1, 0.0f ); audio_player_set_vol( &audio_player2, 0.0f ); + + int walk_phase = 0; + if( vg_fractf(player.walk_timer) > 0.5f ) + walk_phase = 1; + else + walk_phase = 0; + + if( (player.step_phase != walk_phase) && !player.in_air ) + { + v3_copy( player.rb.co, player.last_step_pos ); + + audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D ); + audio_player_set_position( &audio_player_extra, player.rb.co ); + audio_player_set_vol( &audio_player_extra, 6.0f ); + audio_player_playclip( &audio_player_extra, + &audio_footsteps[rand()%4] ); + } + + player.step_phase = walk_phase; } else {