+ else if( tmp->inetmsg_id == k_inetmsg_playerframe ){
+ u32 datasize = msg->m_cbSize - sizeof(netmsg_playerframe);
+
+ if( datasize > sizeof(netplayers.list[0].animdata) ){
+ vg_error( "Player frame data exceeds animdata size\n" );
+ return;
+ }
+
+ netmsg_playerframe *frame = msg->m_pData;
+ if( frame->client >= vg_list_size(netplayers.list) ){
+ vg_error( "inetmsg_playerframe: player index out of range\n" );
+ return;
+ }
+
+ if( frame->subsystem >= k_player_subsystem_max ){
+ vg_error( "inetmsg_playerframe: subsystem out of range\n" );
+ return;
+ }
+
+ struct network_player *player = &netplayers.list[ frame->client ];
+ memcpy( &player->animdata, frame->animdata, datasize );
+ player->subsystem = frame->subsystem;
+ player->down_bytes += msg->m_cbSize;
+ }
+}
+
+static void remote_player_send_playerframe(void){
+ u8 sysid = localplayer.subsystem;
+ if( sysid >= k_player_subsystem_max ) return;
+
+ struct player_subsystem_interface *sys = player_subsystems[sysid];
+
+ if( sys->animator_size ){
+ u32 size = sizeof(netmsg_playerframe)+sys->animator_size;
+ netmsg_playerframe *frame = alloca(size);
+ frame->inetmsg_id = k_inetmsg_playerframe;
+ frame->client = 0;
+ frame->subsystem = localplayer.subsystem;
+ memcpy( frame->animdata, sys->animator_data, sys->animator_size );
+
+ netplayers.up_bytes += size;
+
+ SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
+ hSteamNetworkingSockets, network_client.remote,
+ frame, size,
+ k_nSteamNetworkingSend_Unreliable, NULL );
+ }
+}
+
+static void remote_player_debug_update(void){
+ if( (vg.time_real - netplayers.last_data_measurement) > 1.0 ){
+ netplayers.last_data_measurement = vg.time_real;
+ u32 total_down = 0;
+
+ for( u32 i=0; i<vg_list_size(netplayers.list); i++ ){
+ struct network_player *player = &netplayers.list[i];
+ if( player->active ){
+ total_down += player->down_bytes;
+ player->down_kbs = ((f32)player->down_bytes)/1024.0f;
+ player->down_bytes = 0;
+ }
+ }
+
+ netplayers.down_kbs = ((f32)total_down)/1024.0f;
+ netplayers.up_kbs = ((f32)netplayers.up_bytes)/1024.0f;
+ netplayers.up_bytes = 0;
+ }