From 100c9ffb2822ae3646c7ed39496a1ac27ca741c7 Mon Sep 17 00:00:00 2001 From: Jonni Liljamo Date: Mon, 30 Jan 2023 14:05:41 +0200 Subject: [PATCH] feat(sdbclient): new menu UI --- sdbclient/assets/ui.ess | 6 + sdbclient/src/plugins/menu/mainmenuscreen.rs | 137 ++++++++----------- sdbclient/src/plugins/menu/mod.rs | 28 ++-- 3 files changed, 76 insertions(+), 95 deletions(-) diff --git a/sdbclient/assets/ui.ess b/sdbclient/assets/ui.ess index 1d66f3b..373ae81 100644 --- a/sdbclient/assets/ui.ess +++ b/sdbclient/assets/ui.ess @@ -18,6 +18,12 @@ color: #E6E6E6; } +.mainmenutitle { + font-size: 80; + margin: 50px; + color: #E6E6E6; +} + .menubutton { width: 200px; height: 65px; diff --git a/sdbclient/src/plugins/menu/mainmenuscreen.rs b/sdbclient/src/plugins/menu/mainmenuscreen.rs index 2156ca3..a911f0b 100644 --- a/sdbclient/src/plugins/menu/mainmenuscreen.rs +++ b/sdbclient/src/plugins/menu/mainmenuscreen.rs @@ -1,92 +1,75 @@ /* * This file is part of sdbclient - * Copyright (C) 2022 Jonni Liljamo + * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ -use bevy::{ - prelude::*, - ui::{JustifyContent, Size, Style, Val}, -}; +use bevy::{app::AppExit, prelude::*}; +use iyes_loopless::prelude::*; -use crate::constants::TEXT_COLOR; +use belly::prelude::*; -use super::{MenuButtonAction, NORMAL_BUTTON}; +use crate::cfg::CfgUser; -/// Tag component for tagging entities on menu screen -#[derive(Component)] -pub struct OnMainMenuScreen; +use super::MenuState; -pub fn main_menu_setup(mut commands: Commands, asset_server: Res) { - let font = asset_server.load("fonts/FiraMono-Regular.ttf"); +pub(super) struct ToAccountEvent; +pub(super) struct ExitEvent; - let button_style = Style { - size: Size::new(Val::Px(250.), Val::Px(65.)), - margin: UiRect::all(Val::Px(20.)), - justify_content: JustifyContent::Center, - align_items: AlignItems::Center, - ..Default::default() - }; - - let button_text_style = TextStyle { - font: font.clone(), - font_size: 40.0, - color: TEXT_COLOR, - }; +pub(super) fn main_menu_setup(mut commands: Commands) { + // TODO: Change the title to a fancy image logo thingy + commands.add(eml! { + +
+ + "Deck Builder" + + + + + +
+ + }); +} - commands - .spawn(( - NodeBundle { - style: Style { - size: Size::new(Val::Percent(100.), Val::Percent(100.)), - align_items: AlignItems::Center, - justify_content: JustifyContent::Center, - flex_direction: FlexDirection::Column, - ..Default::default() - }, - ..Default::default() - }, - OnMainMenuScreen, - )) - .with_children(|parent| { - // Game title, currently text - // TODO: Change to a fancy image logo - parent.spawn( - TextBundle::from_section( - "Deck Builder", - TextStyle { - font: font.clone(), - font_size: 80.0, - color: TEXT_COLOR, - }, - ) - .with_style(Style { - margin: UiRect::all(Val::Px(50.)), - ..Default::default() - }), - ); +pub(super) fn handle_to_account_event( + mut events: EventReader, + mut commands: Commands, + cfg_user: Res, +) { + for _event in events.iter() { + if cfg_user.logged_in { + commands.insert_resource(NextState(MenuState::AccountLoggedIn)) + } else { + commands.insert_resource(NextState(MenuState::AccountLoggedOut)) + } + } +} - // Main menu buttons - for (action, text) in [ - (MenuButtonAction::Play, "Play"), - (MenuButtonAction::Account, "Account"), - (MenuButtonAction::Settings, "Settings"), - (MenuButtonAction::Exit, "Exit"), - ] { - parent - .spawn(( - ButtonBundle { - style: button_style.clone(), - background_color: NORMAL_BUTTON.into(), - ..Default::default() - }, - action, - )) - .with_children(|parent| { - parent.spawn(TextBundle::from_section(text, button_text_style.clone())); - }); - } - }); +pub(super) fn handle_exit_event( + mut events: EventReader, + mut app_exit_event_writer: EventWriter, +) { + for _event in events.iter() { + app_exit_event_writer.send(AppExit); + } } diff --git a/sdbclient/src/plugins/menu/mod.rs b/sdbclient/src/plugins/menu/mod.rs index daaca66..c56b45a 100644 --- a/sdbclient/src/plugins/menu/mod.rs +++ b/sdbclient/src/plugins/menu/mod.rs @@ -52,7 +52,16 @@ impl Plugin for MenuPlugin { .add_enter_system(GameState::MainMenu, menu_setup) // Systems for main menu screen .add_enter_system(MenuState::Main, main_menu_setup) - .add_exit_system(MenuState::Main, despawn_screen::) + .add_exit_system(MenuState::Main, remove_ui) + .add_event::() + .add_event::() + .add_system_set( + ConditionSet::new() + .run_in_state(MenuState::Main) + .with_system(handle_to_account_event.run_on_event::()) + .with_system(handle_exit_event.run_on_event::()) + .into() + ) // Systems for settings menu screen .add_enter_system(MenuState::Settings, settings_menu_setup) .add_exit_system(MenuState::Settings, despawn_screen::) @@ -123,18 +132,14 @@ struct SelectedSettingsTab; /// All button actions #[derive(Component)] enum MenuButtonAction { - Play, - Settings, SettingsDisplay, SettingsAudio, SettingsMisc, - Account, AccountLogin, AccountRegister, AccountLogout, BackToMainMenu, BackToSettings, - Exit, } fn menu_action( @@ -143,18 +148,12 @@ fn menu_action( (&Interaction, &MenuButtonAction), (Changed, With