basic replayable replays
[carveJwlIkooP6JGAAIwe30JlM.git] / skaterift.c
index 74e6f75f605236337d891d07a54c2b6ea82b8bc6..3fec7e0e6a3161ab4dd792aecb223909cc0ede9c 100644 (file)
@@ -144,8 +144,9 @@ static void skaterift_restore_state(void){
          localplayer.viewable_world = world_current_instance();
 
          vg_msg_cmd position = vg_msg_seekkv( &world, "position", 0 );
-         vg_msg_convert_num( &position, k_vg_msg_float|k_vg_msg_32b, 3,
-                             localplayer.rb.co );
+         v3f pos;
+         vg_msg_convert_num( &position, k_vg_msg_float|k_vg_msg_32b, 3, pos );
+         player__setpos( &localplayer, pos );
       }
    }
 }
@@ -174,6 +175,7 @@ VG_STATIC void vg_load(void)
    vg_loader_step( load_playermodels, NULL );
   
    /* player setup */
+   local_replay_init( (1024*1024*1)/2 );
    player__create( &localplayer );
    player_avatar_load( &localplayer_avatar, "models/ch_none.mdl" );
    player__use_avatar( &localplayer, &localplayer_avatar );
@@ -235,13 +237,13 @@ VG_STATIC void vg_load(void)
    global_skateshop.pointcloud_world_id=1;
    skateshop_world_preview_loader_thread( mtzero ); /* HACK */
 
-   vg_async_call( async_addon_reg_update, NULL, 0 );
    vg_console_load_autos();
    menu_link();
 
    addon_mount_content_folder( k_addon_type_player, 
                                "playermodels", ".mdl" );
    addon_mount_content_folder( k_addon_type_board, "boards", ".mdl" );
+   addon_mount_content_folder( k_addon_type_world, "maps", ".mdl" );
    addon_mount_workshop_items();
    vg_async_call( async_addon_reg_update, NULL, 0 );
    vg_async_stall();
@@ -292,8 +294,7 @@ VG_STATIC void vg_update_fixed(void)
    vehicle_update_fixed();
 }
 
-VG_STATIC void vg_update_post(void)
-{
+VG_STATIC void vg_update_post(void){
    if( skaterift.op == k_async_op_clientloading ) return;
 
    player__post_update( &localplayer );
@@ -319,7 +320,11 @@ VG_STATIC void vg_update_post(void)
    v3_copy( localplayer.rb.v, vg_audio.external_lister_velocity );
    audio_unlock();
 
-   vg.time_rate = 1.0f-menu.factive;
+   f32 target = 1.0f-(f32)(menu.active||k_replay_test);
+   skaterift.time_rate = vg_lerpf( skaterift.time_rate, target,
+                                   vg.time_frame_delta * 6.0f );
+
+   vg.time_rate = skaterift.time_rate;
    vehicle_update_post();
 }
 
@@ -349,9 +354,12 @@ VG_STATIC void present_view_with_post_processing(void)
                                      (vg.time_frame_delta*60.0) );
       shader_blitblur_uInverseRatio( inverse );
 
-      v2f menu_blurring;
-      v2_muls( (v2f){ 0.04f, 0.001f }, menu.factive, menu_blurring );
-      shader_blitblur_uOverrideDir( menu_blurring );
+      v2f override;
+      if( menu.active )
+         v2_muls( (v2f){ 0.04f, 0.001f }, 1.0f-skaterift.time_rate, override );
+      else 
+         v2_zero( override );
+      shader_blitblur_uOverrideDir( override );
 
       render_fb_bind_texture( gpipeline.fb_main, 0, 0 );
       render_fb_bind_texture( gpipeline.fb_main, 1, 1 );
@@ -504,11 +512,10 @@ VG_STATIC void vg_gui(void)
       menu_render();
    }
 
-#if 0
    player__im_gui( &localplayer );
-#endif
    world_instance *world = world_current_instance();
 
+   replay_imgui( &localplayer );
    workshop_form_gui();
    render_view_framebuffer_ui();
 }