1 #ifndef PLAYER_REPLAY_H
2 #define PLAYER_REPLAY_H
6 #include "player_render.h"
8 typedef struct replay_buffer replay_buffer
;
9 typedef struct replay_frame replay_frame
;
10 typedef struct replay_gamestate replay_gamestate
;
11 typedef struct replay_sfx replay_sfx
;
13 struct replay_buffer
{
17 replay_frame
*head
, *tail
, *cursor_frame
,
22 enum replay_framedata
{
23 k_replay_framedata_animator
,
24 k_replay_framedata_gamestate
,
25 k_replay_framedata_internal_gamestate
,
26 k_replay_framedata_sfx
,
27 k_replay_framedata_glider
,
28 k_replay_framedata_rows
32 v3f cam_pos
, cam_angles
;
38 enum player_subsystem system
;
40 u16 data_table
[k_replay_framedata_rows
][2];
43 struct replay_gamestate
{
44 rigidbody rb
, glider_rb
; /* TODO: these don't need to be saved with their
47 struct player_cam_controller cam_control
;
50 /* we save this per-anim-frame. if there glider is existing in any state */
51 struct replay_glider_data
{
52 bool have_glider
, glider_orphan
;
62 static int replay_seek( replay_buffer
*replay
, f64 t
);
64 static replay_frame
*replay_find_recent_stateframe( replay_buffer
*replay
);
65 static void replay_get_camera( replay_buffer
*replay
, camera
*cam
);
66 static void replay_get_frame_camera( replay_frame
*frame
, camera
*cam
);
67 static f32
replay_subframe_time( replay_buffer
*replay
);
68 static void replay_clear( replay_buffer
*replay
);
70 replay_frame_data( replay_frame
*frame
, enum replay_framedata type
);
72 static void skaterift_replay_pre_update(void);
73 static void skaterift_replay_imgui(void);
74 static void skaterift_replay_debug_info(void);
75 static void skaterift_record_frame( replay_buffer
*replay
,
76 int force_gamestate
);
78 #endif /* PLAYER_REPLAY_H */