diff --git a/examples/ecs/hierarchy.rs b/examples/ecs/hierarchy.rs index 1dbd5a8a4da89..478f89e5d6fc9 100644 --- a/examples/ecs/hierarchy.rs +++ b/examples/ecs/hierarchy.rs @@ -4,27 +4,102 @@ //! [`Transform`] and [`Visibility`] from parents to children down the hierarchy, //! resulting in a final [`GlobalTransform`] and [`InheritedVisibility`] component for each entity. -use std::f32::consts::*; +use std::{f32::consts::*, time::Duration}; -use bevy::{color::palettes::css::*, prelude::*}; +use bevy::{color::palettes::css::*, ecs::relationship::RelatedSpawner, prelude::*}; fn main() { App::new() .add_plugins(DefaultPlugins) .add_systems(Startup, setup) - .add_systems(Update, rotate) + .init_state::() + .insert_resource(Delta(Duration::ZERO)) + .add_systems(OnEnter(Showcase::WithChildren), setup_with_children) + .add_systems(OnEnter(Showcase::ChildrenSpawn), setup_children_spawn) + .add_systems(OnEnter(Showcase::ChildrenMacro), spawn_children_macro) + .add_systems(OnEnter(Showcase::ChildrenIter), setup_children_iter) + .add_systems(OnEnter(Showcase::Related), setup_children_related) + .add_systems(Update, (rotate, switch_scene)) .run(); } -fn setup(mut commands: Commands, asset_server: Res) { +#[derive(Debug, Clone, Eq, PartialEq, Hash, States, Default)] +enum Showcase { + #[default] + WithChildren, + ChildrenSpawn, + ChildrenMacro, + ChildrenIter, + Related, +} + +impl Showcase { + fn next(&self) -> Self { + match self { + Showcase::WithChildren => Showcase::ChildrenSpawn, + Showcase::ChildrenSpawn => Showcase::ChildrenMacro, + Showcase::ChildrenMacro => Showcase::ChildrenIter, + Showcase::ChildrenIter => Showcase::Related, + Showcase::Related => Showcase::WithChildren, + } + } +} + +fn switch_scene( + keyboard: Res>, + scene: Res>, + mut next_scene: ResMut>, +) { + if keyboard.just_pressed(KeyCode::Space) { + info!("Switching scene"); + next_scene.set(scene.get().next()); + } +} + +fn setup(mut commands: Commands) { commands.spawn(Camera2d); +} + +#[derive(Resource)] +struct Delta(Duration); + +fn setup_common( + commands: &mut Commands, + time: &Res