board pose
[carveJwlIkooP6JGAAIwe30JlM.git] / player_remote.c
index f81cdf50ec3259a256a655a61aa24a3f9e68febf..16890632e10f0de358e67af5478d8cf3b2480cbd 100644 (file)
@@ -31,13 +31,6 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){
          /* TODO: interpret the uids */
          player->board_view_slot = 0;
          player->playermodel_view_slot = 0;
-#if 0
-            addon_cache_create_viewer_from_uid( k_addon_type_board, 
-                                                playerjoin->board_uid );
-         player->playermodel_view_slot = 
-            addon_cache_create_viewer_from_uid( k_addon_type_player,
-                                                playerjoin->playermodel_uid );
-#endif
 
          struct interp_buffer *buf = &netplayers.interp_data[playerjoin->index];
          buf->t = -99999999.9;
@@ -132,6 +125,11 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){
       netmsg_playeritem *item = msg->m_pData;
       if( !packet_minsize( msg, sizeof(*item)+1 )) return;
 
+      if( item->client >= vg_list_size(netplayers.list) ){
+         vg_error( "inetmsg_playerframe: player index out of range\n" );
+         return;
+      }
+
       vg_info( "Client #%u equiped: [%u] %s\n", 
                item->client, item->type, item->uid );
 
@@ -302,6 +300,7 @@ static void pose_remote_player( u32 index,
    struct player_avatar *av = localplayer.playeravatar;
    struct skeleton *sk = &localplayer.playeravatar->sk;
    m4x3f *final_mtx = &netplayers.final_mtx[ av->sk.bone_count*index ];
+   struct player_board_pose *board_pose = &netplayers.board_poses[index];
 
    struct player_subsystem_interface *sys0 = player_subsystems[f0->subsystem],
                                      *sys1 = NULL;
@@ -319,9 +318,11 @@ static void pose_remote_player( u32 index,
 
       lerp_player_pose( &pose0, &pose1, t, &posed );
       apply_full_skeleton_pose( &av->sk, &posed, final_mtx );
+      memcpy( board_pose, &posed.board, sizeof(*board_pose) );
    }
    else {
       apply_full_skeleton_pose( &av->sk, &pose0, final_mtx );
+      memcpy( board_pose, &pose0.board, sizeof(*board_pose) );
    }
 }
 
@@ -396,7 +397,7 @@ static void render_remote_players( world_instance *world, camera *cam ){
 
    SDL_AtomicLock( &addon_system.sl_cache_using_resources );
 
-   for( u32 i=0; i<vg_list_size(netplayers.list); i ++ ){
+   for( u32 i=0; i<NETWORK_MAX_PLAYERS; i ++ ){
       struct network_player *player = &netplayers.list[i];
       if( !player->active ) continue;
       
@@ -413,14 +414,10 @@ static void render_remote_players( world_instance *world, camera *cam ){
       struct player_board *board = 
          addon_cache_item_if_loaded( k_addon_type_board,
                                      player->board_view_slot );
-
-      /* TODO: Board pose */
-#if 0
       render_board( cam, world, board, 
                      final_mtx[localplayer.playeravatar->id_board],
-                     &localplayer.pose.board,
+                     &netplayers.board_poses[ i ],
                      k_board_shader_player );
-#endif
    }
 
    SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );