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)) |