X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_remote.c;h=a818be12abe42af439400a0d6d3f22b5db3e2da4;hb=e75926c89391d28ea586362158767daaa876c759;hp=888393b2ddc0763fa22fc5d9c9cd3b64b5220093;hpb=25bf60849a782d43d886ed182c0c85b87cf87ab9;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_remote.c b/player_remote.c index 888393b..a818be1 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; } @@ -176,6 +194,14 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){ return; } + vg_info( "Client #%d equiped: [%s] %s\n", + item->client, + (const char *[]){[k_netmsg_playeritem_board]="board", + [k_netmsg_playeritem_player]="player", + [k_netmsg_playeritem_world0]="world0", + [k_netmsg_playeritem_world1]="world1" + }[item->type_index], item->uid ); + struct network_player *player = &netplayers.list[ item->client ]; char *uid = player->items[ item->type_index ]; @@ -219,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 = sys->animator_size, + .bytes = 0, + }; + + sys->network_animator_exchange( &ctx, sys->animator_data ); + size = sizeof(netmsg_playerframe)+ctx.bytes; + } + else{ + memcpy( frame->animdata, sys->animator_data, sys->animator_size ); + } netplayers.up_bytes += size;