vg_slewf( &skaterift.time_rate, target, vg.time_frame_delta * 6.0f );
vg.time_rate = vg_smoothstepf( skaterift.time_rate );
-
- if( button_down( k_srbind_reset ) ){
- if( skaterift.activity == k_skaterift_default ){
- skaterift.activity = k_skaterift_replay;
- }
- }
player__pre_update( &localplayer );
global_skateshop_preupdate();
+ skaterift_replay_pre_update();
world_update( world_current_instance(), localplayer.rb.co );
audio_ambient_sprites_update( world_current_instance(), localplayer.rb.co );
camera_lerp( &localplayer.cam, &global_skateshop.cam,
vg_smoothstepf(global_skateshop.factive), &skaterift.cam );
+ if( skaterift.activity == k_skaterift_replay ){
+ camera temp;
+ replay_get_camera( &skaterift.replay, &temp );
+ camera_lerp( &skaterift.cam, &temp, 1.0f-skaterift.time_rate,
+ &skaterift.cam );
+ }
+
skaterift.cam.nearz = 0.1f;
skaterift.cam.farz = 2100.0f;
}
VG_STATIC void render_main_game(void){
+ player__animate( &localplayer );
+ if( skaterift.activity == k_skaterift_replay ){
+ player__animate_from_replay( &localplayer, &skaterift.replay );
+ }
+ else
+ skaterift_record_frame( &skaterift.replay, 0 );
player__pre_render( &localplayer );
+
skaterift_composite_maincamera();
render_scene();
render_scene_gate_subview();
present_view_with_post_processing();
+
+ /* capture the current resume frame at the very last point */
+ if( button_down( k_srbind_reset ) ){
+ if( skaterift.activity == k_skaterift_default ){
+ skaterift.activity = k_skaterift_replay;
+ skaterift_record_frame( &skaterift.replay, 1 );
+ }
+ }
}
VG_STATIC void vg_render(void){
player__im_gui( &localplayer );
world_instance *world = world_current_instance();
- replay_imgui( &localplayer );
+ skaterift_replay_imgui();
workshop_form_gui();
render_view_framebuffer_ui();
}