From 17049c7fa96ca5e4852aa534e2125a60379ca2ad Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 3 Oct 2021 12:15:44 -0400 Subject: [PATCH] rm savegame --- game/src/context.rs | 5 +++-- game/src/lib.rs | 6 ++++++ game/src/scenes/ingame_scene/mod.rs | 11 ++++++++++- savegame.json | 1 - 4 files changed, 19 insertions(+), 4 deletions(-) delete mode 100644 savegame.json diff --git a/game/src/context.rs b/game/src/context.rs index a27eb26..b08f8e8 100644 --- a/game/src/context.rs +++ b/game/src/context.rs @@ -1,6 +1,6 @@ use std::{cell::RefCell, sync::mpsc::Sender}; -use chrono::{DateTime, Utc}; +use chrono::{DateTime, Duration, Utc}; use discord_sdk::activity::ActivityBuilder; use crate::{progress::ProgressData, utilities::non_ref_raylib::HackedRaylibHandle, GameConfig}; @@ -10,7 +10,8 @@ pub enum ControlFlag { Quit, SwitchLevel(usize), UpdateLevelStart(DateTime), - SaveProgress + SaveProgress, + MaybeUpdateHighScore(usize, Duration) } #[derive(Debug)] diff --git a/game/src/lib.rs b/game/src/lib.rs index f1cb87f..31aee85 100644 --- a/game/src/lib.rs +++ b/game/src/lib.rs @@ -335,6 +335,12 @@ pub async fn game_begin(game_config: &mut GameConfig) -> Result<(), Box { context.as_mut().player_progress.save(); } + context::ControlFlag::MaybeUpdateHighScore(level, time) => { + context + .as_mut() + .player_progress + .maybe_write_new_time(level, &time); + } } } } diff --git a/game/src/scenes/ingame_scene/mod.rs b/game/src/scenes/ingame_scene/mod.rs index 3645217..7762dc1 100644 --- a/game/src/scenes/ingame_scene/mod.rs +++ b/game/src/scenes/ingame_scene/mod.rs @@ -136,6 +136,16 @@ impl Action for InGameScreen { // Check if the player won let cur_level = self.levels.get(context.current_level).unwrap(); if self.player.position.x > cur_level.zones.win.x { + // Save the current time + let elapsed = Utc::now() - self.level_switch_timestamp; + context + .flag_send + .send(Some(ControlFlag::MaybeUpdateHighScore( + self.current_level_idx, + elapsed, + ))) + .unwrap(); + // Save the progress context .flag_send @@ -152,7 +162,6 @@ impl Action for InGameScreen { .send(Some(ControlFlag::SwitchLevel(self.current_level_idx + 1))) .unwrap(); - // TODO: This is where the timer should reset and publish state return Ok(ActionFlag::SwitchState(Scenes::NextLevelScreen)); } } diff --git a/savegame.json b/savegame.json deleted file mode 100644 index cdcc103..0000000 --- a/savegame.json +++ /dev/null @@ -1 +0,0 @@ -{"level_best_times":{}} \ No newline at end of file