generated from tipragot/rust
WIP: Adding the menu #110
BIN
crates/border-wars/assets/menu/border_wars.png
Normal file
BIN
crates/border-wars/assets/menu/border_wars.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
|
@ -12,7 +12,7 @@ pub mod scenes;
|
||||||
pub mod ui;
|
pub mod ui;
|
||||||
|
|
||||||
/// The current scene of the game.
|
/// 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 {
|
pub enum CurrentScene {
|
||||||
/// When we are in the main menu.
|
/// When we are in the main menu.
|
||||||
#[default]
|
#[default]
|
||||||
|
|
|
@ -2,10 +2,13 @@
|
||||||
|
|
||||||
use bevnet::{Connection, SendTo, Uuid};
|
use bevnet::{Connection, SendTo, Uuid};
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
use bevy::render::render_resource::TextureUsages;
|
||||||
|
use bevy_egui::egui::epaint::textures;
|
||||||
use bevy_egui::{egui, EguiContexts};
|
use bevy_egui::{egui, EguiContexts};
|
||||||
|
|
||||||
use crate::networking::connection::RequestJoin;
|
use crate::networking::connection::RequestJoin;
|
||||||
use crate::networking::PlayerRank;
|
use crate::networking::PlayerRank;
|
||||||
|
use crate::ui::hover::HoveredTexture;
|
||||||
use crate::{CurrentScene, Player};
|
use crate::{CurrentScene, Player};
|
||||||
|
|
||||||
/// The plugin for the menu.
|
/// The plugin for the menu.
|
||||||
|
@ -82,6 +85,8 @@ fn menu_ui(
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
struct MenuEntity;
|
struct MenuEntity;
|
||||||
|
|
||||||
|
type TargetScene = CurrentScene;
|
||||||
|
|
||||||
|
|||||||
fn menu_ui2(mut commands: Commands, asset_server: Res<AssetServer>) {
|
fn menu_ui2(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
commands
|
commands
|
||||||
.spawn(ImageBundle {
|
.spawn(ImageBundle {
|
||||||
|
@ -97,12 +102,56 @@ fn menu_ui2(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
..default()
|
..default()
|
||||||
})
|
})
|
||||||
.insert(MenuEntity);
|
.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.
|
/// A function to create a side button.
|
||||||
fn create_side_button(
|
fn create_side_button(
|
||||||
margin: UiRect,
|
margin: UiRect,
|
||||||
target_scene: CurrentScene,
|
target_scene: TargetScene,
|
||||||
commands: &mut Commands,
|
commands: &mut Commands,
|
||||||
textures: HoveredTexture,
|
textures: HoveredTexture,
|
||||||
) {
|
) {
|
||||||
|
@ -120,3 +169,37 @@ fn create_side_button(
|
||||||
})
|
})
|
||||||
.insert((target_scene, textures, MenuEntity));
|
.insert((target_scene, textures, MenuEntity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn renderer(
|
||||||
|
asset_server: &Res<AssetServer>,
|
||||||
|
mut background: Commands,
|
||||||
|
textures: Option<HoveredTexture>,
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue
Put some comments to tell which élément you are creating