First levels v0.1.0

This commit is contained in:
2026-05-21 17:12:23 +03:00
parent aa9cb6ea53
commit 19e39d220d
9 changed files with 749 additions and 22 deletions

View File

@@ -0,0 +1,38 @@
//! Player progress saved to `./.gameplay/state.yaml`.
use anyhow::Result;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use crate::levels::Difficulty;
#[derive(Default, Serialize, Deserialize)]
pub struct Progress {
pub tier: Option<Difficulty>,
pub completed: Vec<u8>,
pub current_level: u8,
pub current_seed: u64,
pub attempts: u32,
}
pub fn save_path() -> PathBuf {
PathBuf::from(".gameplay/state.yaml")
}
pub fn load() -> Result<Progress> {
let path = save_path();
if !path.exists() {
return Ok(Progress::default());
}
Ok(serde_yaml::from_str(&std::fs::read_to_string(&path)?)?)
}
pub fn save(progress: &Progress) -> Result<()> {
let path = save_path();
// First-run safeguard: `.gameplay/` won't exist yet.
if let Some(dir) = path.parent() {
std::fs::create_dir_all(dir)?;
}
std::fs::write(&path, serde_yaml::to_string(progress)?)?;
Ok(())
}