gameServer2/src/server/room.rs
changeset 13478 d79795acaa73
parent 13477 f748a72432f2
child 13520 1ee192f13456
equal deleted inserted replaced
13477:f748a72432f2 13478:d79795acaa73
     1 use std::{iter};
     1 use std::{iter};
     2 use server::{
     2 use server::{
     3     coretypes::{TeamInfo, GameCfg, GameCfg::*},
     3     coretypes::{ClientId, RoomId, TeamInfo, GameCfg, GameCfg::*, Voting},
     4     client::{ClientId, HWClient}
     4     client::{HWClient}
     5 };
     5 };
     6 
     6 
     7 const MAX_HEDGEHOGS_IN_ROOM: u8 = 48;
     7 const MAX_HEDGEHOGS_IN_ROOM: u8 = 48;
     8 pub type RoomId = usize;
       
     9 
     8 
    10 #[derive(Clone)]
     9 #[derive(Clone)]
    11 struct Ammo {
    10 struct Ammo {
    12     name: String,
    11     name: String,
    13     settings: Option<String>
    12     settings: Option<String>
   120     pub default_hedgehog_number: u8,
   119     pub default_hedgehog_number: u8,
   121     pub team_limit: u8,
   120     pub team_limit: u8,
   122     pub ready_players_number: u8,
   121     pub ready_players_number: u8,
   123     pub teams: Vec<(ClientId, TeamInfo)>,
   122     pub teams: Vec<(ClientId, TeamInfo)>,
   124     config: RoomConfig,
   123     config: RoomConfig,
       
   124     pub voting: Option<Voting>,
   125     pub game_info: Option<GameInfo>
   125     pub game_info: Option<GameInfo>
   126 }
   126 }
   127 
   127 
   128 impl HWRoom {
   128 impl HWRoom {
   129     pub fn new(id: RoomId) -> HWRoom {
   129     pub fn new(id: RoomId) -> HWRoom {
   139             default_hedgehog_number: 4,
   139             default_hedgehog_number: 4,
   140             team_limit: 8,
   140             team_limit: 8,
   141             ready_players_number: 0,
   141             ready_players_number: 0,
   142             teams: Vec::new(),
   142             teams: Vec::new(),
   143             config: RoomConfig::new(),
   143             config: RoomConfig::new(),
       
   144             voting: None,
   144             game_info: None
   145             game_info: None
   145         }
   146         }
   146     }
   147     }
   147 
   148 
   148     pub fn hedgehogs_number(&self) -> u8 {
   149     pub fn hedgehogs_number(&self) -> u8 {
   169 
   170 
   170     pub fn remove_team(&mut self, name: &str) {
   171     pub fn remove_team(&mut self, name: &str) {
   171         if let Some(index) = self.teams.iter().position(|(_, t)| t.name == name) {
   172         if let Some(index) = self.teams.iter().position(|(_, t)| t.name == name) {
   172             self.teams.remove(index);
   173             self.teams.remove(index);
   173         }
   174         }
       
   175     }
       
   176 
       
   177     pub fn set_hedgehogs_number(&mut self, n: u8) -> Vec<String> {
       
   178         let mut names = Vec::new();
       
   179         let teams = match self.game_info {
       
   180             Some(ref mut info) => &mut info.teams_at_start,
       
   181             None => &mut self.teams
       
   182         };
       
   183 
       
   184         if teams.len() as u8 * n <= MAX_HEDGEHOGS_IN_ROOM {
       
   185             for (_, team) in teams.iter_mut() {
       
   186                 team.hedgehogs_number = n;
       
   187                 names.push(team.name.clone())
       
   188             };
       
   189             self.default_hedgehog_number = n;
       
   190         }
       
   191         names
   174     }
   192     }
   175 
   193 
   176     pub fn find_team_and_owner_mut<F>(&mut self, f: F) -> Option<(ClientId, &mut TeamInfo)>
   194     pub fn find_team_and_owner_mut<F>(&mut self, f: F) -> Option<(ClientId, &mut TeamInfo)>
   177         where F: Fn(&TeamInfo) -> bool {
   195         where F: Fn(&TeamInfo) -> bool {
   178         self.teams.iter_mut().find(|(_, t)| f(t)).map(|(id, t)| (*id, t))
   196         self.teams.iter_mut().find(|(_, t)| f(t)).map(|(id, t)| (*id, t))