_player_post_animate[ player->subsystem ]( player );
}
-VG_STATIC void player_animate_from_replay( player_instance *player ){
+VG_STATIC void player_animate_from_replay( player_instance *player,
+ replay_buffer *replay ){
/* TODO: frame blending */
-
player_animation res;
- replay_frame *frame = player->replay.cursor_frame;
+ replay_frame *frame = replay->cursor_frame;
if( frame ){
memcpy( &res, &frame->anim, sizeof(frame->anim) );
memcpy( &frame->board_pose, &player->board_pose,
sizeof(player->board_pose) );
- v3_copy( frame->cam_pos, player->cam_override_pos );
- v3_copy( frame->cam_angles, player->cam_override_angles );
- player->cam_override_fov = frame->cam_fov;
- player->cam_override_strength = 1.0f;
}
else return;
skeleton_apply_pose( sk, res.pose, k_anim_apply_absolute );
}
-VG_STATIC void player_record_replay( player_instance *player, int force ){
- /* replay recorder */
- replay_buffer *replay = &player->replay;
-
+VG_STATIC
+void player_record_replay_frame( player_instance *player,
+ replay_buffer *replay, int force_gamestate ){
f64 delta = 9999999.9,
statedelta = 9999999.9;
k_gamestate_rate = 0.5;
u16 gamestates = 0;
- if( statedelta > k_gamestate_rate || force /* or switching */ ){
+ if( statedelta > k_gamestate_rate || force_gamestate /* or switching */ ){
gamestates = 1;
}
}
VG_STATIC void player__pre_render( player_instance *player ){
- if( player->replay.control == k_replay_control_none ){
- player->cam_override_strength = 0.0f;
- player_animate( player );
-
- if( button_down( k_srbind_reset ) && !player->immobile ){
- audio_lock();
- audio_oneshot( &audio_rewind[4], 1.0f, 0.0f );
- audio_unlock();
-
- player_record_replay( player, 1 );
- player->replay.control = k_replay_control_scrub;
- }
- else
- player_record_replay( player, 0 );
- }
- else {
- player->cam_override_strength = 1.0f-skaterift.time_rate;
- player_replay_control_update( player );
- player_animate_from_replay( player );
- }
-
+ player_animate( player );
player__cam_iterate( player );
/* shadowing/ao info */
render_fb_inverse_ratio( gpipeline.fb_main, inverse );
- inverse[2] = main_camera.farz-main_camera.nearz;
+ inverse[2] = skaterift.cam.farz-skaterift.cam.nearz;
shader_model_board_view_uInverseRatioDepth( inverse );
render_fb_inverse_ratio( NULL, inverse );
render_fb_bind_texture( gpipeline.fb_main, 2, 1 );
v3f inverse;
render_fb_inverse_ratio( gpipeline.fb_main, inverse );
- inverse[2] = main_camera.farz-main_camera.nearz;
+ inverse[2] = skaterift.cam.farz-skaterift.cam.nearz;
shader_model_character_view_uInverseRatioDepth( inverse );
render_fb_inverse_ratio( NULL, inverse );