diff --git a/src/end_state.rs b/src/end_state.rs index 26a2483..4d43fb1 100644 --- a/src/end_state.rs +++ b/src/end_state.rs @@ -60,7 +60,7 @@ pub fn setup( } } -pub fn buttons( +pub fn player_interact( keys: Res>, mut game_state: ResMut> ) { diff --git a/src/main.rs b/src/main.rs index 1f31c66..af4bd5b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ use rand::seq::SliceRandom; use rand::RngCore; mod end_state; +mod start_state; const NORMAL_BUTTON: Color = Color::srgb(0.15, 0.15, 0.15); const WRONG_BUTTON: Color = Color::srgb(0.50, 0.15, 0.15); @@ -118,8 +119,8 @@ fn main() { .init_state::() .add_systems(Startup, star_setup) .add_systems(Startup, cons_setup) - .add_systems(OnEnter(GameState::Start), start_ui_setup) - .add_systems(Update, start_menu_system.run_if(in_state(GameState::Start))) + .add_systems(OnEnter(GameState::Start), start_state::setup) + .add_systems(Update, start_state::player_interact.run_if(in_state(GameState::Start))) .add_systems(OnExit(GameState::Start), despawn_screen::) .add_systems(OnEnter(GameState::Game), game_ui_setup) .add_systems(Update, player_input.run_if(in_state(GameState::Game))) @@ -127,81 +128,11 @@ fn main() { .add_systems(Update, label_update.run_if(in_state(GameState::Game))) .add_systems(OnExit(GameState::Game), despawn_screen::) .add_systems(OnEnter(GameState::End), end_state::setup) - .add_systems(Update, end_state::buttons.run_if(in_state(GameState::End))) + .add_systems(Update, end_state::player_interact.run_if(in_state(GameState::End))) .add_systems(OnExit(GameState::End), despawn_screen::) .run(); } - - -fn start_ui_setup(mut commands: Commands, _asset_server: Res) { - // Create a container node that places its children (text areas) in a vertical column and centers them - let container_node = NodeBundle { - style: Style { - width: Val::Percent(100.0), // Full width of the screen - height: Val::Percent(100.0), // Full height of the screen - flex_direction: FlexDirection::Column, // Arrange children in a column (vertical) - justify_content: JustifyContent::Center, // Center vertically - align_items: AlignItems::Center, // Center horizontally - ..default() - }, - ..default() - }; - - // Create the container for the text areas - let container = commands.spawn(container_node).id(); - - // TextStyle for the top text (larger font) - let top_text_style = TextStyle { - font_size: 50.0, // Larger font size - color: Color::WHITE, - // font: asset_server.load("fonts/FiraSans-Bold.ttf"), // Load font if needed - ..default() - }; - - // TextStyle for the bottom text (smaller font) - let bottom_text_style = TextStyle { - font_size: 30.0, // Smaller font size - color: Color::WHITE, - // font: asset_server.load("fonts/FiraSans-Regular.ttf"), // Load font if needed - ..default() - }; - - // TextBundle for the top text - let top_text_node = TextBundle::from_section( - "Astraea", // Text for the top section - top_text_style, - ); - - // TextBundle for the bottom text - let bottom_text_node = TextBundle::from_section( - "Press Space to Begin", // Text for the bottom section - bottom_text_style, - ); - - // Spawn the text nodes and add them as children to the container - let top_text = commands.spawn((top_text_node, StartMenu)).id(); - let bottom_text = commands.spawn((bottom_text_node, StartMenu)).id(); - - commands.entity(container).push_children(&[top_text, bottom_text]); - - commands.spawn(( - Camera3dBundle { - transform: Transform::from_xyz(0.0, 0.0, 0.0), - ..default() - }, - Player { - target_rotation: None, - target_cons_name: None, - score: 0, - health: 3, - thinking: true, - }, - GameOver, - )); -} - - fn spawn_cons_lines( mut commands: Commands, mut meshes: ResMut>, @@ -554,25 +485,8 @@ fn player_input( } } -fn start_menu_system( - keys: Res>, - mut game_state: ResMut>, - mut player_query: Query<(&mut Player, &mut Transform)> -) { - if keys.just_pressed(KeyCode::Space) { - info!("start space"); - game_state.set(GameState::Game); - } - if let Ok((_player, mut transform)) = player_query.get_single_mut() { - let mut rotation = Quat::IDENTITY; - rotation *= Quat::from_rotation_y((PI / 6000.0) as f32); // Rotate by 3 degrees (PI/60 radians) - rotation *= Quat::from_rotation_x((-PI / 2000.0) as f32); // Rotate by -3 degrees - transform.rotation *= rotation; // Apply the rotation - } -} - fn label_update( mut param_set: ParamSet<( Query<&mut Text, With>, diff --git a/src/stars.rs b/src/stars.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/start_state.rs b/src/start_state.rs index e69de29..015c602 100644 --- a/src/start_state.rs +++ b/src/start_state.rs @@ -0,0 +1,92 @@ +use bevy::prelude::*; +use std::f64::consts::PI; +use crate::Player; +use crate::GameState; +use crate::GameOver; +use crate::StartMenu; + +pub fn setup(mut commands: Commands, _asset_server: Res) { + // Create a container node that places its children (text areas) in a vertical column and centers them + let container_node = NodeBundle { + style: Style { + width: Val::Percent(100.0), // Full width of the screen + height: Val::Percent(100.0), // Full height of the screen + flex_direction: FlexDirection::Column, // Arrange children in a column (vertical) + justify_content: JustifyContent::Center, // Center vertically + align_items: AlignItems::Center, // Center horizontally + ..default() + }, + ..default() + }; + + // Create the container for the text areas + let container = commands.spawn(container_node).id(); + + // TextStyle for the top text (larger font) + let top_text_style = TextStyle { + font_size: 50.0, // Larger font size + color: Color::WHITE, + // font: asset_server.load("fonts/FiraSans-Bold.ttf"), // Load font if needed + ..default() + }; + + // TextStyle for the bottom text (smaller font) + let bottom_text_style = TextStyle { + font_size: 30.0, // Smaller font size + color: Color::WHITE, + // font: asset_server.load("fonts/FiraSans-Regular.ttf"), // Load font if needed + ..default() + }; + + // TextBundle for the top text + let top_text_node = TextBundle::from_section( + "Astraea", // Text for the top section + top_text_style, + ); + + // TextBundle for the bottom text + let bottom_text_node = TextBundle::from_section( + "Press Space to Begin", // Text for the bottom section + bottom_text_style, + ); + + // Spawn the text nodes and add them as children to the container + let top_text = commands.spawn((top_text_node, StartMenu)).id(); + let bottom_text = commands.spawn((bottom_text_node, StartMenu)).id(); + + commands.entity(container).push_children(&[top_text, bottom_text]); + + commands.spawn(( + Camera3dBundle { + transform: Transform::from_xyz(0.0, 0.0, 0.0), + ..default() + }, + Player { + target_rotation: None, + target_cons_name: None, + score: 0, + health: 3, + thinking: true, + }, + GameOver, + )); +} + +pub fn player_interact( + keys: Res>, + mut game_state: ResMut>, + mut player_query: Query<(&mut Player, &mut Transform)> +) { + if keys.just_pressed(KeyCode::Space) { + info!("start space"); + game_state.set(GameState::Game); + } + + + if let Ok((_player, mut transform)) = player_query.get_single_mut() { + let mut rotation = Quat::IDENTITY; + rotation *= Quat::from_rotation_y((PI / 6000.0) as f32); // Rotate by 3 degrees (PI/60 radians) + rotation *= Quat::from_rotation_x((-PI / 2000.0) as f32); // Rotate by -3 degrees + transform.rotation *= rotation; // Apply the rotation + } +}