/************************************************************************** ... **************************************************************************/ void handle_game_info(struct packet_game_info *pinfo) { int i; game.gold=pinfo->gold; game.tech=pinfo->tech; game.techlevel=pinfo->techlevel; game.skill_level=pinfo->skill_level; game.timeout=pinfo->timeout; game.end_year=pinfo->end_year; game.year=pinfo->year; game.min_players=pinfo->min_players; game.max_players=pinfo->max_players; game.nplayers=pinfo->nplayers; game.globalwarming=pinfo->globalwarming; game.heating=pinfo->heating; if(client_state!=CLIENT_GAME_RUNNING_STATE) { game.player_idx=pinfo->player_idx; game.player_ptr=&game.players[game.player_idx]; } for(i=0; i<A_LAST; i++) game.global_advances[i]=pinfo->global_advances[i]; for(i=0; i<B_LAST; i++) game.global_wonders[i]=pinfo->global_wonders[i]; if(client_state!=CLIENT_GAME_RUNNING_STATE) { if(client_state==CLIENT_SELECT_RACE_STATE) popdown_races_dialog(); } update_unit_focus(); }
/************************************************************************* Close socket and cleanup. This one doesn't print a message, so should do so before-hand if necessary. **************************************************************************/ static void close_socket_nomessage(struct connection *pc) { if (with_ggz || in_ggz) { remove_ggz_input(); } if (in_ggz) { gui_ggz_embed_leave_table(); } connection_common_close(pc); remove_net_input(); popdown_races_dialog(); close_connection_dialog(); set_client_state(C_S_DISCONNECTED); }
/************************************************************************** ... **************************************************************************/ void handle_select_race(struct packet_generic_integer *packet) { if(client_state==CLIENT_SELECT_RACE_STATE) { if(packet->value==-1) { client_state=CLIENT_WAITING_FOR_GAME_START_STATE; popdown_races_dialog(); } else races_toggles_set_sensitive(packet->value); } else if(client_state==CLIENT_PRE_GAME_STATE) { client_state=CLIENT_SELECT_RACE_STATE; popup_races_dialog(); races_toggles_set_sensitive(packet->value); } else log(LOG_DEBUG, "got a select race packet in an incompatible state"); }
/************************************************************************** ... **************************************************************************/ void handle_game_state(struct packet_generic_integer *packet) { if(client_state==CLIENT_SELECT_RACE_STATE && packet->value==CLIENT_GAME_RUNNING_STATE) { popdown_races_dialog(); } client_state=packet->value; if(client_state==CLIENT_GAME_RUNNING_STATE) { refresh_overview_canvas(); refresh_overview_viewrect(); player_set_unit_focus_status(game.player_ptr); update_unit_focus(); update_unit_info_label(get_unit_in_focus()); if(get_unit_in_focus()) center_tile_mapcanvas(get_unit_in_focus()->x, get_unit_in_focus()->y); } }