diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index edea707..c1501d3 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -12,13 +12,9 @@ use bevy_asset_loader::prelude::*; use bevy_rapier3d::dynamics::{Ccd, RigidBody, Velocity}; use bevy_rapier3d::geometry::Collider; use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin}; -// use buildings::BuildingPugin; -// use iyes_perf_ui::prelude::*; -// use shared::animation_plugin::SimpleAnimationPlugin; use shared::sets::GameplaySet; use shared::states::{GameplayState, MenuState}; use shared::{despawn::DespawnPuglin, states::AssetLoadState}; -// use units::units_plugin::UnitsPlugin; use world_generation::states::GeneratorState; pub struct PhosGamePlugin; diff --git a/game/main/src/ui/build_ui.rs b/game/main/src/ui/build_ui.rs index 58f6cfb..69a95aa 100644 --- a/game/main/src/ui/build_ui.rs +++ b/game/main/src/ui/build_ui.rs @@ -7,18 +7,44 @@ use shared::states::AssetLoadState; use crate::ui::states::BuildUIState; pub struct BuildUIPlugin; -#[derive(Component)] -pub struct BuildUIItem; + +#[derive(Component, Default)] +struct BuildUIItem; + +#[derive(Component, Default)] +#[require(BuildUIItem)] +struct BuildUIMenuItem; + +#[derive(Component, Default)] +struct BuildMenuRoot; + +#[derive(Resource, Reflect, Debug, Default)] +struct BuildUIInfo +{ + menu: BuildUIMenu, +} + +#[derive(Default, Reflect, Debug)] +enum BuildUIMenu +{ + #[default] + Structure, + Defense, +} impl Plugin for BuildUIPlugin { fn build(&self, app: &mut App) { app.add_systems(Startup, setup_cameras); + app.init_resource::(); app.insert_state(BuildUIState::Init); app.add_systems( Update, - spawn_ui.run_if(in_state(AssetLoadState::LoadComplete).and(in_state(BuildUIState::Init))), + ( + spawn_ui.run_if(in_state(AssetLoadState::LoadComplete).and(in_state(BuildUIState::Init))), + draw_menu_ui.run_if(in_state(AssetLoadState::LoadComplete).and(in_state(BuildUIState::DrawMenu))), + ), ); app.add_systems(PostUpdate, cleanup_ui.run_if(in_state(BuildUIState::Cleanup))); } @@ -69,11 +95,25 @@ fn spawn_ui(mut commands: Commands, mut next_state: ResMut>, + menu_items: Query>, + menu_info: Res, + mut next: ResMut>, +) +{ + for entity in menu_items.iter() + { + commands.entity(entity).despawn(); + } + info!("Draw Menu"); + match menu_info.menu + { + BuildUIMenu::Structure => draw_structure_ui(commands, menu_root.into_inner()), + BuildUIMenu::Defense => (), + } + next.set(BuildUIState::Update); +} + +fn draw_structure_ui(mut commands: Commands, root: Entity) +{ + commands.entity(root).with_children(|root| { + for i in 0..10 + { + root.spawn(( + BuildUIMenuItem, + Node { + height: Val::Percent(100.), + width: Val::Px(100.), + display: Display::Grid, + grid_template_rows: vec![RepeatedGridTrack::px(1, 100.), RepeatedGridTrack::fr(1, 1.)], + ..default() + }, + children![ + ( + Node { + height: Val::Px(100.), + width: Val::Px(100.), + ..default() + }, + BackgroundColor(LinearRgba::RED.into()) + ), + (Text::new(format!("Icon {}", i))), + ], + )); + } + }); } fn cleanup_ui(mut commands: Commands, ui_items: Query>) { - for item in ui_items.iter() + for entity in ui_items.iter() { - commands.entity(item).despawn(); + commands.entity(entity).despawn(); } } diff --git a/game/main/src/ui/states.rs b/game/main/src/ui/states.rs index efc3d20..5053ddb 100644 --- a/game/main/src/ui/states.rs +++ b/game/main/src/ui/states.rs @@ -4,6 +4,7 @@ use bevy::prelude::*; pub enum BuildUIState { Init, + DrawMenu, Update, Cleanup, }