/* * This file is part of sdbclient * Copyright (C) 2022 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use bevy::{app::AppExit, prelude::*}; use crate::cfg::CfgUser; use crate::{despawn_screen, GameState}; mod mainmenuscreen; use mainmenuscreen::*; mod settingsmenuscreen; use settingsmenuscreen::*; mod settingsdisplayscreen; use settingsdisplayscreen::*; mod settingsaudioscreen; use settingsaudioscreen::*; mod settingsmiscscreen; use settingsmiscscreen::*; mod accountscreenloggedout; use accountscreenloggedout::*; mod accountscreenloggedin; use accountscreenloggedin::*; mod accountloginui; use accountloginui::*; mod accountregisterui; use accountregisterui::*; const TEXT_COLOR: Color = Color::rgb(0.9, 0.9, 0.9); pub struct MenuPlugin; impl Plugin for MenuPlugin { fn build(&self, app: &mut App) { app. // Start with no menu. The menu is loaded when the GameState::MainMenu is entered. add_state(MenuState::None) .add_system_set(SystemSet::on_enter(GameState::MainMenu).with_system(menu_setup)) // Systems for main menu screen .add_system_set(SystemSet::on_enter(MenuState::Main).with_system(main_menu_setup)) .add_system_set(SystemSet::on_exit(MenuState::Main).with_system(despawn_screen::)) // Systems for settings menu screen .add_system_set(SystemSet::on_enter(MenuState::Settings).with_system(settings_menu_setup)) .add_system_set(SystemSet::on_exit(MenuState::Settings).with_system(despawn_screen::)) // Systems for settings display screen .add_system_set(SystemSet::on_enter(MenuState::SettingsDisplay).with_system(settings_display_setup)) .add_system_set(SystemSet::on_exit(MenuState::SettingsDisplay).with_system(despawn_screen::)) // Systems for settings audio screen .add_system_set(SystemSet::on_enter(MenuState::SettingsAudio).with_system(settings_audio_setup)) .add_system_set(SystemSet::on_exit(MenuState::SettingsAudio).with_system(despawn_screen::)) // Systems for settings misc screen .add_system_set(SystemSet::on_enter(MenuState::SettingsMisc).with_system(settings_misc_setup)) .add_system_set(SystemSet::on_exit(MenuState::SettingsMisc).with_system(despawn_screen::)) // Systems for account loggedout screen .add_system_set(SystemSet::on_enter(MenuState::AccountLoggedOut).with_system(account_loggedout_setup)) .add_system_set(SystemSet::on_exit(MenuState::AccountLoggedOut).with_system(despawn_screen::)) // Systems for account loggedin screen .add_system_set(SystemSet::on_enter(MenuState::AccountLoggedIn).with_system(account_loggedin_setup)) .add_system_set(SystemSet::on_exit(MenuState::AccountLoggedIn).with_system(despawn_screen::)) // Account login and register systems .add_system_set(SystemSet::on_update(MenuState::AccountLogin).with_system(account_login_ui)) .add_system_set(SystemSet::on_update(MenuState::AccountRegister).with_system(account_register_ui)) // Common systems .add_system_set(SystemSet::on_update(GameState::MainMenu).with_system(menu_action).with_system(button_system)); } } /// Menu State #[derive(Clone, Eq, PartialEq, Debug, Hash)] pub enum MenuState { None, Main, Settings, SettingsDisplay, SettingsAudio, SettingsMisc, AccountLoggedIn, AccountLoggedOut, AccountLogin, AccountRegister, } /// Tag component for tagging entities on account screen #[derive(Component)] struct OnAccountScreen; /// Tag component for tagging entities on login screen #[derive(Component)] struct OnLoginScreen; /// Tag component for tagging entities on register screen #[derive(Component)] struct OnRegisterScreen; const NORMAL_BUTTON: Color = Color::rgb(0.15, 0.15, 0.15); const HOVERED_BUTTON: Color = Color::rgb(0.25, 0.25, 0.25); const HOVERED_PRESSED_BUTTON: Color = Color::rgb(0.25, 0.65, 0.25); const PRESSED_BUTTON: Color = Color::rgb(0.35, 0.75, 0.35); /// Tag component for tagging currently selected settings tab #[derive(Component)] struct SelectedSettingsTab; /// All button actions #[derive(Component)] enum MenuButtonAction { Play, Settings, SettingsDisplay, SettingsAudio, SettingsMisc, Account, AccountLogin, AccountRegister, BackToMainMenu, BackToSettings, Exit, } fn menu_action( interaction_query: Query< (&Interaction, &MenuButtonAction), (Changed, With