use bevy::{gltf::Gltf, prelude::*}; fn main() { App::new() .add_plugins((DefaultPlugins,)) .add_systems(Startup, startup) .add_systems(Update, inspect) .run(); } #[derive(Debug, Resource)] struct AssetRegistry { gltfs: Vec>, } fn startup(server: Res, mut commands: Commands) { commands.insert_resource(AssetRegistry { gltfs: vec![server.load("gltf/Martian Chess.glb")], }); commands.spawn(SpotLightBundle { transform: Transform::from_xyz(0.0, 5.0, 0.0).looking_at(Vec3::ZERO, Vec3::Y), ..default() }); commands.spawn(Camera3dBundle { transform: Transform::from_xyz(1.0, 1.0, 1.0).looking_at(Vec3::new(0.0, 0.3, 0.0), Vec3::Y), ..default() }); } fn inspect( mut events: EventReader>, gltfs: Res>, mut commands: Commands, ) { events.iter().for_each(|event| match event { AssetEvent::Created { handle } => { let gltf = gltfs.get(handle).expect("Fetch GLTF data"); commands.spawn(SceneBundle { scene: gltf .named_scenes .get("Board") .expect("Fetch board scene") .clone(), ..default() }); } _ => (), }); } fn track_named(events: Query<&Name, Added>) { events.iter().for_each(|name| { info!("named entity: {:?}", name); }); }