#include "skeleton.h"
#include "player_render.h"
#include "network_common.h"
+#include "addon.h"
static void player_remote_unwatch( struct network_player *player ){
addon_cache_unwatch( k_addon_type_player, player->playermodel_view_slot );
network_msgstring( update->name, msg->m_cbSize, sizeof(*update),
player->username, sizeof(player->username) );
- vg_info( "#%u changed username to: %s\n", player->username );
+ vg_info( "#%u changed username to: %s\n",
+ update->index, player->username );
}
else {
vg_error( "inetmsg_playerleave: player index out of range\n" );
player->subsystem = frame->subsystem;
player->down_bytes += msg->m_cbSize;
}
+ else if( tmp->inetmsg_id == k_inetmsg_playeritem ){
+ netmsg_playeritem *item = msg->m_pData;
+ if( !packet_minsize( msg, sizeof(*item)+1 )) return;
+
+ vg_info( "Client #%u equiped: [%u] %s\n",
+ item->client, item->type, item->uid );
+
+ struct network_player *player = &netplayers.list[ item->client ];
+
+ char uid[ ADDON_UID_MAX ];
+ network_msgstring( item->uid, msg->m_cbSize, sizeof(*item),
+ uid, ADDON_UID_MAX );
+
+ if( item->type == k_addon_type_board ){
+ addon_cache_unwatch( k_addon_type_board, player->board_view_slot );
+ player->board_view_slot =
+ addon_cache_create_viewer_from_uid( k_addon_type_board, uid );
+ }
+ else if( item->type == k_addon_type_player ){
+ addon_cache_unwatch( k_addon_type_player,
+ player->playermodel_view_slot );
+ player->playermodel_view_slot =
+ addon_cache_create_viewer_from_uid( k_addon_type_player, uid );
+ }
+ }
}
/*
* Draw remote players
*/
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 ++ ){
struct network_player *player = &netplayers.list[i];
if( !player->active ) continue;
struct player_avatar *av = localplayer.playeravatar;
+ m4x3f *final_mtx = &netplayers.final_mtx[ av->sk.bone_count*i ];
+
+ struct player_model *model =
+ addon_cache_item_if_loaded( k_addon_type_player,
+ player->playermodel_view_slot );
+
+ if( !model ) model = &localplayer.fallback_model;
+ render_playermodel( cam, world, 0, model, &av->sk, final_mtx );
+
+ struct player_board *board =
+ addon_cache_item_if_loaded( k_addon_type_board,
+ player->board_view_slot );
- struct player_model *model = &localplayer.fallback_model;
- render_playermodel( cam, world, 0, model, &av->sk,
- &netplayers.final_mtx[ av->sk.bone_count*i ] );
+ /* TODO: Board pose */
+#if 0
+ render_board( cam, world, board,
+ final_mtx[localplayer.playeravatar->id_board],
+ &localplayer.pose.board,
+ k_board_shader_player );
+#endif
}
+
+ SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
}