X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_remote.c;h=cfad5e9018d236280207831ffc020eeeaa03095f;hb=5388f705086600105358d9880e8895673ac0e247;hp=73ed42ce3a7f4e9f0a2c4544671aaaff61e914a5;hpb=88f8273a9ab7b0644813625c43c70c5af34cd4f5;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_remote.c b/player_remote.c index 73ed42c..cfad5e9 100644 --- a/player_remote.c +++ b/player_remote.c @@ -157,7 +157,25 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){ dest->boundary_hash = frame->boundary_hash; struct network_player *player = &netplayers.list[ frame->client ]; - memcpy( &dest->data, frame->animdata, datasize ); + + struct player_subsystem_interface *sys = + player_subsystems[ frame->subsystem ]; + + if( sys->network_animator_exchange ){ + bitpack_ctx ctx = { + .mode = k_bitpack_decompress, + .buffer = frame->animdata, + .buffer_len = datasize, + .bytes = 0, + }; + + memset( &dest->data, 0, sys->animator_size ); + sys->network_animator_exchange( &ctx, &dest->data ); + } + else { + memcpy( &dest->data, frame->animdata, datasize ); + } + player->subsystem = frame->subsystem; player->down_bytes += msg->m_cbSize; } @@ -227,7 +245,20 @@ static void remote_player_send_playerframe(void){ frame->boundary_hash = localplayer.boundary_hash; frame->instance_id = world_static.active_instance; - memcpy( frame->animdata, sys->animator_data, sys->animator_size ); + if( sys->network_animator_exchange ){ + bitpack_ctx ctx = { + .mode = k_bitpack_compress, + .buffer = frame->animdata, + .buffer_len = size, + .bytes = 0, + }; + + sys->network_animator_exchange( &ctx, sys->animator_data ); + size = ctx.bytes; + } + else{ + memcpy( frame->animdata, sys->animator_data, sys->animator_size ); + } netplayers.up_bytes += size;