2 #include "player_render.h"
3 #include "vg/vg_rigidbody.h"
5 typedef struct replay_buffer replay_buffer
;
6 typedef struct replay_frame replay_frame
;
7 typedef struct replay_gamestate replay_gamestate
;
8 typedef struct replay_sfx replay_sfx
;
10 struct replay_buffer
{
14 replay_frame
*head
, *tail
, *cursor_frame
,
19 enum replay_framedata
{
20 k_replay_framedata_animator
,
21 k_replay_framedata_gamestate
,
22 k_replay_framedata_internal_gamestate
,
23 k_replay_framedata_sfx
,
24 k_replay_framedata_glider
,
25 k_replay_framedata_rows
29 v3f cam_pos
, cam_angles
;
35 enum player_subsystem system
;
37 u16 data_table
[k_replay_framedata_rows
][2];
40 struct replay_gamestate
{
41 rigidbody rb
, glider_rb
; /* TODO: these don't need to be saved with their
44 struct player_cam_controller cam_control
;
45 u32 current_run_version
;
48 /* we save this per-anim-frame. if there glider is existing in any state */
49 struct replay_glider_data
{
50 bool have_glider
, glider_orphan
;
63 replay_frame
*resume_target
;
65 f32 resume_transition
;
68 k_replay_control_scrub
,
69 k_replay_control_play
,
70 k_replay_control_resume
74 struct gui_helper
*helper_resume
, *helper_freecam
;
76 vg_camera replay_freecam
;
78 v3f freecam_v
, freecam_w
;
82 int replay_seek( replay_buffer
*replay
, f64 t
);
84 replay_frame
*replay_find_recent_stateframe( replay_buffer
*replay
);
85 void replay_get_camera( replay_buffer
*replay
, vg_camera
*cam
);
86 void replay_get_frame_camera( replay_frame
*frame
, vg_camera
*cam
);
87 f32
replay_subframe_time( replay_buffer
*replay
);
88 void replay_clear( replay_buffer
*replay
);
90 replay_frame_data( replay_frame
*frame
, enum replay_framedata type
);
92 void skaterift_replay_pre_update(void);
93 void skaterift_replay_imgui(void);
94 void skaterift_replay_debug_info(void);
95 void skaterift_record_frame( replay_buffer
*replay
,
96 int force_gamestate
);
97 void skaterift_replay_post_render(void);