X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_replay.c;h=12f7f6b830a046559591cda15af319950b766582;hb=fbd4abfae41847dcdf4e32ac2c43d79ecaf0f708;hp=04650b73b81ed05d2de6de8ea482cad313553abe;hpb=9a63a9dde9257c8f140af3a96816bcda232fe739;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_replay.c b/player_replay.c index 04650b7..12f7f6b 100644 --- a/player_replay.c +++ b/player_replay.c @@ -4,6 +4,7 @@ #include "player_replay.h" #include "input.h" #include "gui.h" +#include "freecam.h" static void replay_clear( replay_buffer *replay ){ replay->head = NULL; @@ -381,8 +382,12 @@ static void skaterift_replay_resume(void){ skaterift.resume_begin = skaterift.replay.cursor; skaterift.resume_transition = 0.0f; } + + gui_helper_clear(); } +static void skaterift_replay_update_helpers(void); + static void skaterift_replay_pre_update(void){ if( skaterift.activity != k_skaterift_replay ) return; @@ -413,6 +418,8 @@ static void skaterift_replay_pre_update(void){ if( skaterift.freecam ) replay_get_camera( &skaterift.replay, &skaterift.replay_freecam ); + + skaterift_replay_update_helpers(); } f32 target_speed = axis_state( k_sraxis_replay_h ) * 5.0; @@ -440,60 +447,14 @@ static void skaterift_replay_pre_update(void){ skaterift_restore_frame( skaterift.replay.statehead ); else skaterift.activity = k_skaterift_default; - srinput.enabled = 0; + srinput.state = k_input_state_resume; + gui_helper_clear(); } - gui_helper_action( button_display_string(k_srbind_replay_play), "play" ); - gui_helper_action( axis_display_string(k_sraxis_replay_h), "scrub" ); if( skaterift.freecam ){ - gui_helper_action( button_display_string(k_srbind_replay_freecam), - "exit freecam" ); - - camera *cam = &skaterift.replay_freecam; - v3f angles; - v3_copy( cam->angles, angles ); - player_look( angles, 1.0f ); - - f32 decay = vg_maxf(0.0f,1.0f-vg.time_frame_delta*10.0f); - - v3f d; - v3_sub( angles, cam->angles, d ); - v3_muladds( skaterift.freecam_w, d, 20.0f, skaterift.freecam_w ); - v3_muls( skaterift.freecam_w, decay, skaterift.freecam_w ); - v3_muladds( cam->angles, skaterift.freecam_w, vg.time_frame_delta, - cam->angles ); - cam->angles[1] = vg_clampf( cam->angles[1], -VG_PIf*0.5f,VG_PIf*0.5f); - - camera_update_transform( cam ); - - v3f lookdir = { 0.0f, 0.0f, -1.0f }, - sidedir = { 1.0f, 0.0f, 0.0f }; - - m3x3f mtx; - m3x3_mul( cam->transform, localplayer.basis, mtx ); - - m3x3_mulv( mtx, lookdir, lookdir ); - m3x3_mulv( mtx, sidedir, sidedir ); - - v2f input; - joystick_state( k_srjoystick_steer, input ); - v2_muls( input, vg.time_frame_delta*6.0f*20.0f, input ); - - v3_muladds( skaterift.freecam_v, lookdir, -input[1], - skaterift.freecam_v ); - v3_muladds( skaterift.freecam_v, sidedir, input[0], - skaterift.freecam_v ); - - v3_muls( skaterift.freecam_v, decay, skaterift.freecam_v ); - v3_muladds( cam->pos, - skaterift.freecam_v, vg.time_frame_delta, cam->pos ); + //freecam_preupdate(); } else { - gui_helper_action( button_display_string(k_srbind_replay_resume), - "resume" ); - gui_helper_action( button_display_string(k_srbind_replay_freecam), - "enter freecam" ); - if( button_down( k_srbind_replay_resume ) ){ skaterift_replay_resume(); } @@ -501,6 +462,53 @@ static void skaterift_replay_pre_update(void){ } } +static void skaterift_replay_update_helpers(void){ + skaterift.helper_resume->greyed = skaterift.freecam; + + vg_str freecam_text; + vg_strnull( &freecam_text, skaterift.helper_freecam->text, + GUI_HELPER_TEXT_LENGTH ); + vg_strcat( &freecam_text, skaterift.freecam? "exit freecam": "freecam" ); +} + +static void skaterift_replay_post_render(void){ + if( world_static.active_instance != k_world_purpose_client ) + return; + + /* capture the current resume frame at the very last point */ + if( button_down( k_srbind_reset ) ){ + if( skaterift.activity == k_skaterift_default ){ + localplayer.rewinded_since_last_gate = 1; + skaterift.activity = k_skaterift_replay; + skaterift_record_frame( &skaterift.replay, 1 ); + if( skaterift.replay.head ){ + skaterift.replay.cursor = skaterift.replay.head->time; + skaterift.replay.cursor_frame = skaterift.replay.head; + } + skaterift.replay_control = k_replay_control_scrub; + + gui_helper_clear(); + vg_str text; + + if( gui_new_helper( input_axis_list[k_sraxis_replay_h], &text ) ) + vg_strcat( &text, "scrub" ); + + if( (skaterift.helper_resume = gui_new_helper( + input_button_list[k_srbind_replay_resume], &text )) ) + vg_strcat( &text, "resume" ); + + if( gui_new_helper( input_button_list[k_srbind_replay_play], &text )) + vg_strcat( &text, "playback" ); + + skaterift.helper_freecam = gui_new_helper( + input_button_list[k_srbind_replay_freecam], &text ); + + skaterift_replay_update_helpers(); + } + } +} + +#if 0 static void skaterift_get_replay_camera( camera *cam ){ if( skaterift.freecam ){ cam->nearz = 0.1f; @@ -513,6 +521,7 @@ static void skaterift_get_replay_camera( camera *cam ){ replay_get_camera( &skaterift.replay, &skaterift.cam ); } } +#endif static void skaterift_replay_debug_info(void){ player__debugtext( 2, "replay info" ); @@ -609,17 +618,6 @@ static void skaterift_replay_imgui(void){ snprintf( buffer, 128, "-%.2fs\n", len ); ui_text( bar, buffer, 1, k_ui_align_middle_left, 0 ); ui_text( bar, "0s", 1, k_ui_align_middle_right, 0 ); - -#if 0 - char buf[256]; - snprintf( buf, 256, "scrub: %s\nresume: %s\nplay: %s\n", - axis_display_string( k_sraxis_replay_h ), - button_display_string( k_srbind_replay_resume ), - button_display_string( k_srbind_replay_play ) ); - - ui_rect info = { 0, vg.window_y-bar[3]-128, 256, 128 }; - ui_text( info, buf, 2,0,0 ); -#endif } #endif /* PLAYER_REPLAY_C */