diff --git a/src/main.rs b/src/main.rs index 500ad27..aa15696 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,7 @@ mod ui; use crate::states::game::state::MainGameState; use crate::states::main_menu::state::MainMenuState; use crate::states::settings_menu::state::SettingsMenuState; +use crate::states::linear::plugin::LinearPlugin; const FACTOR: u32 = 80; const WIDTH: u32 = 16; @@ -36,6 +37,7 @@ fn main() { MainMenuState, SettingsMenuState, MainGameState, + LinearPlugin, )) .add_systems(Startup, setup) .add_systems(Update, exit_system) diff --git a/src/states/app_states.rs b/src/states/app_states.rs index 41eee3a..77f2b45 100644 --- a/src/states/app_states.rs +++ b/src/states/app_states.rs @@ -8,4 +8,5 @@ pub enum AppState { GameState, GameRestart, LevelState, + LinearState, } \ No newline at end of file diff --git a/src/states/level/components_cannon.rs b/src/states/level/components_cannon.rs index 94556d1..49aa22d 100644 --- a/src/states/level/components_cannon.rs +++ b/src/states/level/components_cannon.rs @@ -30,7 +30,7 @@ impl CannonState { let cur = self.current_type; self.current_type = self.next_type; self.next_type = cur; - + } } diff --git a/src/states/main_menu/components.rs b/src/states/main_menu/components.rs index 3aa4de4..0de024f 100644 --- a/src/states/main_menu/components.rs +++ b/src/states/main_menu/components.rs @@ -7,4 +7,7 @@ pub struct MainMenuRootMarker; pub struct MainMenuNewGameButton; #[derive(Component, Copy, Clone)] -pub struct MainMenuSettingsButton; \ No newline at end of file +pub struct MainMenuSettingsButton; + +#[derive(Component, Copy, Clone)] +pub struct MainMenuLinearButton; \ No newline at end of file diff --git a/src/states/main_menu/mod.rs b/src/states/main_menu/mod.rs index 5b3d45a..a89aad4 100644 --- a/src/states/main_menu/mod.rs +++ b/src/states/main_menu/mod.rs @@ -1,5 +1,7 @@ -pub mod state; -pub mod components; +pub(crate) mod state; +pub use state::*; +mod components; pub use components::*; -pub mod systems; +mod systems; +pub use systems::*; pub mod plugin; diff --git a/src/states/main_menu/plugin.rs b/src/states/main_menu/plugin.rs index 3c87e16..3743fea 100644 --- a/src/states/main_menu/plugin.rs +++ b/src/states/main_menu/plugin.rs @@ -1,5 +1,5 @@ use bevy::prelude::*; -use crate::states::main_menu::{MainMenuNewGameButton, MainMenuSettingsButton}; +use crate::states::main_menu::*; use crate::ui::button_click::ButtonClickMessage; use crate::ui::click::handle_click_system; @@ -12,11 +12,13 @@ impl Plugin for MainMenuUiPlugin { fn build(&self, app: &mut App) { app.add_message::>() .add_message::>() + .add_message::>() .add_systems( Update, ( handle_click_system::, handle_click_system::, + handle_click_system::, ).in_set(MainMenuButtonSet) ); } diff --git a/src/states/main_menu/state.rs b/src/states/main_menu/state.rs index eca3c88..ad6bb60 100644 --- a/src/states/main_menu/state.rs +++ b/src/states/main_menu/state.rs @@ -1,6 +1,5 @@ -use crate::states::AppState; -use crate::states::main_menu::{MainMenuNewGameButton, MainMenuRootMarker, MainMenuSettingsButton}; -use crate::states::main_menu::systems::*; +use crate::states::*; +use crate::states::main_menu::*; use crate::ui::button_hover::button_hover; use crate::ui::{ButtonStyle, spawn_background, spawn_button}; use bevy::prelude::*; @@ -20,6 +19,7 @@ impl Plugin for MainMenuState { button_hover, new_game_button_system, settings_button_system, + linear_button_system, ) .run_if(in_state(AppState::MainMenu)), ) @@ -92,6 +92,14 @@ fn setup_main_menu(mut commands: Commands, asset_server: Res) { MainMenuNewGameButton, ); + spawn_button( + &mut commands, + menu_root, + "Линейное", + &mm_button_style, + MainMenuLinearButton, + ); + spawn_button( &mut commands, menu_root, diff --git a/src/states/main_menu/systems.rs b/src/states/main_menu/systems.rs index e82d451..bdc9082 100644 --- a/src/states/main_menu/systems.rs +++ b/src/states/main_menu/systems.rs @@ -1,5 +1,5 @@ use crate::states::AppState; -use crate::states::main_menu::{MainMenuNewGameButton, MainMenuSettingsButton}; +use crate::states::main_menu::*; use bevy::prelude::*; pub fn new_game_button_system( @@ -23,3 +23,15 @@ pub fn settings_button_system( } } } + +pub fn linear_button_system( + interaction_query: Query<&Interaction, (Changed, With)>, + mut next_state: ResMut>, +) { + for interaction in &interaction_query { + if matches!(interaction, Interaction::Pressed) { + println!("Линейное нажата"); + next_state.set(AppState::LinearState); + } + } +} \ No newline at end of file diff --git a/src/states/mod.rs b/src/states/mod.rs index c2219c2..964eb1d 100644 --- a/src/states/mod.rs +++ b/src/states/mod.rs @@ -5,4 +5,5 @@ pub mod main_menu; pub mod settings_menu; pub mod game; -mod level; \ No newline at end of file +mod level; +pub mod linear; \ No newline at end of file