5 #include "player_common.h"
6 #include "network_compression.h"
7 #include "player_effects.h"
10 k_player_subsystem_walk
= 0,
11 k_player_subsystem_skate
= 1,
12 k_player_subsystem_dead
= 2,
13 k_player_subsystem_drive
= 3,
14 k_player_subsystem_basic_info
= 4,
15 k_player_subsystem_glide
= 5,
16 k_player_subsystem_max
,
17 k_player_subsystem_invalid
= 255
20 struct player_cam_controller
{
22 k_cam_firstperson
= 1,
26 f32 camera_type_blend
;
28 v3f fpv_offset
, /* expressed relative to rigidbody */
31 fpv_viewpoint
, /* expressed relative to neck bone inverse final*/
39 struct player_subsystem_interface
{
40 void(*system_register
)(void);
42 void(*pre_update
)(void);
44 void(*post_update
)(void);
47 void(*pose
)( void *animator
, player_pose
*pose
);
48 void(*effects
)( void *animator
, m4x3f
*final_mtx
, struct player_board
*board
,
49 struct player_effects_data
*effect_data
);
50 void(*post_animate
)(void);
51 void(*render
)( camera
*cam
, world_instance
*world
, player_pose
*pose
);
53 void(*network_animator_exchange
)( bitpack_ctx
*ctx
, void *data
);
54 void(*sfx_oneshot
)( u8 id
, v3f pos
, f32 volume
);
56 void(*sfx_comp
)(void *animator
);
57 void(*sfx_kill
)(void);
65 #include "player_ragdoll.h"
66 #include "player_render.h"
67 #include "player_model.h"
69 /* subsystem headers */
70 #include "player_walk.h"
71 #include "player_skate.h"
72 #include "player_dead.h"
73 #include "player_drive.h"
74 #include "player_glide.h"
75 #include "player_basic_info.h"
77 #include "player_replay.h"
79 #define PLAYER_REWIND_FRAMES 60*4
80 #define RESET_MAX_TIME 45.0
82 static i32 k_cinema_fixed
= 0;
83 static f32 k_cinema
= 0.0f
;
84 static i32 k_invert_y
= 0;
85 static f32 k_cam_dist
= 1.8f
;
88 /* transform definition */
96 * ---------------------------
99 struct player_cam_controller cam_control
;
102 float cam_velocity_influence
,
103 cam_velocity_coefficient
,
104 cam_velocity_constant
,
105 cam_velocity_coefficient_smooth
,
106 cam_velocity_constant_smooth
,
107 cam_velocity_influence_smooth
,
111 v3f cam_land_punch
, cam_land_punch_v
;
112 ent_gate
*gate_waiting
;
113 int deferred_frame_record
;
117 int rewinded_since_last_gate
;
121 * --------------------------------------------------
125 u8 system
, priority
, id
;
126 f32 subframe
, volume
;
129 sfx_buffer
[4], /* large timeframe 1/10s; for networking */
130 local_sfx_buffer
[2]; /* per framerate 1/30s; for replay */
131 u32 sfx_buffer_count
,
132 local_sfx_buffer_count
;
136 * --------------------------------------------------
139 struct player_ragdoll ragdoll
;
140 struct player_model fallback_model
;
141 struct player_board fallback_board
;
143 u16 board_view_slot
, playermodel_view_slot
;
146 player_pose holdout_pose
;
153 * -------------------------------------------------
156 enum player_subsystem subsystem
,
162 mdl_context skeleton_meta
;
163 struct skeleton skeleton
;
184 u8 skeleton_mirror
[32];
186 struct player_effects_data effect_data
;
188 static localplayer
= {
194 .to_world
= M4X3_IDENTITY
,
195 .to_local
= M4X3_IDENTITY
199 struct player_subsystem_interface
static *player_subsystems
[] = {
200 [k_player_subsystem_walk
] = &player_subsystem_walk
,
201 [k_player_subsystem_dead
] = &player_subsystem_dead
,
202 [k_player_subsystem_drive
] = &player_subsystem_drive
,
203 [k_player_subsystem_skate
] = &player_subsystem_skate
,
204 [k_player_subsystem_basic_info
]=&player_subsystem_basic_info
,
205 [k_player_subsystem_glide
] = &player_subsystem_glide
,
210 * ---------------------------------------------------------
213 static void player__debugtext( int size
, const char *fmt
, ... );
214 static void player__use_mesh( glmesh
*mesh
);
215 static void player__use_texture( vg_tex2d
*tex
);
216 static void player__use_model( u16 reg_id
);
218 static void player__bind(void);
219 static void player__pre_update(void);
220 static void player__update(void);
221 static void player__post_update(void);
223 static void player__pass_gate( u32 id
);
224 static void player__im_gui(void);
225 static void player__setpos( v3f pos
);
226 static void player__spawn( ent_spawn
*rp
);
227 static void player__clean_refs(void);
228 static void player__reset(void);
229 static void player__kill(void);
230 static void player__begin_holdout( v3f offset
);
232 static int localplayer_cmd_respawn( int argc
, const char *argv
[] );
233 static void player_apply_transport_to_cam( m4x3f transport
);
235 static void player__clear_sfx_buffer(void);
236 static void player__networked_sfx( u8 system
, u8 priority
, u8 id
,
237 v3f pos
, f32 volume
);
238 static void net_sfx_exchange( bitpack_ctx
*ctx
, struct net_sfx
*sfx
);
239 static void net_sfx_play( struct net_sfx
*sfx
);
241 #endif /* PLAYER_H */