Persistent flags sync

This commit is contained in:
IQuant 2024-08-21 21:15:22 +03:00
parent ba7a2abb56
commit e1145706e0
9 changed files with 77 additions and 2 deletions

View file

@ -123,6 +123,22 @@ impl ModmanagerSettings {
path.push("quant.ew");
path
}
pub fn get_progress(&self) -> Option<Vec<String>> {
let flags_path = self
.game_save_path
.as_ref()?
.join("save00/persistent/flags/");
Some(
fs::read_dir(&flags_path)
.inspect_err(|e| warn!("Could not read progress: read_dir failed: {e}"))
.ok()?
.filter_map(|entry| entry.ok())
.filter_map(|entry| entry.file_name().into_string().ok())
.collect(),
)
.inspect(|progress: &Vec<String>| info!("Found {} progress entries", progress.len()))
}
}
impl Modmanager {

View file

@ -68,6 +68,7 @@ pub struct GameSettings {
game_mode: GameMode,
friendly_fire: bool,
enemy_sync_interval: u32,
progress: Vec<String>,
}
impl Default for GameSettings {
@ -85,6 +86,7 @@ impl Default for GameSettings {
game_mode: GameMode::SharedHealth,
friendly_fire: false,
enemy_sync_interval: 2,
progress: Vec::new(),
}
}
}
@ -392,6 +394,7 @@ impl App {
} else {
info!("Using constant seed: {}", settings.seed);
}
settings.progress = self.modmanager_settings.get_progress().unwrap_or_default();
*netman.pending_settings.lock().unwrap() = settings.clone();
netman.accept_local.store(true, Ordering::SeqCst);
}

View file

@ -431,6 +431,8 @@ impl NetManager {
state.try_ws_write_option("game_mode", settings.game_mode);
state.try_ws_write_option("friendly_fire", settings.friendly_fire);
state.try_ws_write_option("enemy_sync_interval", settings.enemy_sync_interval);
let progress = settings.progress.join(",");
state.try_ws_write_option("progress", progress.as_str());
state.try_ws_write(ws_encode_proxy("ready", ""));
// TODO? those are currently ignored by mod