From a9d545178770eedd1bf13af78986305b03cf04c1 Mon Sep 17 00:00:00 2001 From: CoCoSol007 Date: Sat, 10 Feb 2024 10:02:11 +0100 Subject: [PATCH] Change structure of menus --- .vscode/settings.json | 5 +++ crates/border-wars/src/lib.rs | 2 +- crates/border-wars/src/main.rs | 4 +- crates/border-wars/src/menus/lobby.rs | 43 ++++++++++++++++++++++ crates/border-wars/src/{ => menus}/menu.rs | 4 +- crates/border-wars/src/menus/mod.rs | 18 +++++++++ 6 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 crates/border-wars/src/menus/lobby.rs rename crates/border-wars/src/{ => menus}/menu.rs (92%) create mode 100644 crates/border-wars/src/menus/mod.rs diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3a23744 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "rust-analyzer.linkedProjects": [ + "./crates/border-wars/Cargo.toml" + ] +} \ No newline at end of file diff --git a/crates/border-wars/src/lib.rs b/crates/border-wars/src/lib.rs index 3ba1db7..db3bbc5 100644 --- a/crates/border-wars/src/lib.rs +++ b/crates/border-wars/src/lib.rs @@ -2,7 +2,7 @@ use bevy::prelude::*; -pub mod menu; +pub mod menus; /// The state of the game. #[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Hash, States)] diff --git a/crates/border-wars/src/main.rs b/crates/border-wars/src/main.rs index ec04b20..7ed9435 100644 --- a/crates/border-wars/src/main.rs +++ b/crates/border-wars/src/main.rs @@ -1,13 +1,13 @@ //! The main entry point of the game. use bevy::prelude::*; -use border_wars::menu::MenuPlugin; +use border_wars::menus::MenusPlugin; use border_wars::GameState; fn main() { App::new() .add_plugins(DefaultPlugins) .add_state::() - .add_plugins(MenuPlugin) + .add_plugins(MenusPlugin) .run(); } diff --git a/crates/border-wars/src/menus/lobby.rs b/crates/border-wars/src/menus/lobby.rs new file mode 100644 index 0000000..f0a45f5 --- /dev/null +++ b/crates/border-wars/src/menus/lobby.rs @@ -0,0 +1,43 @@ +//! The lobby menu of the game. + +use bevy::prelude::*; +use bevy_egui::{EguiContexts, egui}; + +use crate::GameState; + +/// The plugin for the lobby. +pub struct LobbyPlugin; + +impl Plugin for LobbyPlugin { + fn build(&self, app: &mut App) { + app.add_systems( + Update, + lobby_ui.run_if(state_exists_and_equals(GameState::Lobby)), + ); + } +} + +/// Display the UI of the menu to host a game or join one. +fn lobby_ui( + mut ctx: EguiContexts, + mut next_state: ResMut>, +) { + egui::CentralPanel::default().show(ctx.ctx_mut(), |ui| { + ui.heading("Border Wars"); + + ui.separator(); + + ui.label("Game created"); + ui.horizontal(|ui| { + ui.label("Game ID: "); + ui.label("connection_string"); + }); + + ui.separator(); + + if ui.button("Run the game").clicked() { + next_state.set(GameState::Game); + // TODO: run the game + } + }); +} diff --git a/crates/border-wars/src/menu.rs b/crates/border-wars/src/menus/menu.rs similarity index 92% rename from crates/border-wars/src/menu.rs rename to crates/border-wars/src/menus/menu.rs index d6e4d13..8818c0f 100644 --- a/crates/border-wars/src/menu.rs +++ b/crates/border-wars/src/menus/menu.rs @@ -1,7 +1,7 @@ //! The main menu of the game. use bevy::prelude::*; -use bevy_egui::{egui, EguiContexts, EguiPlugin}; +use bevy_egui::{egui, EguiContexts}; use crate::GameState; @@ -10,7 +10,7 @@ pub struct MenuPlugin; impl Plugin for MenuPlugin { fn build(&self, app: &mut App) { - app.add_plugins(EguiPlugin).add_systems( + app.add_systems( Update, menu_ui.run_if(state_exists_and_equals(GameState::Menu)), ); diff --git a/crates/border-wars/src/menus/mod.rs b/crates/border-wars/src/menus/mod.rs new file mode 100644 index 0000000..89bb351 --- /dev/null +++ b/crates/border-wars/src/menus/mod.rs @@ -0,0 +1,18 @@ +//! All the menu's programme. + +use bevy::prelude::*; +use bevy_egui::EguiPlugin; + +pub mod lobby; +pub mod menu; + +/// The plugin for all menus. +pub struct MenusPlugin; + +impl Plugin for MenusPlugin { + fn build(&self, app: &mut App) { + app.add_plugins(EguiPlugin) + .add_plugins(lobby::LobbyPlugin) + .add_plugins(menu::MenuPlugin); + } +}