diff --git a/game/src/scenes/main_menu_screen.rs b/game/src/scenes/main_menu_screen.rs index d8fa2c4..8988a90 100644 --- a/game/src/scenes/main_menu_screen.rs +++ b/game/src/scenes/main_menu_screen.rs @@ -1,6 +1,6 @@ -use std::ops::{Div, Sub}; +use std::{collections::hash_map::Iter, iter::Enumerate, ops::{Div, Sub}}; -use chrono::{DateTime, Utc}; +use chrono::{DateTime, Duration, Utc}; use dirty_fsm::{Action, ActionFlag}; use discord_sdk::activity::{ActivityBuilder, Assets}; use pkg_version::pkg_version_major; @@ -27,6 +27,7 @@ pub struct MainMenuScreen { is_htp_pressed: bool, //Is how to play button pressed is_options_pressed: bool, //Is options button pressed is_quit_pressed: bool, //Is quit button pressed + level_times: Option<Vec<(usize, (usize, i64))>> } impl MainMenuScreen { @@ -37,6 +38,7 @@ impl MainMenuScreen { is_htp_pressed: false, is_options_pressed: false, is_quit_pressed: false, + level_times: None } } } @@ -70,6 +72,9 @@ impl Action<Scenes, ScreenError, GameContext> for MainMenuScreen { trace!("execute() called on MainMenuScreen"); self.render_screen_space(&mut context.renderer.borrow_mut(), &context.config); + + self.level_times = Some(context.player_progress.level_best_times.iter().map(|x| (*x.0, *x.1)).collect::<Vec<(_,_)>>().iter().map(|x| *x).enumerate().collect()); + if self.is_start_pressed { context .flag_send @@ -128,6 +133,8 @@ impl ScreenSpaceRender for MainMenuScreen { config.colors.white, ); + + // Calculate the logo position let screen_size = raylib.get_screen_size(); @@ -280,6 +287,28 @@ impl ScreenSpaceRender for MainMenuScreen { Color::WHITE, ); }; + + // Best Times + raylib.draw_text( + "BEST TIMES", + screen_size.x as i32 - 200, + 40, + 25, + Color::DARKGRAY, + ); + + if let Some(times) = &self.level_times{ + for (i, (level, time)) in times.iter() { + let time = Duration::seconds(*time); + raylib.draw_text( + &format!("Lvl {} {}:{}", level + 1, time.num_minutes(), time.num_seconds() % 60), + screen_size.x as i32 - 200, + 100 + (25 * (*i as i32)), + 20, + Color::DARKGRAY, + ); + } + } self.is_quit_pressed = mouse_pressed && hovering_quit; // for diff --git a/game/src/scenes/win_screen.rs b/game/src/scenes/win_screen.rs index 2f2dca2..b8c2377 100644 --- a/game/src/scenes/win_screen.rs +++ b/game/src/scenes/win_screen.rs @@ -69,6 +69,7 @@ impl Action<Scenes, ScreenError, GameContext> for WinScreen { .flag_send .send(Some(ControlFlag::SoundTrigger("button-press".to_string()))) .unwrap(); + context.flag_send.send(Some(ControlFlag::SwitchLevel(0))).unwrap(); Ok(ActionFlag::SwitchState(Scenes::MainMenuScreen)) } else { Ok(ActionFlag::Continue) @@ -79,6 +80,7 @@ impl Action<Scenes, ScreenError, GameContext> for WinScreen { debug!("Finished WinScreen"); self.is_menu_pressed = false; self.counter = 0; + Ok(()) } }