diff -r 479911540e17 -r d122b65bdf6f rust/hedgewars-server/src/core/room.rs --- a/rust/hedgewars-server/src/core/room.rs Sat Jan 11 00:44:25 2020 +0300 +++ b/rust/hedgewars-server/src/core/room.rs Sat Jan 11 01:06:41 2020 +0300 @@ -24,13 +24,12 @@ } pub struct GameInfo { - pub teams_in_game: u8, - pub teams_at_start: Vec<(ClientId, TeamInfo)>, + pub original_teams: Vec<(ClientId, TeamInfo)>, pub left_teams: Vec, pub msg_log: Vec, pub sync_msg: Option, pub is_paused: bool, - config: RoomConfig, + original_config: RoomConfig, } impl GameInfo { @@ -40,14 +39,13 @@ msg_log: Vec::new(), sync_msg: None, is_paused: false, - teams_in_game: teams.len() as u8, - teams_at_start: teams, - config, + original_teams: teams, + original_config: config, } } pub fn client_teams(&self, client_id: ClientId) -> impl Iterator + Clone { - client_teams_impl(&self.teams_at_start, client_id) + client_teams_impl(&self.original_teams, client_id) } } @@ -148,7 +146,6 @@ if let Some(info) = &mut self.game_info { info.left_teams.push(team_name.to_string()); - info.teams_in_game -= 1; if let Some(m) = &info.sync_msg { info.msg_log.push(m.clone()); @@ -164,7 +161,7 @@ pub fn set_hedgehogs_number(&mut self, n: u8) -> Vec { let mut names = Vec::new(); let teams = match self.game_info { - Some(ref mut info) => &mut info.teams_at_start, + Some(ref mut info) => &mut info.original_teams, None => &mut self.teams, }; @@ -178,6 +175,12 @@ names } + pub fn teams_in_game(&self) -> Option { + self.game_info + .as_ref() + .map(|info| (info.original_teams.len() - info.left_teams.len()) as u8) + } + pub fn find_team_and_owner_mut(&mut self, f: F) -> Option<(ClientId, &mut TeamInfo)> where F: Fn(&TeamInfo) -> bool, @@ -303,21 +306,21 @@ pub fn active_config(&self) -> &RoomConfig { match self.game_info { - Some(ref info) => &info.config, + Some(ref info) => &info.original_config, None => &self.config, } } pub fn map_config(&self) -> Vec { match self.game_info { - Some(ref info) => info.config.to_map_config(), + Some(ref info) => info.original_config.to_map_config(), None => self.config.to_map_config(), } } pub fn game_config(&self) -> Vec { match self.game_info { - Some(ref info) => info.config.to_game_config(), + Some(ref info) => info.original_config.to_game_config(), None => self.config.to_game_config(), } }