prop->inetmsg_id = k_inetmsg_playerusername;
prop->index = client_id;
- u32 chs = vg_strncpy( client->username, prop->name, name_len,
+ u32 chs = vg_strncpy( client->username, prop->name, NETWORK_USERNAME_MAX,
k_strncpy_always_add_null );
vg_info( "client #%d changed name to: %s [%s]\n", client_id,
k_nSteamNetworkingSend_Unreliable );
}
else if( tmp->inetmsg_id == k_inetmsg_playeritem ){
- netmsg_playeritem *item = alloca(msg->m_cbSize);
- memcpy( item, msg->m_pData, msg->m_cbSize );
- item->client = client_id;
+ netmsg_playeritem *item = msg->m_pData;
- vg_info( "Client #%u equiped: [%u] %s\n",
- item->client, item->type, item->uid );
+ /* record */
+ struct gameserver_client *client = &gameserver.clients[ client_id ];
- gameserver_send_to_all( client_id, item, msg->m_cbSize,
+ if( item->type == k_addon_type_board ){
+ network_msgstring( item->uid, msg->m_cbSize, sizeof(netmsg_playeritem),
+ client->item_board, ADDON_UID_MAX );
+ }
+ else if( item->type == k_addon_type_player ){
+ network_msgstring( item->uid, msg->m_cbSize, sizeof(netmsg_playeritem),
+ client->item_player, ADDON_UID_MAX );
+ }
+ else {
+ vg_warn( "Client #%d invalid equip type %u\n",
+ client_id, (u32)item->type );
+ return;
+ }
+ vg_info( "Client #%d equiped: [%u] %s\n",
+ item->client, item->type, item->uid );
+
+ /* propogate */
+ netmsg_playeritem *prop = alloca(msg->m_cbSize);
+ memcpy( prop, msg->m_pData, msg->m_cbSize );
+ prop->client = client_id;
+ gameserver_send_to_all( client_id, prop, msg->m_cbSize,
k_nSteamNetworkingSend_Reliable );
}
}
char item_board[ ADDON_UID_MAX ], item_player[ ADDON_UID_MAX ];
}
- clients[ 32 ];
+ clients[ NETWORK_MAX_PLAYERS ];
u8 app_symmetric_key[ k_nSteamEncryptedAppTicketSymmetricKeyLen ];
#include "vg/vg_platform.h"
#define NETWORK_USERNAME_MAX 32
+#define NETWORK_MAX_PLAYERS 20
#include "addon_types.h"
/* 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;
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 );
#include "player.h"
#include "network.h"
+#include "network_common.h"
struct {
struct network_player {
u32 down_bytes;
f32 down_kbs;
}
- list[32];
+ list[ NETWORK_MAX_PLAYERS ];
struct interp_buffer {
/* collect the most recent 6 frames of animation data */
f64 t;
}
- interp_data[32];
+ interp_data[ NETWORK_MAX_PLAYERS ];
m4x3f *final_mtx;
+ struct player_board_pose board_poses[ NETWORK_MAX_PLAYERS ];
u32 up_bytes;
f32 up_kbs, down_kbs;
/* FIXME FIXME FIXME FIXME FIXME */
u32 mtx_size = sizeof(m4x3f)*localplayer_avatar.sk.bone_count;
localplayer.final_mtx = vg_linear_alloc( vg_mem.rtmemory, mtx_size );
- netplayers.final_mtx = vg_linear_alloc( vg_mem.rtmemory, mtx_size*32 );
+ netplayers.final_mtx = vg_linear_alloc( vg_mem.rtmemory,
+ mtx_size*NETWORK_MAX_PLAYERS );
player_model_load( &localplayer.fallback_model, "models/ch_none.mdl" );
player__bind();