From 65db8d8492f8caeb45295434cf66c8c0f5f52b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl?= Date: Tue, 20 Feb 2024 23:15:49 +0100 Subject: [PATCH] hovered --- .../border-wars/assets/button_menu_icon.png | Bin 0 -> 2866 bytes .../assets/button_settings_icon.png | Bin 0 -> 2997 bytes crates/border-wars/src/lib.rs | 7 +- crates/border-wars/src/main.rs | 6 +- crates/border-wars/src/scenes/menu.rs | 280 +++++++++++------- 5 files changed, 187 insertions(+), 106 deletions(-) create mode 100644 crates/border-wars/assets/button_menu_icon.png create mode 100644 crates/border-wars/assets/button_settings_icon.png diff --git a/crates/border-wars/assets/button_menu_icon.png b/crates/border-wars/assets/button_menu_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..96790781fed9479c75f402157862e8522ad29720 GIT binary patch literal 2866 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 literal 0 HcmV?d00001 diff --git a/crates/border-wars/src/lib.rs b/crates/border-wars/src/lib.rs index ad44050..79c8ece 100644 --- a/crates/border-wars/src/lib.rs +++ b/crates/border-wars/src/lib.rs @@ -5,7 +5,7 @@ use bevy::prelude::*; pub mod scenes; /// The current scene of the game. -#[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Hash, States)] +#[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Hash, States, Component)] pub enum CurrentScene { /// When we are in the main menu. #[default] @@ -16,10 +16,13 @@ pub enum CurrentScene { /// When we play this wonderful game. Game, + + /// When we are in the settings menu. + Setting, } +/// Calculates the ui_scale.0 depending on the size of the main node pub fn change_scaling(mut ui_scale: ResMut, window: Query<&Window>) { - // Calculates the ui_scale depending on the size of the main node let window = window.single(); let (a, b) = ( window.resolution.width() / 1280., diff --git a/crates/border-wars/src/main.rs b/crates/border-wars/src/main.rs index ef67c5e..69d6a9a 100644 --- a/crates/border-wars/src/main.rs +++ b/crates/border-wars/src/main.rs @@ -1,10 +1,14 @@ //! The main entry point of the game. -use bevy::prelude::*; +use bevy::{prelude::*, text::TextSettings}; use border_wars::scenes::ScenesPlugin; fn main() { App::new() + .insert_resource(TextSettings { + allow_dynamic_font_size: true, + ..default() + }) .add_plugins(DefaultPlugins) .add_plugins(ScenesPlugin) .run(); diff --git a/crates/border-wars/src/scenes/menu.rs b/crates/border-wars/src/scenes/menu.rs index c8b2dd6..da3516f 100644 --- a/crates/border-wars/src/scenes/menu.rs +++ b/crates/border-wars/src/scenes/menu.rs @@ -11,11 +11,19 @@ impl Plugin for MenuPlugin { fn build(&self, app: &mut App) { app.add_systems(Startup, menu_ui.run_if(in_state(CurrentScene::Menu))); app.add_systems(Update, change_scaling); + app.add_systems(Update, handle_button); } } +/// TODO +#[derive(Component, Clone)] +struct HoveredTexture { + texture: Handle, + hovered_texture: Handle, +} + /// Display the UI of the menu to host a game or join one. -fn menu_ui(mut commands: Commands) { +fn menu_ui(mut commands: Commands, asset_server: Res) { commands.spawn(Camera2dBundle::default()); commands @@ -28,115 +36,106 @@ fn menu_ui(mut commands: Commands) { ..default() }, z_index: ZIndex::Local(0), + background_color: Color::GREEN.into(), ..default() }) - .with_children(|main_node| { - main_node.spawn(NodeBundle { - style: Style { - margin: UiRect { - left: (Val::Auto), - right: (Val::Auto), - top: (Val::Px(25.)), - bottom: (Val::Px(25.)), - }, - width: Val::Px(650.), - height: Val::Px(300.), - ..default() - }, - background_color: BackgroundColor(Color::RED), - ..default() - }); + .with_children(|node| main_node(node)); - main_node - .spawn(NodeBundle { - style: Style { - flex_direction: FlexDirection::Column, - margin: UiRect { - left: (Val::Auto), - right: (Val::Auto), - top: (Val::Auto), - bottom: (Val::Px(25.)), - }, - width: Val::Px(552.5), - height: Val::Percent(70.), - ..default() - }, - ..default() - }) - .with_children(|container| { - container - .spawn(NodeBundle { - style: default_style(), - ..default() - }) - .with_children(|host| { - host.spawn(NodeBundle { - style: default_style(), - background_color: BackgroundColor(Color::YELLOW), - ..default() - }); - host.spawn(NodeBundle { - style: default_style(), - background_color: BackgroundColor(Color::YELLOW), - ..default() - }); - }); - - container - .spawn(NodeBundle { - style: default_style(), - ..default() - }) - .with_children(|join| { - join.spawn(NodeBundle { - style: default_style(), - background_color: BackgroundColor(Color::YELLOW), - ..default() - }); - join.spawn(NodeBundle { - style: default_style(), - background_color: BackgroundColor(Color::YELLOW), - ..default() - }); - }); - }); - }); - - commands.spawn(NodeBundle { - style: Style { - width: Val::Px(75.), - aspect_ratio: Some(1.), - margin: UiRect { - left: Val::Px(25.), - right: Val::Auto, - top: Val::Px(25.), - bottom: Val::Auto, - }, - ..default() + create_side_button( + UiRect { + left: Val::Px(25.), + right: Val::Auto, + top: Val::Px(25.), + bottom: Val::Auto, }, - z_index: ZIndex::Local(1), - background_color: BackgroundColor(Color::BLUE), - ..default() - }); - - commands.spawn(NodeBundle { - style: Style { - width: Val::Px(75.), - aspect_ratio: Some(1.), - margin: UiRect { - left: Val::Auto, - right: Val::Px(25.), - top: Val::Px(25.), - bottom: Val::Auto, - }, - ..default() + CurrentScene::Lobby, + &mut commands, + HoveredTexture { + texture: asset_server.load("button_settings_icon.png"), + hovered_texture: asset_server.load("button_menu_icon.png"), }, - z_index: ZIndex::Local(1), - background_color: BackgroundColor(Color::BLUE), - ..default() - }); + ); + + create_side_button( + UiRect { + left: Val::Auto, + right: Val::Px(25.), + top: Val::Px(25.), + bottom: Val::Auto, + }, + CurrentScene::Lobby, + &mut commands, + HoveredTexture { + texture: asset_server.load("button_menu_icon.png"), + hovered_texture: asset_server.load("button_settings_icon.png"), + }, + ); } +/// TODO +fn create_side_button( + margin: UiRect, + target_scene: CurrentScene, + commands: &mut Commands, + textures: HoveredTexture, +) { + commands + .spawn(ButtonBundle { + style: Style { + width: Val::Px(75.), + aspect_ratio: Some(1.), + margin, + ..default() + }, + z_index: ZIndex::Local(1), + background_color: Color::NONE.into(), + ..default() + }) + .insert((target_scene, textures.clone())) + .with_children(|button| { + button.spawn(ImageBundle { + style: Style { + width: Val::Percent(100.), + height: Val::Percent(100.), + ..default() + }, + image: textures.texture.into(), + ..default() + }); + }); +} + +fn handle_button( + interaction_query: Query< + (&Interaction, &CurrentScene, &mut Children, &HoveredTexture), + (Changed, With