X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.c;h=9938de6507c7aa7963e32906424c6c32b051963c;hb=ce0205fd929e5fb1446f8c52fcab344884d82569;hp=78449ad1e04b2a80338948ccff385cccc4df7abb;hpb=933fb1873e61061648d0ee183df915c76f47a9cc;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.c b/player.c index 78449ad..9938de6 100644 --- a/player.c +++ b/player.c @@ -9,6 +9,7 @@ #include "audio.h" #include "player_replay.h" #include "network.h" +#include "network_common.h" static int localplayer_cmd_respawn( int argc, const char *argv[] ){ ent_spawn *rp = NULL, *r; @@ -268,6 +269,56 @@ static void player__begin_holdout(void){ localplayer.holdout_time = 1.0f; } +static void net_sfx_exchange( bitpack_ctx *ctx, struct net_sfx *sfx ){ + bitpack_bytes( ctx, 1, &sfx->system ); + bitpack_bytes( ctx, 1, &sfx->priority ); + bitpack_bytes( ctx, 1, &sfx->id ); + bitpack_qf32( ctx, 8, 0.0f, 1.0f, &sfx->subframe ); + bitpack_qf32( ctx, 8, 0.0f, 1.0f, &sfx->volume ); + bitpack_qv3f( ctx, 16, -1024.0f, 1024.0f, sfx->location ); +} + +static void net_sfx_play( struct net_sfx *sfx ){ + if( sfx->system < k_player_subsystem_max ){ + struct player_subsystem_interface *sys = player_subsystems[sfx->system]; + if( sys->sfx_oneshot ){ + sys->sfx_oneshot( sfx->id, sfx->location, sfx->volume ); + } + } +}; + +static void player__networked_sfx( u8 system, u8 priority, u8 id, + v3f pos, f32 volume ){ + struct net_sfx null, *sfx = &null; + + if( localplayer.sfx_buffer_count < vg_list_size(localplayer.sfx_buffer) ) + sfx = &localplayer.sfx_buffer[ localplayer.sfx_buffer_count ++ ]; + else { + for( u32 i=0; ipriority < priority ){ + sfx = a; + break; + } + } + } + + sfx->id = id; + sfx->priority = priority; + sfx->volume = volume; + v3_copy( pos, sfx->location ); + sfx->system = system; + + f32 t = (vg.time_real - network_client.last_frame) / NETWORK_FRAMERATE; + sfx->subframe = vg_clampf( t, 0.0f, 1.0f ); + + net_sfx_play( sfx ); +} + +static void player__clear_sfx_buffer(void){ + localplayer.sfx_buffer_count = 0; +} + /* implementation */ #include "player_common.c" #include "player_walk.c"