X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=c718c5ac57eb4ccc66f5cc311ab472001293ddcb;hb=137d40d96fe923600d8378b8e138e3c276f27ff4;hp=2ae0485307b8f056e5dd51911c6d2d1ac2e64106;hpb=0399d5a0a2e1818c3d4951f42abc1132f7e26421;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 2ae0485..c718c5a 100644 --- a/player.h +++ b/player.h @@ -2,12 +2,16 @@ #define PLAYER_H #include "skaterift.h" +#include "player_common.h" +#include "network_compression.h" enum player_subsystem{ k_player_subsystem_walk = 0, k_player_subsystem_skate = 1, k_player_subsystem_dead = 2, - k_player_subsystem_drive = 3 + k_player_subsystem_drive = 3, + k_player_subsystem_max, + k_player_subsystem_invalid = 255 }; struct player_cam_controller { @@ -29,10 +33,29 @@ struct player_cam_controller { cam_velocity_smooth; }; +struct player_subsystem_interface{ + void(*system_register)(void); + void(*bind)(void); + void(*reset)( ent_spawn *rp ); + void(*pre_update)(void); + void(*update)(void); + void(*post_update)(void); + void(*im_gui)(void); + void(*animate)(void); + void(*pose)( void *animator, player_pose *pose ); + void(*post_animate)(void); + void(*network_animator_exchange)( bitpack_ctx *ctx, void *data ); + void(*sfx_oneshot)( u8 id, v3f pos, f32 volume ); + + void *animator_data; + u32 animator_size; + + const char *name; +}; + #include "player_ragdoll.h" #include "player_render.h" #include "player_model.h" -#include "player_common.h" #include "player_walk.h" #include "player_skate.h" #include "player_dead.h" @@ -46,7 +69,7 @@ static i32 k_cinema_fixed = 0; static f32 k_cinema = 0.0f; static i32 k_invert_y = 0; -struct player_instance{ +struct { /* transform definition */ rigidbody rb; v3f angles; @@ -72,9 +95,21 @@ struct player_instance{ v3f cam_land_punch, cam_land_punch_v; ent_gate *gate_waiting; - int immobile; + /* + * Network + * -------------------------------------------------- + */ + u16 boundary_hash; + struct net_sfx { + u8 system, priority, id; + f32 subframe, volume; + v3f location; + } + sfx_buffer[4]; + u32 sfx_buffer_count; + /* * Animation * -------------------------------------------------- @@ -86,10 +121,11 @@ struct player_instance{ u16 board_view_slot, playermodel_view_slot; + player_pose pose; player_pose holdout_pose; float holdout_time; - struct board_pose board_pose; + m4x3f *final_mtx; /* * Subsystems @@ -97,111 +133,55 @@ struct player_instance{ */ enum player_subsystem subsystem; /* .. prev */ - - struct player_skate _skate; - struct player_walk _walk; - struct player_dead _dead; - struct player_drive _drive; } -static localplayer; +static localplayer = { + .rb = { + .co = { 0,0,0 }, + .w = { 0,0,0 }, + .v = { 0,0,0 }, + .q = { 0,0,0,1 }, + .to_world = M4X3_IDENTITY, + .to_local = M4X3_IDENTITY + } +}; + +struct player_subsystem_interface static *player_subsystems[] = { + [k_player_subsystem_walk] = &player_subsystem_walk, + [k_player_subsystem_dead] = &player_subsystem_dead, + [k_player_subsystem_drive] = &player_subsystem_drive, + [k_player_subsystem_skate] = &player_subsystem_skate +}; /* * Gameloop tables * --------------------------------------------------------- */ -VG_STATIC -void (*_player_system_register[])(void) = { - player__walk_register, - player__skate_register, - NULL, - NULL -}; - -VG_STATIC -void (*_player_bind[])( player_instance *player ) = { - player__walk_bind, - player__skate_bind, - NULL, - player__drive_bind -}; - -VG_STATIC -void (*_player_reset[])( player_instance *player, ent_spawn *rp ) = { - player__walk_reset, - player__skate_reset, - NULL, - player__drive_reset -}; - -VG_STATIC -void (*_player_pre_update[])( player_instance *player ) = { - player__walk_pre_update, - player__skate_pre_update, - NULL, - player__drive_pre_update -}; - -VG_STATIC -void( *_player_update[])( player_instance *player ) = { - player__walk_update, - player__skate_update, - player__dead_update, - player__drive_update -}; - -VG_STATIC -void( *_player_post_update[])( player_instance *player ) = { - player__walk_post_update, - player__skate_post_update, - NULL, - player__drive_post_update -}; - -VG_STATIC -void( *_player_im_gui[])( player_instance *player ) = { - player__walk_im_gui, - player__skate_im_gui, - NULL, - player__drive_im_gui -}; - -VG_STATIC -void( *_player_animate[])( player_instance *player, player_animation *dest ) = { - player__walk_animate, - player__skate_animate, - player__dead_animate, - player__drive_animate -}; - -VG_STATIC -void( *_player_post_animate[])( player_instance *player ) = { - player__walk_post_animate, - player__skate_post_animate, - player__dead_post_animate, - player__drive_post_animate -}; - -PLAYER_API void player__debugtext( int size, const char *fmt, ... ); -PLAYER_API void player__create( player_instance *inst ); -PLAYER_API void player__use_avatar( player_instance *player, - struct player_avatar *av ); -PLAYER_API void player__use_mesh( player_instance *player, glmesh *mesh ); -PLAYER_API void player__use_texture( player_instance *player, vg_tex2d *tex ); -PLAYER_API void player__use_model( player_instance *player, u16 reg_id ); - -PLAYER_API void player__bind( player_instance *player ); -PLAYER_API void player__pre_update( player_instance *player ); -PLAYER_API void player__update( player_instance *player ); -PLAYER_API void player__post_update( player_instance *player ); - -PLAYER_API void player__pass_gate( player_instance *player, ent_gate *gate ); -PLAYER_API void player__im_gui( player_instance *player ); -PLAYER_API void player__setpos( player_instance *player, v3f pos ); -PLAYER_API void player__spawn( player_instance *player, ent_spawn *rp ); -PLAYER_API void player__kill( player_instance *player ); - -VG_STATIC int localplayer_cmd_respawn( int argc, const char *argv[] ); -VG_STATIC void player_apply_transport_to_cam( m4x3f transport ); +static void player__debugtext( int size, const char *fmt, ... ); +static void player__use_avatar( struct player_avatar *av ); +static void player__use_mesh( glmesh *mesh ); +static void player__use_texture( vg_tex2d *tex ); +static void player__use_model( u16 reg_id ); + +static void player__bind(void); +static void player__pre_update(void); +static void player__update(void); +static void player__post_update(void); + +static void player__pass_gate( u32 id ); +static void player__im_gui(void); +static void player__setpos( v3f pos ); +static void player__spawn( ent_spawn *rp ); +static void player__kill(void); +static void player__begin_holdout( v3f offset ); + +static int localplayer_cmd_respawn( int argc, const char *argv[] ); +static void player_apply_transport_to_cam( m4x3f transport ); + +static void player__clear_sfx_buffer(void); +static void player__networked_sfx( u8 system, u8 priority, u8 id, + v3f pos, f32 volume ); +static void net_sfx_exchange( bitpack_ctx *ctx, struct net_sfx *sfx ); +static void net_sfx_play( struct net_sfx *sfx ); #endif /* PLAYER_H */