From 614e1fc86570851e897647989836a93d9bff4353 Mon Sep 17 00:00:00 2001 From: fluo10 Date: Sat, 17 May 2025 09:25:53 +0900 Subject: [PATCH] Update menu --- progress-pile-app/src/main.rs | 14 +- progress-pile-app/src/plugins/main_menu.rs | 460 ++++++++++++++++++++- progress-pile-app/src/themes/dark.rs | 7 + progress-pile-app/src/themes/light.rs | 4 + progress-pile-app/src/themes/mod.rs | 12 + 5 files changed, 487 insertions(+), 10 deletions(-) create mode 100644 progress-pile-app/src/themes/dark.rs create mode 100644 progress-pile-app/src/themes/light.rs create mode 100644 progress-pile-app/src/themes/mod.rs diff --git a/progress-pile-app/src/main.rs b/progress-pile-app/src/main.rs index f194b54..477619e 100644 --- a/progress-pile-app/src/main.rs +++ b/progress-pile-app/src/main.rs @@ -1,12 +1,13 @@ mod plugins; +pub mod themes; use bevy::prelude::*; #[derive(Clone, Copy, Default, Eq, PartialEq, Debug, Hash, States)] enum AppState { - #[default] MainView, - Setting, + #[default] + Menu, List, Graph } @@ -39,3 +40,12 @@ fn main() { .run(); } + + + +// Generic system that takes a component as a parameter, and will despawn all entities with that component +fn despawn_screen(to_despawn: Query>, mut commands: Commands) { + for entity in &to_despawn { + commands.entity(entity).despawn(); + } +} \ No newline at end of file diff --git a/progress-pile-app/src/plugins/main_menu.rs b/progress-pile-app/src/plugins/main_menu.rs index 3735ae5..f236aab 100644 --- a/progress-pile-app/src/plugins/main_menu.rs +++ b/progress-pile-app/src/plugins/main_menu.rs @@ -5,15 +5,20 @@ use bevy::{ prelude::*, }; -use super::{ +use crate::{ + despawn_screen, + themes::dark::{self, NORMAL_BUTTON}, DisplayQuality, - GameState, + AppState, Volume, }; #[derive(Clone, Copy, Default, Eq, PartialEq, Debug, Hash, States)] -enum SettingsState { +enum MenuState { Main, + Settings, + SettingsDisplay, + SettingsVolume, #[default] Disabled, } @@ -21,11 +26,450 @@ enum SettingsState { pub fn menu_plugin(app: &mut App) { app .init_state::() - .add_systems(OnEnter(GamsState::Settin), menu_setup) + .add_systems(OnEnter(AppState::Menu), menu_setup) .add_systems(OnEnter(MenuState::Main), main_menu_setup) - .add_systems(OnExit(MenuState::Main), despawn_screen::) - .add_ssytems(OnEnter(MenuState::Settings), settings_menu_setup) + .add_systems(OnExit(MenuState::Main), crate::despawn_screen::) + .add_systems(OnEnter(MenuState::Settings), settings_menu_setup) .add_systems( - OnExit(MenuState::Setting) + OnExit(MenuState::Settings), + crate::despawn_screen:: ) -} \ No newline at end of file + .add_systems(OnEnter(MenuState::SettingsDisplay), display_settings_menu_setup) + .add_systems( + Update, + (setting_button::.run_if(in_state(MenuState::SettingsDisplay))) + ) + .add_systems( + OnExit(MenuState::SettingsDisplay), + despawn_screen:: + ) + .add_systems(OnEnter(MenuState::SettingsVolume), sound_settings_menu_setup) + .add_systems( + Update, + (setting_button::.run_if(in_state(MenuState::SettingsVolume))) + ) + .add_systems( + OnExit(MenuState::SettingsVolume), + despawn_screen:: + ) + .add_systems( + Update, + (menu_action, button_system).run_if(in_state(AppState::Menu)) + ) + + ; +} +#[derive(Component)] +struct OnMainMenuScreen; + +#[derive(Component)] +struct OnSettingsMenuScreen; + +#[derive(Component)] +struct OnDisplaySettingsMenuScreen; + +#[derive(Component)] +struct OnSoundSettingsMenuScreen; + +#[derive(Component)] +struct SelectedOption; + + +#[derive(Component)] +enum MenuButtonAction { + BackToMainView, + BackToMainMenu, + BackToSettings, + Settings, + SettingsDisplay, + SettingsSound, + Quit, +} + +fn button_system( + mut interaction_query: Query<(&Interaction, &mut BackgroundColor, Option<&SelectedOption>),(Changed, With