From 3901e08513eb75b706b26aa51acfa20f80c1f81a Mon Sep 17 00:00:00 2001 From: hgn Date: Wed, 12 Jul 2023 17:46:10 +0100 Subject: [PATCH] fnugz'z rewind controller --- input.h | 29 +++++++++++++++-------------- player_replay.c | 24 +++++++++++++++--------- skaterift.c | 5 +++++ 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/input.h b/input.h index cd5f826..4c31d00 100644 --- a/input.h +++ b/input.h @@ -114,9 +114,9 @@ static const char *button_display_string( enum sr_bind button ) [k_srbind_mback] = controller_glyph( SDL_CONTROLLER_BUTTON_B ), [k_srbind_maccept]= controller_glyph( SDL_CONTROLLER_BUTTON_A ), [k_srbind_mopen] = controller_glyph( SDL_CONTROLLER_BUTTON_GUIDE ), -[k_srbind_replay_play]= controller_glyph( SDL_CONTROLLER_BUTTON_A ), +[k_srbind_replay_play]= controller_glyph( SDL_CONTROLLER_BUTTON_X ), [k_srbind_replay_freecam]=controller_glyph(SDL_CONTROLLER_BUTTON_Y ), -[k_srbind_replay_resume]=controller_glyph( SDL_CONTROLLER_BUTTON_LEFTSHOULDER ) +[k_srbind_replay_resume]=controller_glyph( SDL_CONTROLLER_BUTTON_A ) }; const char *keyboard_table[ k_srbind_max ] = { @@ -135,9 +135,9 @@ static const char *button_display_string( enum sr_bind button ) [k_srbind_mback] = "\xa3", [k_srbind_maccept]= "\xa2", [k_srbind_mopen] = "\xa3" , -[k_srbind_replay_play]= "\xa1", +[k_srbind_replay_play]= KEYBOARD_GLYPH( "E" ), [k_srbind_replay_freecam] = KEYBOARD_GLYPH( "F" ), -[k_srbind_replay_resume]=KEYBOARD_GLYPH( "R" ) +[k_srbind_replay_resume]= "\xa1", }; if( vg_input.display_input_method == k_input_method_controller ) @@ -159,7 +159,7 @@ static const char *axis_display_string( enum sr_axis axis ) [k_sraxis_grab] = "\x9e", [k_sraxis_mbrowse_h] = KEYBOARD_GLYPH("\x93")KEYBOARD_GLYPH("\x95"), [k_sraxis_mbrowse_v] = KEYBOARD_GLYPH("\x96")KEYBOARD_GLYPH("\x94"), - [k_sraxis_replay_h] = KEYBOARD_GLYPH("\x93")KEYBOARD_GLYPH("\x95"), + [k_sraxis_replay_h] = KEYBOARD_GLYPH("A")KEYBOARD_GLYPH("D"), }; if( vg_input.display_input_method == k_input_method_controller ) @@ -293,18 +293,22 @@ static void skaterift_preupdate_inputs(void) setbtn( k_srbind_maccept, vg_getkey(SDLK_e) ); setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN)); setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN2)); - setbtn( k_srbind_replay_play, vg_getkey(SDLK_SPACE) ); + setbtn( k_srbind_replay_play, vg_getkey(SDLK_e) ); setbtn( k_srbind_replay_freecam, vg_getkey(SDLK_f) ); - setbtn( k_srbind_replay_resume, vg_getkey(SDLK_r) ); + setbtn( k_srbind_replay_resume, vg_getkey(SDLK_SPACE) ); /* axis * --------------------------------------------*/ srinput.axis_states[ k_sraxis_grab ][0] = vg_getkey( SDLK_LSHIFT ); - if( vg_getkey( SDLK_d ) ) + if( vg_getkey( SDLK_d ) ) { srinput.joystick_states[k_srjoystick_steer][0][0] += 1.0f; - if( vg_getkey( SDLK_a ) ) + srinput.axis_states[ k_sraxis_replay_h ][0] += 1.0f; + } + if( vg_getkey( SDLK_a ) ) { srinput.joystick_states[k_srjoystick_steer][0][0] -= 1.0f; + srinput.axis_states[ k_sraxis_replay_h ][0] -= 1.0f; + } if( vg_getkey( SDLK_w ) ) srinput.joystick_states[k_srjoystick_steer][0][1] -= 1.0f; if( vg_getkey( SDLK_s ) ) @@ -317,11 +321,9 @@ static void skaterift_preupdate_inputs(void) if( vg_getkey( SDLK_LEFT ) ){ srinput.axis_states[ k_sraxis_mbrowse_h ][0] -= 1.0f; - srinput.axis_states[ k_sraxis_replay_h ][0] -= 1.0f; } if( vg_getkey( SDLK_RIGHT ) ){ srinput.axis_states[ k_sraxis_mbrowse_h ][0] += 1.0f; - srinput.axis_states[ k_sraxis_replay_h ][0] += 1.0f; } if( vg_input.active_controller_index >= 0 ){ @@ -345,9 +347,8 @@ static void skaterift_preupdate_inputs(void) setbtn( k_srbind_maccept,buttons[ SDL_CONTROLLER_BUTTON_A ] ); setbtn( k_srbind_mopen, buttons[ SDL_CONTROLLER_BUTTON_START ] ); setbtn( k_srbind_mback, buttons[ SDL_CONTROLLER_BUTTON_START ] ); - setbtn( k_srbind_replay_resume, - buttons[ SDL_CONTROLLER_BUTTON_LEFTSHOULDER ] ); - setbtn( k_srbind_replay_play, buttons[ SDL_CONTROLLER_BUTTON_A ] ); + setbtn( k_srbind_replay_resume, buttons[ SDL_CONTROLLER_BUTTON_A ] ); + setbtn( k_srbind_replay_play, buttons[ SDL_CONTROLLER_BUTTON_X ] ); setbtn( k_srbind_replay_freecam, buttons[ SDL_CONTROLLER_BUTTON_Y ] ); float *axis = controller->axises; diff --git a/player_replay.c b/player_replay.c index 21d92bc..62c2b2e 100644 --- a/player_replay.c +++ b/player_replay.c @@ -385,6 +385,17 @@ void skaterift_restore_frame( replay_frame *frame ){ vg.time = frame->time; } +VG_STATIC void skaterift_replay_resume(void){ + replay_frame *prev = replay_find_recent_stateframe(&skaterift.replay); + + if( prev ){ + skaterift.replay_control = k_replay_control_resume; + skaterift.resume_target = prev; + skaterift.resume_begin = skaterift.replay.cursor; + skaterift.resume_transition = 0.0f; + } +} + VG_STATIC void skaterift_replay_pre_update(void){ if( skaterift.activity != k_skaterift_replay ) return; @@ -412,6 +423,8 @@ VG_STATIC void skaterift_replay_pre_update(void){ skaterift.replay_control = k_replay_control_play; f32 target_speed = axis_state( k_sraxis_replay_h ) * 5.0; + if( button_press( k_srbind_reset ) ) + target_speed += -2.0; if( fabsf(target_speed) > 0.01f ) skaterift.replay_control = k_replay_control_scrub; @@ -420,7 +433,7 @@ VG_STATIC void skaterift_replay_pre_update(void){ target_speed = 1.0; vg_slewf( &skaterift.track_velocity, target_speed, - 10.0f*vg.time_frame_delta ); + 18.0f*vg.time_frame_delta ); if( fabsf( skaterift.track_velocity ) > 0.0001f ){ f64 target = skaterift.replay.cursor; @@ -430,14 +443,7 @@ VG_STATIC void skaterift_replay_pre_update(void){ } if( button_down( k_srbind_replay_resume ) ){ - replay_frame *prev = replay_find_recent_stateframe(&skaterift.replay); - - if( prev ){ - skaterift.replay_control = k_replay_control_resume; - skaterift.resume_target = prev; - skaterift.resume_begin = skaterift.replay.cursor; - skaterift.resume_transition = 0.0f; - } + skaterift_replay_resume(); } else if( button_down( k_srbind_mback ) ){ if( skaterift.replay.statehead ) diff --git a/skaterift.c b/skaterift.c index beb4fa3..fa9459c 100644 --- a/skaterift.c +++ b/skaterift.c @@ -507,6 +507,11 @@ VG_STATIC void render_main_game(void){ if( skaterift.activity == k_skaterift_default ){ 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; } } } -- 2.25.1