/* 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;
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 );
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;
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) );
}
}
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;
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 );