use bevy::{prelude::*, gltf::Gltf}; 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: server.load_folder("gltf").expect("Loading GLTF Assets").into_iter().map(|untyped| untyped.typed::()).collect() }); 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("Helmet").expect("Fetch board scene").clone(), ..default() }); }, _ => () } }); }