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_bundle(OrthographicCameraBundle::new_2d()); let texture = asset_server.load("branding/icon.png"); // Spawn a root entity with no parent let parent = commands .spawn_bundle(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_bundle(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 .id(); // 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_bundle(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: .insert(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_bundle(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() }) .id(); // Pushing takes a slice of children to add: commands.entity(parent).push_children(&[child]); } // A simple system to rotate the root entity, and rotate all its children separately fn rotate( mut commands: Commands, time: Res