diff --git a/crates/border-wars/assets/menu/border_wars.png b/crates/border-wars/assets/menu/border_wars.png new file mode 100644 index 0000000..9825c7c Binary files /dev/null and b/crates/border-wars/assets/menu/border_wars.png differ diff --git a/crates/border-wars/src/lib.rs b/crates/border-wars/src/lib.rs index 16b1b2d..25e08ed 100644 --- a/crates/border-wars/src/lib.rs +++ b/crates/border-wars/src/lib.rs @@ -12,7 +12,7 @@ pub mod scenes; pub mod ui; /// 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] diff --git a/crates/border-wars/src/scenes/menu.rs b/crates/border-wars/src/scenes/menu.rs index 1f067c4..dbb7af2 100644 --- a/crates/border-wars/src/scenes/menu.rs +++ b/crates/border-wars/src/scenes/menu.rs @@ -2,10 +2,13 @@ use bevnet::{Connection, SendTo, Uuid}; use bevy::prelude::*; +use bevy::render::render_resource::TextureUsages; +use bevy_egui::egui::epaint::textures; use bevy_egui::{egui, EguiContexts}; use crate::networking::connection::RequestJoin; use crate::networking::PlayerRank; +use crate::ui::hover::HoveredTexture; use crate::{CurrentScene, Player}; /// The plugin for the menu. @@ -82,6 +85,8 @@ fn menu_ui( #[derive(Component)] struct MenuEntity; +type TargetScene = CurrentScene; + fn menu_ui2(mut commands: Commands, asset_server: Res) { commands .spawn(ImageBundle { @@ -97,12 +102,56 @@ fn menu_ui2(mut commands: Commands, asset_server: Res) { ..default() }) .insert(MenuEntity); + + create_side_button( + UiRect { + left: Val::Px(25.), + right: Val::Auto, + top: Val::Px(25.), + bottom: Val::Auto, + }, + TargetScene::Lobby, + &mut commands, + HoveredTexture { + texture: asset_server.load("menu/setting.png"), + hovered_texture: asset_server.load("menu/setting_hover.png"), + }, + ); + + 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("menu/info.png"), + hovered_texture: asset_server.load("menu/info_hover.png"), + }, + ); + + renderer( + &asset_server, + commands, + Some(HoveredTexture { + texture: asset_server.load("menu/border_wars.png"), + hovered_texture: asset_server.load("menu/border_wars.png"), + }), + None, + Val::Px(78.), + Val::Px(614.), + Val::Px(25.), + Val::Px(333.), + ) } /// A function to create a side button. fn create_side_button( margin: UiRect, - target_scene: CurrentScene, + target_scene: TargetScene, commands: &mut Commands, textures: HoveredTexture, ) { @@ -119,4 +168,38 @@ fn create_side_button( ..default() }) .insert((target_scene, textures, MenuEntity)); -} \ No newline at end of file +} + +fn renderer( + asset_server: &Res, + mut background: Commands, + textures: Option, + texture: Option<&str>, + height: Val, + width: Val, + top: Val, + left: Val, +) { + let mut i = background + .spawn(ImageBundle { + style: Style { + height, + width, + top, + left, + ..default() + }, + image: match textures { + Some(ref textures) => textures.texture.clone().into(), + _ => match texture { + Some(texture) => asset_server.load(texture).into(), + _ => panic!("PAS DE TEXTURES FRER"), + }, + }, + ..default() + }); + if textures.is_some() { + i.insert(textures.unwrap()); + } + +}