use bevy::prelude::*; fn main() { App::build() .add_plugins(DefaultPlugins) .add_startup_system(setup.system()) .add_system(rotate.system()) .run(); } fn setup( mut commands: Commands, asset_server: Res, mut materials: ResMut>, ) { commands.spawn(OrthographicCameraBundle::new_2d()); let texture = asset_server.load("branding/icon.png"); // Spawn a root entity with no parent let parent = commands .spawn(SpriteBundle { transform: Transform::from_scale(Vec3::splat(0.75)), material: materials.add(ColorMaterial { color: Color::WHITE, texture: Some(texture.clone()), }), ..Default::default() }) // With that entity as a parent, run a lambda that spawns its children .with_children(|parent| { // parent is a ChildBuilder, which has a similar API to Commands parent.spawn(SpriteBundle { transform: Transform { translation: Vec3::new(250.0, 0.0, 0.0), scale: Vec3::splat(0.75), ..Default::default() }, material: materials.add(ColorMaterial { color: Color::BLUE, texture: Some(texture.clone()), }), ..Default::default() }); }) // Store parent entity for next sections .current_entity() .unwrap(); // Another way to create a hierarchy is to add a Parent component to an entity, // which would be added automatically to parents with other methods. // Similarly, adding a Parent component will automatically add a Children component to the // parent. commands .spawn(SpriteBundle { transform: Transform { translation: Vec3::new(-250.0, 0.0, 0.0), scale: Vec3::splat(0.75), ..Default::default() }, material: materials.add(ColorMaterial { color: Color::RED, texture: Some(texture.clone()), }), ..Default::default() }) // Using the entity from the previous section as the parent: .with(Parent(parent)); // Another way is to use the push_children function to add children after the parent // entity has already been spawned. let child = commands .spawn(SpriteBundle { transform: Transform { translation: Vec3::new(0.0, 250.0, 0.0), scale: Vec3::splat(0.75), ..Default::default() }, material: materials.add(ColorMaterial { color: Color::GREEN, texture: Some(texture), }), ..Default::default() }) .current_entity() .unwrap(); // Pushing takes a slice of children to add: commands.push_children(parent, &[child]); } // A simple system to rotate the root entity, and rotate all its children separately fn rotate( mut commands: Commands, time: Res