From f1788fc9424a03b9aaf796b00d1d2f91b906d4ad Mon Sep 17 00:00:00 2001 From: AmadeusWM <63149896+AmadeusWM@users.noreply.github.com> Date: Sat, 5 Apr 2025 19:13:20 +0200 Subject: [PATCH] main menu --- assets/level.blend | Bin 926544 -> 926544 bytes assets/main.assets.ron | 1 + assets/meshes/wall.glb | Bin 0 -> 1924 bytes src/asset_loading/mod.rs | 5 +- src/level_instantiation/mod.rs | 19 +++++ src/main.rs | 17 +++- src/main_menu.rs | 142 +++++++++++++++++++++++++++++++++ 7 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 assets/meshes/wall.glb create mode 100644 src/level_instantiation/mod.rs create mode 100644 src/main_menu.rs diff --git a/assets/level.blend b/assets/level.blend index 147ee84ce858d290ca4c57a761a9efd50da0a282..c7cf0b155fa052ad35afdf532a303b657b7cebdb 100644 GIT binary patch delta 17958 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 delta 18212 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

>+6BWba_S9gc57SGeirdm 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 diff --git a/assets/main.assets.ron b/assets/main.assets.ron index f7b7b12..f9a63ec 100644 --- a/assets/main.assets.ron +++ b/assets/main.assets.ron @@ -1,3 +1,4 @@ ({ "lebron": File (path: "images/KingLebron.png"), + "wall": File (path: "meshes/wall.glb"), }) diff --git a/assets/meshes/wall.glb b/assets/meshes/wall.glb new file mode 100644 index 0000000000000000000000000000000000000000..0ff4c6338c68e3029955adc03ad9c0c95bfa8812 GIT binary patch literal 1924 zcmb7E+iuf95FOe=xfLi-c(wL9HS6^)&I7%KA_5^sO@xrDs&!H)wP@_hb^=vYDGxmH zIs8ELQG5Wi8@qK}_d+D^T=vYF+1c6jj#}^M0N~dmfV2Scv1vC(#EBv|CY2HCxxO1Z zaS)OU`E(cteh^7L43RdET>rogrP>=?8fr3=O-f2+=!TIO_y}e)C8s44b&!Bmlthb2 zWoJZur;k2T_u8Qoo*?Yp)fDg&@q+`GW9jbc?u9iXeK$HJ6^gDYMRm}2F>M?=estu- zBK3|U>r_(=Q&q~UrYVZSN~+8>%BZ55DpL(w)=H~X)>TtAHL6$!V`a)rk&9;#sn2WT zIb=!|%yS%ieJ}Qg3BZZt&}$E3ZjQ(oyIE`1?1reXVQ+ulsEdQQw!T$ud;8rUB^8D( z@%#g?!$Z_lkxN%F_lMx=1pVW{cm23^a*RFG6=sx3Cm8s6J4`E) zzVj2?q|3T#X$GUZqFRbUiw;a>ODUTeujrOxn3iE-XZs%B)z0eW_|?LW6)?o2F7kD& zs)~!u){nP-Q~lS4v;PTam$Iux;le4pr(z?M?9J*%ePf&OQM)KVdmZ8`+9$DFcl}zmowFI-WNg0A{rh|m zztk3dh|NpBKTdfwlH+)MUUEG5&&oNt3y)w9zx!|x9>5B&EASj%!fRN@bs3((V|WVl axZ;z6MR);AxGupRcm)q(0oMh12LAvphzE@T literal 0 HcmV?d00001 diff --git a/src/asset_loading/mod.rs b/src/asset_loading/mod.rs index 7572579..cee0105 100644 --- a/src/asset_loading/mod.rs +++ b/src/asset_loading/mod.rs @@ -28,7 +28,10 @@ pub(super) fn plugin(app: &mut App) { pub(crate) struct AudioAssets {} #[derive(AssetCollection, Resource, Clone)] -pub(crate) struct GltfAssets {} +pub(crate) struct GltfAssets { + #[asset(key = "wall")] + pub(crate) wall: Handle, +} #[derive(AssetCollection, Resource, Clone)] pub(crate) struct TextureAssets {} diff --git a/src/level_instantiation/mod.rs b/src/level_instantiation/mod.rs new file mode 100644 index 0000000..bf7218a --- /dev/null +++ b/src/level_instantiation/mod.rs @@ -0,0 +1,19 @@ +use bevy::prelude::*; + +use crate::{asset_loading::GltfAssets, GameState}; + +pub fn map_plugin(app: &mut App) { + // app.add_systems(OnEnter(GameState::Playing), spawn_level); +} + +fn spawn_level( + mut commands: Commands, + models: Res>, + gltf_assets: Res) { + let gltf = models.get(&gltf_assets.wall).unwrap(); + + // commands.spawn(SceneBundle { + // scene: gltf.scenes[0].clone(), + // ..default() + // }); +} diff --git a/src/main.rs b/src/main.rs index bd8733a..7abcb67 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +use std::default; + use asset_loading::ImageAssets; use bevy::prelude::*; use player_plugin::PlayerPlugin; @@ -6,18 +8,25 @@ use physics_plugin::PhysicsPlugin; mod asset_loading; mod player_plugin; mod physics_plugin; +mod level_instantiation; +mod main_menu; fn main() { App::new() - .add_plugins((DefaultPlugins, asset_loading::plugin, PlayerPlugin, PhysicsPlugin)) .init_state::() - // We need to register components to make them visible to Blenvy + .add_plugins(( + DefaultPlugins, + asset_loading::plugin, + PlayerPlugin, + PhysicsPlugin, + level_instantiation::map_plugin, + main_menu::plugin + )) .add_systems(Startup, setup) - .add_systems(OnExit(GameState::Loading), debug_our_king) .run(); } -#[derive(States, Default, Clone, Eq, PartialEq, Debug, Hash)] +#[derive(States, Debug, Clone, Copy, Eq, PartialEq, Hash, Default)] enum GameState { /// During the loading State the loading_plugin will load our assets #[default] diff --git a/src/main_menu.rs b/src/main_menu.rs new file mode 100644 index 0000000..8c5c4b1 --- /dev/null +++ b/src/main_menu.rs @@ -0,0 +1,142 @@ +use bevy::{color::palettes::css::{BLACK, CRIMSON, DARK_GREY}, prelude::*}; + +use crate::GameState; + +#[derive(Component)] +struct OnMainMenuScreen; + +pub fn plugin(app: &mut App) { + app + .add_systems(OnEnter(GameState::Menu), setup_main_menu) + .add_systems(OnExit(GameState::Menu), despawn_screen::) + .add_systems(Update, button_system.run_if(in_state(GameState::Menu))); +} + +#[derive(Component)] +struct MainMenu; + +#[derive(Component)] +enum MenuButton { + Play, + Settings, + Quit +} + +const TEXT_COLOR: Color = Color::srgb(0.9, 0.9, 0.9); + +const NORMAL_BUTTON: Color = Color::srgb(0.15, 0.15, 0.15); +const HOVERED_BUTTON: Color = Color::srgb(0.25, 0.25, 0.25); +const HOVERED_PRESSED_BUTTON: Color = Color::srgb(0.25, 0.65, 0.25); +const PRESSED_BUTTON: Color = Color::srgb(0.35, 0.75, 0.35); + +fn setup_main_menu(mut commands: Commands) { + let button_node = Node { + width: Val::Px(300.0), + height: Val::Px(65.0), + margin: UiRect::all(Val::Px(20.0)), + justify_content: JustifyContent::Center, + align_items: AlignItems::Center, + ..default() + }; + + let button_text_font = TextFont { + font_size: 33.0, + ..default() + }; + + commands + .spawn(( + Node { + width: Val::Percent(100.0), + height: Val::Percent(100.0), + flex_direction: FlexDirection::Column, + align_items: AlignItems::Center, + justify_content: JustifyContent::Center, + ..default() + }, + OnMainMenuScreen + )) + .insert(MainMenu) + .with_children(|parent| { + parent.spawn(( + Node { + flex_direction: FlexDirection::Column, + align_items: AlignItems::Center, + ..default() + }, + BackgroundColor(BLACK.into()), + )) + .with_children(|parent| { + // Display the game name + parent.spawn(( + Text::new("Among Me"), + TextFont { + font_size: 67.0, + ..default() + }, + TextColor(TEXT_COLOR), + Node { + margin: UiRect::all(Val::Px(50.0)), + ..default() + }, + )); + + // Display three buttons for each action available from the main menu: + // - new game + // - settings + // - quit + parent + .spawn(( + Button, + button_node.clone(), + BackgroundColor(NORMAL_BUTTON), + MenuButton::Play, + )) + .with_children(|parent| { + parent.spawn(( + Text::new("New Game"), + button_text_font.clone(), + TextColor(TEXT_COLOR), + )); + }); + parent + .spawn(( + Button, + button_node.clone(), + BackgroundColor(NORMAL_BUTTON), + MenuButton::Quit, + )) + .with_children(|parent| { + parent.spawn(( + Text::new("Quit"), + button_text_font.clone(), + TextColor(TEXT_COLOR), + )); + }); + }); + }); +} + +fn button_system( + mut interaction_query: Query< + (&Interaction, &MenuButton), + (Changed, With