use bevy::{ color::palettes::css::{BLACK, INDIGO, ORANGE, PURPLE, RED, TEAL}, prelude::*, }; use crate::view::{button_set_state, ViewState}; /// Game Menu pub struct MenuPlugin; impl Plugin for MenuPlugin { fn build(&self, app: &mut App) { app.add_systems( Startup, ( setup, setup_about, setup_how_to_play, setup_deck, setup_sets, ), ); } } fn setup(mut commands: Commands) { commands .spawn((ViewState::Menu, Node::default())) .with_children(|parent| { parent .spawn((Button, BackgroundColor(TEAL.into()))) .with_children(|parent| { parent.spawn(Text("Play".to_string())); }) .observe(button_set_state(ViewState::Play)); parent .spawn((Button, BackgroundColor(ORANGE.into()))) .with_children(|parent| { parent.spawn(Text("About".to_string())); }) .observe(button_set_state(ViewState::About)); parent .spawn((Button, BackgroundColor(PURPLE.into()))) .with_children(|parent| { parent.spawn(Text("How to Play".to_string())); }) .observe(button_set_state(ViewState::HowToPlay)); parent .spawn((Button, BackgroundColor(RED.into()))) .with_children(|parent| { parent.spawn(Text("Quit".to_string())); }) .observe(quit_button); }); commands .spawn((ViewState::Play, Node::default())) .with_children(|parent| { parent .spawn((Button, BackgroundColor(TEAL.into()), GlobalZIndex(1))) .with_children(|parent| { parent.spawn(Text("Menu".to_string())); }) .observe(button_set_state(ViewState::Menu)); parent .spawn((Button, BackgroundColor(INDIGO.into()), GlobalZIndex(1))) .with_children(|parent| { parent.spawn(Text("Deck".to_string())); }) .observe(button_set_state(ViewState::Deck)); parent .spawn((Button, BackgroundColor(ORANGE.into()), GlobalZIndex(1))) .with_children(|parent| { parent.spawn(Text("Sets".to_string())); }) .observe(button_set_state(ViewState::Sets)); }); } fn setup_about(mut commands: Commands) { commands .spawn((ViewState::About, Node::default())) .with_children(|parent| { parent .spawn((Button, BackgroundColor(TEAL.into()))) .with_children(|parent| { parent.spawn(Text("Menu".to_string())); }) .observe(button_set_state(ViewState::Menu)); parent.spawn(( Text("This is the about page".to_string()), BackgroundColor(BLACK.into()), )); }); } fn setup_how_to_play(mut commands: Commands) { commands .spawn((ViewState::HowToPlay, Node::default())) .with_children(|parent| { parent .spawn((Button, BackgroundColor(TEAL.into()))) .with_children(|parent| { parent.spawn(Text("Menu".to_string())); }) .observe(button_set_state(ViewState::Menu)); parent.spawn(( Text("This is the how to play page".to_string()), BackgroundColor(BLACK.into()), )); }); } fn setup_deck(mut commands: Commands) { commands .spawn((ViewState::Deck, Node::default())) .with_children(|parent| { parent .spawn((Button, BackgroundColor(TEAL.into()))) .with_children(|parent| { parent.spawn(Text("Back".to_string())); }) .observe(button_set_state(ViewState::Play)); }); } fn setup_sets(mut commands: Commands) { commands .spawn((ViewState::Sets, Node::default())) .with_children(|parent| { parent .spawn((Button, BackgroundColor(TEAL.into()))) .with_children(|parent| { parent.spawn(Text("Back".to_string())); }) .observe(button_set_state(ViewState::Play)); }); } fn quit_button(_trigger: Trigger>, mut exit_event: EventWriter) { exit_event.send(AppExit::Success); }