fsetup,
walk_timer,
fonboard;
+
+ v3f last_step_pos;
+ int step_phase;
}
player =
{
}
}
}
+
+ 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] );
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 );
}
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();
}
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 );
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 );
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
{