player->subsystem = k_player_subsystem_invalid;
}
-static void player_remote_packet( SteamNetworkingMessage_t *msg ){
+static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){
netmsg_blank *tmp = msg->m_pData;
if( tmp->inetmsg_id == k_inetmsg_playerjoin ){
netmsg_playerjoin *playerjoin = msg->m_pData;
+ if( !packet_minsize( msg, sizeof(*playerjoin) )) return;
if( playerjoin->index < vg_list_size(netplayers.list) ){
struct network_player *player = &netplayers.list[ playerjoin->index ];
/* TODO: interpret the uids */
player->board_view_slot = 0;
player->playermodel_view_slot = 0;
+
+ vg_strncpy( playerjoin->username, player->username,
+ sizeof(player->username), k_strncpy_always_add_null );
+
+ vg_info( "#%u joined with name: %s\n", player->username );
}
else {
vg_error( "inetmsg_playerjoin: player index out of range\n" );
}
else if( tmp->inetmsg_id == k_inetmsg_playerleave ){
netmsg_playerleave *playerleave = msg->m_pData;
+ if( !packet_minsize( msg, sizeof(*playerleave) )) return;
if( playerleave->index < vg_list_size(netplayers.list) ){
struct network_player *player = &netplayers.list[ playerleave->index ];
player_remote_unwatch( player );
player->active = 0;
+ vg_info( "player leave (%d)\n", playerleave->index );
+ }
+ else {
+ vg_error( "inetmsg_playerleave: player index out of range\n" );
+ }
+ }
+ else if( tmp->inetmsg_id == k_inetmsg_playerusername ){
+ netmsg_playerusername *update = msg->m_pData;
+ if( !packet_minsize( msg, sizeof(*update) )) return;
+
+ if( update->index < vg_list_size(netplayers.list) ){
+ struct network_player *player = &netplayers.list[ update->index ];
+ vg_strncpy( update->username, player->username,
+ sizeof(player->username), k_strncpy_always_add_null );
+
+ vg_info( "#%u changed username: %s\n", player->username );
}
else {
vg_error( "inetmsg_playerleave: player index out of range\n" );
struct { enum ESteamNetworkingConnectionState state; const char *str; }
states[] = {
{ k_ESteamNetworkingConnectionState_None, "None" },
- { k_ESteamNetworkingConnectionState_Connecting, "Connecting" },
+ { k_ESteamNetworkingConnectionState_Connecting,
+ (const char *[]){"Connecting -",
+ "Connecting /",
+ "Connecting |",
+ "Connecting \\",
+ }[(u32)(vg.time_real/0.25) & 0x3 ] },
{ k_ESteamNetworkingConnectionState_FindingRoute, "Finding Route" },
{ k_ESteamNetworkingConnectionState_Connected, "Connected" },
{ k_ESteamNetworkingConnectionState_ClosedByPeer, "Closed by peer" },
ui_info( panel, buf );
ui_info( panel, "---------------------" );
- for( u32 i=0; i<vg_list_size(netplayers.list); i++ ){
- struct network_player *player = &netplayers.list[i];
- if( player->active ){
- const char *sysname = "invalid";
+ if( network_client.state == k_ESteamNetworkingConnectionState_Connected ){
+ ui_info( panel, "#-1: localplayer" );
+ for( u32 i=0; i<vg_list_size(netplayers.list); i++ ){
+ struct network_player *player = &netplayers.list[i];
+ if( player->active ){
+ const char *sysname = "invalid";
- if( (player->subsystem >= 0) &&
- (player->subsystem < k_player_subsystem_max) ){
- sysname = player_subsystems[ player->subsystem ]->name;
+ if( (player->subsystem >= 0) &&
+ (player->subsystem < k_player_subsystem_max) ){
+ sysname = player_subsystems[ player->subsystem ]->name;
+ }
+ snprintf( buf, 512, "#%u: %s [%s]", i, player->username, sysname );
+ ui_info( panel, buf );
}
- snprintf( buf, 512, "#%u: %s [%s]", i, player->username, sysname );
- ui_info( panel, buf );
}
}
+ else {
+ ui_info( panel, "offline" );
+ }
}