This commit is contained in:
@@ -12,13 +12,9 @@ use bevy_asset_loader::prelude::*;
|
|||||||
use bevy_rapier3d::dynamics::{Ccd, RigidBody, Velocity};
|
use bevy_rapier3d::dynamics::{Ccd, RigidBody, Velocity};
|
||||||
use bevy_rapier3d::geometry::Collider;
|
use bevy_rapier3d::geometry::Collider;
|
||||||
use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin};
|
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::sets::GameplaySet;
|
||||||
use shared::states::{GameplayState, MenuState};
|
use shared::states::{GameplayState, MenuState};
|
||||||
use shared::{despawn::DespawnPuglin, states::AssetLoadState};
|
use shared::{despawn::DespawnPuglin, states::AssetLoadState};
|
||||||
// use units::units_plugin::UnitsPlugin;
|
|
||||||
use world_generation::states::GeneratorState;
|
use world_generation::states::GeneratorState;
|
||||||
|
|
||||||
pub struct PhosGamePlugin;
|
pub struct PhosGamePlugin;
|
||||||
|
|||||||
@@ -7,18 +7,44 @@ use shared::states::AssetLoadState;
|
|||||||
|
|
||||||
use crate::ui::states::BuildUIState;
|
use crate::ui::states::BuildUIState;
|
||||||
pub struct BuildUIPlugin;
|
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
|
impl Plugin for BuildUIPlugin
|
||||||
{
|
{
|
||||||
fn build(&self, app: &mut App)
|
fn build(&self, app: &mut App)
|
||||||
{
|
{
|
||||||
app.add_systems(Startup, setup_cameras);
|
app.add_systems(Startup, setup_cameras);
|
||||||
|
app.init_resource::<BuildUIInfo>();
|
||||||
app.insert_state(BuildUIState::Init);
|
app.insert_state(BuildUIState::Init);
|
||||||
app.add_systems(
|
app.add_systems(
|
||||||
Update,
|
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)));
|
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<NextState<BuildUIStat
|
|||||||
width: Val::Px(500.),
|
width: Val::Px(500.),
|
||||||
height: Val::Px(100.),
|
height: Val::Px(100.),
|
||||||
justify_content: JustifyContent::Stretch,
|
justify_content: JustifyContent::Stretch,
|
||||||
|
flex_direction: FlexDirection::Column,
|
||||||
..default()
|
..default()
|
||||||
},
|
},
|
||||||
BackgroundColor(LinearRgba::GREEN.into()),
|
BackgroundColor(LinearRgba::GREEN.into()),
|
||||||
))
|
))
|
||||||
.with_children(|build_ui| {
|
.with_children(|build_ui| {
|
||||||
|
build_ui.spawn((
|
||||||
|
Name::new("Menu Root"),
|
||||||
|
BuildMenuRoot,
|
||||||
|
Node {
|
||||||
|
width: Val::Percent(100.),
|
||||||
|
height: Val::Px(70.),
|
||||||
|
column_gap: Val::Px(5.),
|
||||||
|
padding: UiRect::all(Val::Px(2.)),
|
||||||
|
flex_direction: FlexDirection::Row,
|
||||||
|
overflow: Overflow::scroll_x(),
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
));
|
||||||
build_ui
|
build_ui
|
||||||
.spawn((
|
.spawn((
|
||||||
Name::new("Toolbar"),
|
Name::new("Toolbar"),
|
||||||
@@ -120,13 +160,64 @@ fn spawn_ui(mut commands: Commands, mut next_state: ResMut<NextState<BuildUIStat
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
next_state.set(BuildUIState::Update);
|
next_state.set(BuildUIState::DrawMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn draw_menu_ui(
|
||||||
|
mut commands: Commands,
|
||||||
|
menu_root: Single<Entity, With<BuildMenuRoot>>,
|
||||||
|
menu_items: Query<Entity, With<BuildUIMenuItem>>,
|
||||||
|
menu_info: Res<BuildUIInfo>,
|
||||||
|
mut next: ResMut<NextState<BuildUIState>>,
|
||||||
|
)
|
||||||
|
{
|
||||||
|
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<Entity, With<BuildUIItem>>)
|
fn cleanup_ui(mut commands: Commands, ui_items: Query<Entity, With<BuildUIItem>>)
|
||||||
{
|
{
|
||||||
for item in ui_items.iter()
|
for entity in ui_items.iter()
|
||||||
{
|
{
|
||||||
commands.entity(item).despawn();
|
commands.entity(entity).despawn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ use bevy::prelude::*;
|
|||||||
pub enum BuildUIState
|
pub enum BuildUIState
|
||||||
{
|
{
|
||||||
Init,
|
Init,
|
||||||
|
DrawMenu,
|
||||||
Update,
|
Update,
|
||||||
Cleanup,
|
Cleanup,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user