This commit is contained in:
ntr 2019-05-29 16:04:25 +10:00
parent 7f422ce8e8
commit ff496cd537

View File

@ -33,6 +33,7 @@ enum InstancePhase {
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)] #[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
enum Format { enum Format {
Standard, Standard,
RoundRobin,
} }
#[derive(Debug,Clone,Serialize,Deserialize)] #[derive(Debug,Clone,Serialize,Deserialize)]
@ -45,18 +46,21 @@ struct Round {
#[derive(Debug,Clone,Serialize,Deserialize)] #[derive(Debug,Clone,Serialize,Deserialize)]
pub struct Instance { pub struct Instance {
id: Uuid, id: Uuid,
pub name: String,
players: Vec<Player>, players: Vec<Player>,
phase: InstancePhase,
rounds: Vec<Vec<Round>>, rounds: Vec<Vec<Round>>,
open: bool, open: bool,
max_players: usize, max_players: usize,
max_rounds: usize, max_rounds: usize,
password: Option<String>, password: Option<String>,
pub name: String,
format: Format, phase: InstancePhase,
phase_end: DateTime<Utc>, phase_end: DateTime<Utc>,
phase_start: DateTime<Utc>, phase_start: DateTime<Utc>,
format: Format,
} }
impl Instance { impl Instance {
@ -74,7 +78,7 @@ impl Instance {
phase_end: Utc::now(), phase_end: Utc::now(),
phase_start: Utc::now(), phase_start: Utc::now(),
format: Format::Standard, format: Format::RoundRobin,
} }
} }
@ -145,12 +149,8 @@ impl Instance {
Ok(self) Ok(self)
} }
fn set_max_rounds(mut self, rounds: usize) -> Result<Instance, Error> { fn set_format(mut self, format: Format) -> Result<Instance, Error> {
if rounds == 0 { self.format = format;
return Err(err_msg("max rounds must be nonzero"));
}
self.max_rounds = rounds;
Ok(self) Ok(self)
} }
@ -311,7 +311,8 @@ impl Instance {
fn win_condition(&self) -> bool { fn win_condition(&self) -> bool {
match self.format { match self.format {
Format::Standard => self.players.iter().any(|p| p.score.wins > 2) Format::Standard => self.players.iter().any(|p| p.score.wins > 2),
Format::RoundRobin => self.rounds.len() == self.players.len() / 2,
} }
} }
@ -753,7 +754,7 @@ mod tests {
fn instance_pve_test() { fn instance_pve_test() {
let mut instance = Instance::new() let mut instance = Instance::new()
.set_max_players(16).expect("unable to set max players") .set_max_players(16).expect("unable to set max players")
.set_max_rounds(2).expect("max rounds failure") .set_format(Format::RoundRobin).expect("format failure")
.add_bots(); .add_bots();
let player_account = Uuid::new_v4(); let player_account = Uuid::new_v4();
@ -768,12 +769,12 @@ mod tests {
assert_eq!(instance.phase, InstancePhase::Finished); assert_eq!(instance.phase, InstancePhase::Finished);
assert_eq!(instance.rounds[0].len(), 8); assert_eq!(instance.rounds[0].len(), 8);
assert_eq!(instance.rounds.len(), 2); assert_eq!(instance.rounds.len(), 8);
} }
#[test] #[test]
fn instance_bot_vbox_test() { fn instance_bot_vbox_test() {
let instance = Instance::new(); let _instance = Instance::new();
let player_account = Uuid::new_v4(); let player_account = Uuid::new_v4();
let constructs = instance_mobs(player_account); let constructs = instance_mobs(player_account);
let _player = Player::new(player_account, &"test".to_string(), constructs).set_bot(true); let _player = Player::new(player_account, &"test".to_string(), constructs).set_bot(true);
@ -823,8 +824,8 @@ mod tests {
#[test] #[test]
fn instance_upkeep_test() { fn instance_upkeep_test() {
let mut instance = Instance::new() let mut instance = Instance::new()
.set_max_players(2) .set_max_players(2).expect("could not create instance")
.expect("could not create instance"); .set_format(Format::Standard).expect("format err");
let player_account = Uuid::new_v4(); let player_account = Uuid::new_v4();
let constructs = instance_mobs(player_account); let constructs = instance_mobs(player_account);