- /* chop end off replay */
- prev->r = NULL;
- skaterift.replay.statehead = prev;
- skaterift.replay.head = prev;
- skaterift.replay.cursor_frame = prev;
- skaterift.replay.cursor = prev->time;
+ /* chop end off replay */
+ frame->r = NULL;
+ skaterift.replay.statehead = frame;
+ skaterift.replay.head = frame;
+ skaterift.replay.cursor_frame = frame;
+ skaterift.replay.cursor = frame->time;
+ skaterift.replay_control = k_replay_control_scrub;
+ skaterift.activity = k_skaterift_default;
+ vg.time = frame->time;
+}
+
+VG_STATIC void skaterift_replay_pre_update(void){
+ if( skaterift.activity != k_skaterift_replay ) return;
+
+ f64 speed = vg.time_frame_delta * 1.0;
+ f64 target = skaterift.replay.cursor;
+
+ if( skaterift.replay_control == k_replay_control_resume ){
+ if( skaterift.replay.cursor_frame == skaterift.resume_target ||
+ skaterift.replay.cursor_frame == NULL ){
+ skaterift_restore_frame( skaterift.resume_target );
+ }
+ else {
+ vg_slewf( &skaterift.resume_transition, 1.0f,
+ vg.time_frame_delta * (1.0f/1.0f) );
+
+ if( skaterift.resume_transition >= 1.0f )
+ skaterift_restore_frame( skaterift.resume_target );
+ else {
+ target = vg_lerp( skaterift.resume_begin,
+ skaterift.resume_target->time,
+ vg_smoothstepf( skaterift.resume_transition ) );
+ replay_seek( &skaterift.replay, target );
+ }
+ }
+ }
+ else {
+ if( vg_getkey( SDLK_9 ) ){
+ target -= speed;
+ skaterift.replay_control = k_replay_control_scrub;
+ replay_seek( &skaterift.replay, target );
+ }
+ if( vg_getkey( SDLK_0 ) ){
+ target += speed;