aboutsummaryrefslogtreecommitdiff
path: root/planetwars-matchrunner/src
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-05-28 11:22:44 +0200
committerIlion Beyst <ilion.beyst@gmail.com>2022-05-28 11:22:44 +0200
commit80c60ac69c9b0d86a4536eeac82cf266eb4430bc (patch)
treebc2ac0c803be27395c0297123f0794e1b8904676 /planetwars-matchrunner/src
parent643c0e7706ab927ef270e4a5b62ada0c38b651b9 (diff)
parentfadcda850332f8adb0a4382da9f04f78db3f6d1a (diff)
downloadplanetwars.dev-80c60ac69c9b0d86a4536eeac82cf266eb4430bc.tar.xz
planetwars.dev-80c60ac69c9b0d86a4536eeac82cf266eb4430bc.zip
Merge branch 'feature/leaderboard'
Diffstat (limited to 'planetwars-matchrunner/src')
-rw-r--r--planetwars-matchrunner/src/lib.rs19
-rw-r--r--planetwars-matchrunner/src/pw_match.rs6
2 files changed, 19 insertions, 6 deletions
diff --git a/planetwars-matchrunner/src/lib.rs b/planetwars-matchrunner/src/lib.rs
index b7a9e53..5aff793 100644
--- a/planetwars-matchrunner/src/lib.rs
+++ b/planetwars-matchrunner/src/lib.rs
@@ -38,7 +38,6 @@ pub struct PlayerInfo {
}
pub struct MatchPlayer {
- pub name: String,
pub bot_spec: Box<dyn BotSpec>,
}
@@ -52,7 +51,11 @@ pub trait BotSpec: Send + Sync {
) -> Box<dyn PlayerHandle>;
}
-pub async fn run_match(config: MatchConfig) {
+pub struct MatchOutcome {
+ pub winner: Option<usize>,
+}
+
+pub async fn run_match(config: MatchConfig) -> MatchOutcome {
let pw_config = PwConfig {
map_file: config.map_path,
max_turns: 100,
@@ -103,8 +106,18 @@ pub async fn run_match(config: MatchConfig) {
// )
// .unwrap();
- let match_state = pw_match::PwMatch::create(match_ctx, pw_config);
+ let mut match_state = pw_match::PwMatch::create(match_ctx, pw_config);
match_state.run().await;
+
+ let final_state = match_state.match_state.state();
+ let survivors = final_state.living_players();
+ let winner = if survivors.len() == 1 {
+ Some(survivors[0])
+ } else {
+ None
+ };
+
+ MatchOutcome { winner }
}
// writing this as a closure causes lifetime inference errors
diff --git a/planetwars-matchrunner/src/pw_match.rs b/planetwars-matchrunner/src/pw_match.rs
index c9a7f7b..f5b803c 100644
--- a/planetwars-matchrunner/src/pw_match.rs
+++ b/planetwars-matchrunner/src/pw_match.rs
@@ -24,8 +24,8 @@ pub struct MatchConfig {
}
pub struct PwMatch {
- match_ctx: MatchCtx,
- match_state: PlanetWars,
+ pub match_ctx: MatchCtx,
+ pub match_state: PlanetWars,
}
impl PwMatch {
@@ -39,7 +39,7 @@ impl PwMatch {
}
}
- pub async fn run(mut self) {
+ pub async fn run(&mut self) {
while !self.match_state.is_finished() {
let player_messages = self.prompt_players().await;