From 3ab00d1c3774f5c8daaeeba83b71475919aaabdb Mon Sep 17 00:00:00 2001 From: CoCoSol007 Date: Fri, 9 Feb 2024 23:55:48 +0100 Subject: [PATCH] Adding a state system --- crates/border-wars/src/lib.rs | 7 +++++-- crates/border-wars/src/main.rs | 7 ++----- crates/border-wars/src/menu.rs | 19 ++++++++++--------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/crates/border-wars/src/lib.rs b/crates/border-wars/src/lib.rs index 6e74031..b156161 100644 --- a/crates/border-wars/src/lib.rs +++ b/crates/border-wars/src/lib.rs @@ -1,12 +1,15 @@ //! The file that contains utility functions, enums, structs of the game. -use bevy::prelude::*; use std::default::Default; +use bevy::prelude::*; + +pub mod menu; + #[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Hash, States)] pub enum GameState { #[default] Menu, Lobby, Game, -} \ No newline at end of file +} diff --git a/crates/border-wars/src/main.rs b/crates/border-wars/src/main.rs index 7811fa4..ec04b20 100644 --- a/crates/border-wars/src/main.rs +++ b/crates/border-wars/src/main.rs @@ -1,11 +1,8 @@ //! The main entry point of the game. use bevy::prelude::*; -use lib::GameState; -use menu::MenuPlugin; - -mod lib; -mod menu; +use border_wars::menu::MenuPlugin; +use border_wars::GameState; fn main() { App::new() diff --git a/crates/border-wars/src/menu.rs b/crates/border-wars/src/menu.rs index 974172f..b566b60 100644 --- a/crates/border-wars/src/menu.rs +++ b/crates/border-wars/src/menu.rs @@ -2,7 +2,8 @@ use bevy::prelude::*; use bevy_egui::{egui, EguiContexts, EguiPlugin}; -use border_wars::GameState; + +use crate::GameState; /// The plugin for the menu. pub struct MenuPlugin; @@ -11,10 +12,10 @@ pub struct MenuPlugin; impl Plugin for MenuPlugin { /// A function that is called when the plugin is added to the application. fn build(&self, app: &mut App) { - app.add_plugins(EguiPlugin).add_systems(Update,( - ui_connect_window.run_if(state_exists_and_equals(GameState::Menu)), - ui_host_window.run_if(state_exists_and_equals(GameState::Menu)), - )); + app.add_plugins(EguiPlugin).add_systems( + Update, + (ui_connect_window, ui_host_window).run_if(in_state(GameState::Menu)), + ); } } /// Display a connect window, with a button to join a game and an input to enter @@ -22,7 +23,7 @@ impl Plugin for MenuPlugin { fn ui_connect_window( mut ctx: EguiContexts, mut connection_string: Local, - mut state: ResMut>, + mut state: ResMut>, ) { egui::Window::new("Connect") .default_width(400.0) @@ -35,19 +36,19 @@ fn ui_connect_window( ui.text_edit_singleline(&mut *connection_string); if ui.button("Join").clicked() { - println!("clicked"); + state.set(GameState::Game); } }); }); } /// Display an host window, with a button to create a new game. -fn ui_host_window(mut ctx: EguiContexts) { +fn ui_host_window(mut ctx: EguiContexts, mut state: ResMut>) { egui::Window::new("Host") .default_width(400.0) .show(ctx.ctx_mut(), |ui| { if ui.button("Create new game").clicked() { - println!("clicked"); + state.set(GameState::Lobby); } }); }