linear state integration

This commit is contained in:
nquidox 2026-04-15 23:04:03 +03:00
parent c5a4d77684
commit 895193778b
9 changed files with 42 additions and 11 deletions

View file

@ -13,6 +13,7 @@ mod ui;
use crate::states::game::state::MainGameState; use crate::states::game::state::MainGameState;
use crate::states::main_menu::state::MainMenuState; use crate::states::main_menu::state::MainMenuState;
use crate::states::settings_menu::state::SettingsMenuState; use crate::states::settings_menu::state::SettingsMenuState;
use crate::states::linear::plugin::LinearPlugin;
const FACTOR: u32 = 80; const FACTOR: u32 = 80;
const WIDTH: u32 = 16; const WIDTH: u32 = 16;
@ -36,6 +37,7 @@ fn main() {
MainMenuState, MainMenuState,
SettingsMenuState, SettingsMenuState,
MainGameState, MainGameState,
LinearPlugin,
)) ))
.add_systems(Startup, setup) .add_systems(Startup, setup)
.add_systems(Update, exit_system) .add_systems(Update, exit_system)

View file

@ -8,4 +8,5 @@ pub enum AppState {
GameState, GameState,
GameRestart, GameRestart,
LevelState, LevelState,
LinearState,
} }

View file

@ -30,7 +30,7 @@ impl CannonState {
let cur = self.current_type; let cur = self.current_type;
self.current_type = self.next_type; self.current_type = self.next_type;
self.next_type = cur; self.next_type = cur;
} }
} }

View file

@ -7,4 +7,7 @@ pub struct MainMenuRootMarker;
pub struct MainMenuNewGameButton; pub struct MainMenuNewGameButton;
#[derive(Component, Copy, Clone)] #[derive(Component, Copy, Clone)]
pub struct MainMenuSettingsButton; pub struct MainMenuSettingsButton;
#[derive(Component, Copy, Clone)]
pub struct MainMenuLinearButton;

View file

@ -1,5 +1,7 @@
pub mod state; pub(crate) mod state;
pub mod components; pub use state::*;
mod components;
pub use components::*; pub use components::*;
pub mod systems; mod systems;
pub use systems::*;
pub mod plugin; pub mod plugin;

View file

@ -1,5 +1,5 @@
use bevy::prelude::*; use bevy::prelude::*;
use crate::states::main_menu::{MainMenuNewGameButton, MainMenuSettingsButton}; use crate::states::main_menu::*;
use crate::ui::button_click::ButtonClickMessage; use crate::ui::button_click::ButtonClickMessage;
use crate::ui::click::handle_click_system; use crate::ui::click::handle_click_system;
@ -12,11 +12,13 @@ impl Plugin for MainMenuUiPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_message::<ButtonClickMessage<MainMenuNewGameButton>>() app.add_message::<ButtonClickMessage<MainMenuNewGameButton>>()
.add_message::<ButtonClickMessage<MainMenuSettingsButton>>() .add_message::<ButtonClickMessage<MainMenuSettingsButton>>()
.add_message::<ButtonClickMessage<MainMenuLinearButton>>()
.add_systems( .add_systems(
Update, Update,
( (
handle_click_system::<MainMenuNewGameButton>, handle_click_system::<MainMenuNewGameButton>,
handle_click_system::<MainMenuSettingsButton>, handle_click_system::<MainMenuSettingsButton>,
handle_click_system::<MainMenuLinearButton>,
).in_set(MainMenuButtonSet) ).in_set(MainMenuButtonSet)
); );
} }

View file

@ -1,6 +1,5 @@
use crate::states::AppState; use crate::states::*;
use crate::states::main_menu::{MainMenuNewGameButton, MainMenuRootMarker, MainMenuSettingsButton}; use crate::states::main_menu::*;
use crate::states::main_menu::systems::*;
use crate::ui::button_hover::button_hover; use crate::ui::button_hover::button_hover;
use crate::ui::{ButtonStyle, spawn_background, spawn_button}; use crate::ui::{ButtonStyle, spawn_background, spawn_button};
use bevy::prelude::*; use bevy::prelude::*;
@ -20,6 +19,7 @@ impl Plugin for MainMenuState {
button_hover, button_hover,
new_game_button_system, new_game_button_system,
settings_button_system, settings_button_system,
linear_button_system,
) )
.run_if(in_state(AppState::MainMenu)), .run_if(in_state(AppState::MainMenu)),
) )
@ -92,6 +92,14 @@ fn setup_main_menu(mut commands: Commands, asset_server: Res<AssetServer>) {
MainMenuNewGameButton, MainMenuNewGameButton,
); );
spawn_button(
&mut commands,
menu_root,
"Линейное",
&mm_button_style,
MainMenuLinearButton,
);
spawn_button( spawn_button(
&mut commands, &mut commands,
menu_root, menu_root,

View file

@ -1,5 +1,5 @@
use crate::states::AppState; use crate::states::AppState;
use crate::states::main_menu::{MainMenuNewGameButton, MainMenuSettingsButton}; use crate::states::main_menu::*;
use bevy::prelude::*; use bevy::prelude::*;
pub fn new_game_button_system( 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<Interaction>, With<MainMenuLinearButton>)>,
mut next_state: ResMut<NextState<AppState>>,
) {
for interaction in &interaction_query {
if matches!(interaction, Interaction::Pressed) {
println!("Линейное нажата");
next_state.set(AppState::LinearState);
}
}
}

View file

@ -5,4 +5,5 @@ pub mod main_menu;
pub mod settings_menu; pub mod settings_menu;
pub mod game; pub mod game;
mod level; mod level;
pub mod linear;