aboutsummaryrefslogtreecommitdiff
path: root/planetwars-localdev/src/match_runner/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'planetwars-localdev/src/match_runner/mod.rs')
-rw-r--r--planetwars-localdev/src/match_runner/mod.rs37
1 files changed, 36 insertions, 1 deletions
diff --git a/planetwars-localdev/src/match_runner/mod.rs b/planetwars-localdev/src/match_runner/mod.rs
index 2715b96..50b7a3b 100644
--- a/planetwars-localdev/src/match_runner/mod.rs
+++ b/planetwars-localdev/src/match_runner/mod.rs
@@ -3,23 +3,38 @@ mod match_context;
mod pw_match;
use std::{
+ io::Write,
path::PathBuf,
sync::{Arc, Mutex},
};
use match_context::MatchCtx;
use planetwars_rules::PwConfig;
+use serde::{Deserialize, Serialize};
use crate::BotConfig;
use self::match_context::{EventBus, PlayerHandle};
pub struct MatchConfig {
+ pub map_name: String,
pub map_path: PathBuf,
pub log_path: PathBuf,
pub players: Vec<MatchBot>,
}
+#[derive(Serialize, Deserialize)]
+pub struct MatchMeta {
+ pub map_name: String,
+ pub timestamp: chrono::DateTime<chrono::Local>,
+ pub players: Vec<PlayerInfo>,
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct PlayerInfo {
+ pub name: String,
+}
+
pub struct MatchBot {
pub name: String,
pub bot_config: BotConfig,
@@ -48,7 +63,27 @@ pub async fn run_match(config: MatchConfig) {
(player_id, Box::new(handle) as Box<dyn PlayerHandle>)
})
.collect();
- let log_file = std::fs::File::create(config.log_path).expect("could not create log file");
+ let mut log_file = std::fs::File::create(config.log_path).expect("could not create log file");
+
+ // assemble the math meta struct
+ let match_meta = MatchMeta {
+ map_name: config.map_name.clone(),
+ timestamp: chrono::Local::now(),
+ players: config
+ .players
+ .iter()
+ .map(|bot| PlayerInfo {
+ name: bot.name.clone(),
+ })
+ .collect(),
+ };
+ write!(
+ log_file,
+ "{}\n",
+ serde_json::to_string(&match_meta).unwrap()
+ )
+ .unwrap();
+
let match_ctx = MatchCtx::new(event_bus, players, log_file);
let match_state = pw_match::PwMatch::create(match_ctx, pw_config);