diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index e3ca8a2fee573..ca8968bf837c1 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -39,6 +39,7 @@ impl Plugin for ScenePlugin { app.add_asset::() .add_asset::() .init_asset_loader::() + .add_event::() .init_resource::() .add_systems(Update, scene_spawner_system) // Systems `*_bundle_spawner` must run before `scene_spawner_system` diff --git a/crates/bevy_scene/src/scene_spawner.rs b/crates/bevy_scene/src/scene_spawner.rs index 732b8593f1a21..4816ee668212c 100644 --- a/crates/bevy_scene/src/scene_spawner.rs +++ b/crates/bevy_scene/src/scene_spawner.rs @@ -2,7 +2,7 @@ use crate::{DynamicScene, Scene}; use bevy_asset::{AssetEvent, Assets, Handle}; use bevy_ecs::{ entity::{Entity, EntityMap}, - event::{Events, ManualEventReader}, + event::{Event, Events, ManualEventReader}, reflect::AppTypeRegistry, system::{Command, Resource}, world::{Mut, World}, @@ -12,6 +12,15 @@ use bevy_utils::{tracing::error, HashMap, HashSet}; use thiserror::Error; use uuid::Uuid; +/// Emitted when [`crate::SceneInstance`] becomes ready to use. +/// +/// See also [`SceneSpawner::instance_is_ready`]. +#[derive(Event)] +pub struct SceneInstanceReady { + /// Entity to which the scene was spawned as a child. + pub parent: Entity, +} + /// Information about a scene instance. #[derive(Debug)] pub struct InstanceInfo { @@ -285,6 +294,8 @@ impl SceneSpawner { child: entity, } .apply(world); + + world.send_event(SceneInstanceReady { parent }); } } } else {